{
	"id": "3ff3d6005a8558c112fb748b5ede6c97",
	"_format": "hh-sol-build-info-1",
	"solcVersion": "0.8.6",
	"solcLongVersion": "0.8.6+commit.11564f7e",
	"input": {
		"language": "Solidity",
		"sources": {
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol": {
				"content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity 0.8.6;\n\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport \"@openzeppelin/contracts/utils/Multicall.sol\";\n\nimport \"./interfaces/IGaugeReward.sol\";\nimport \"./interfaces/IGaugeController.sol\";\nimport \"./interfaces/IPrizePoolLiquidatorListener.sol\";\n\n/**\n  * @title  PoolTogether V4 GaugeReward\n  * @author PoolTogether Inc Team\n  * @notice The GaugeReward contract handles rewards for users\n            who staked in one or several gauges on the GaugeController contract.\n  * @dev    This contract is only keeping track of the rewards.\n            Reward tokens are actually stored in the TokenVault contract.\n*/\ncontract GaugeReward is IGaugeReward, IPrizePoolLiquidatorListener, Multicall {\n    using SafeERC20 for IERC20;\n\n    /* ============ Variables ============ */\n\n    /**\n     * @notice Tracks user token reward balances\n     * @dev user => reward token address => balance\n     */\n    mapping(address => mapping(IERC20 => uint256)) public userRewardTokenBalances;\n\n    /**\n     * @notice Tracks reward token exchange rate per user and gauge\n     * @dev user => gauge => reward token address => reward token timestamp => exchange rate\n     */\n    mapping(address => mapping(address => mapping(IERC20 => mapping(uint64 => uint256))))\n        public userGaugeRewardTokenExchangeRates;\n\n    /**\n     * @notice Tracks user last claimed timestamp per gauge and reward token\n     * @dev user => gauge => reward token address => timestamp\n     */\n    mapping(address => mapping(address => mapping(address => uint256)))\n        public userGaugeRewardTokenLastClaimedTimestamp;\n\n    /**\n     * @notice Tracks reward token exchange rates per gauge\n     * @dev gauge => reward token address => reward token timestamp => exchange rate\n     */\n    mapping(address => mapping(IERC20 => mapping(uint64 => uint256)))\n        public gaugeRewardTokenExchangeRates;\n\n    /**\n     * @notice RewardToken struct\n     * @param token Address of the reward token\n     * @param timestamp Timestamp at which the reward token was added\n     */\n    struct RewardToken {\n        IERC20 token;\n        uint64 timestamp;\n    }\n\n    /**\n     * @notice Tracks reward tokens per gauge\n     * @dev gauge => reward tokens array\n     */\n    mapping(address => RewardToken[]) public gaugeRewardTokens;\n\n    /// @notice GaugeController contract address\n    IGaugeController public gaugeController;\n\n    /// @notice Vault contract address\n    address public vault;\n\n    /// @notice Address of the liquidator that this contract is listening to\n    address public liquidator;\n\n    /// @notice Percentage of rewards that goes to stakers. Fixed point 9 number that is less than 1.\n    uint32 public stakerCut;\n\n    /* ============ Events ============ */\n\n    /**\n     * @notice Emitted when the contract is deployed\n     * @param gaugeController Address of the GaugeController\n     * @param vault Address of the Vault\n     * @param liquidator Address of the Liquidator\n     * @param stakerCut Percentage of rewards that goes to stakers\n     */\n    event Deployed(\n        IGaugeController indexed gaugeController,\n        address indexed vault,\n        address indexed liquidator,\n        uint32 stakerCut\n    );\n\n    /**\n     * @notice Emitted when tickets are swapped for tokens\n     * @param gauge Address of the gauge for which tokens were added\n     * @param token Address of the token sent to the vault\n     * @param amount Amount of tokens sent to the vault\n     * @param stakerRewards Amount of rewards allocated to stakers\n     * @param exchangeRate New exchange rate for this `token` in this `gauge`\n     */\n    event RewardsAdded(\n        address indexed gauge,\n        IERC20 indexed token,\n        uint256 amount,\n        uint256 stakerRewards,\n        uint256 exchangeRate\n    );\n\n    /**\n     * @notice Emitted when a user claimed their rewards for a given gauge and token\n     * @param gauge Address of the gauge for which the user claimed rewards\n     * @param token Address of the token for which the user claimed rewards\n     * @param user Address of the user for which the rewards were claimed\n     * @param amount Total amount of rewards claimed\n     * @param exchangeRate Exchange rate at which the rewards were claimed\n     */\n    event RewardsClaimed(\n        address indexed gauge,\n        IERC20 indexed token,\n        address indexed user,\n        uint256 amount,\n        uint256 exchangeRate\n    );\n\n    /**\n     * @notice Emitted when a user redeemed their rewards for a given token\n     * @param caller Address who called the redeem function\n     * @param user Address of the user for which the rewards were redeemed\n     * @param token Address of the token for which the user redeemed rewards\n     * @param amount Total amount of rewards redeemed\n     */\n    event RewardsRedeemed(\n        address indexed caller,\n        address indexed user,\n        IERC20 indexed token,\n        uint256 amount\n    );\n\n    /**\n     * @notice Emitted when a new reward token is pushed onto the `gaugeRewardTokens` mapping\n     * @param gauge Address of the gauge for which the reward token is added\n     * @param token Address of the token being pushed\n     * @param timestamp Timestamp at which the reward token was pushed\n     */\n    event RewardTokenPushed(address indexed gauge, IERC20 indexed token, uint256 timestamp);\n\n    /* ============ Constructor ============ */\n\n    /**\n     * @notice GaugeReward constructor\n     * @param _gaugeController Address of the GaugeController\n     * @param _vault Address of the Vault\n     * @param _liquidator Address of the Liquidator\n     * @param _stakerCut Percentage of rewards that goes to stakers\n     */\n    constructor(\n        IGaugeController _gaugeController,\n        address _vault,\n        address _liquidator,\n        uint32 _stakerCut\n    ) {\n        require(address(_gaugeController) != address(0), \"GReward/GC-not-zero-address\");\n        require(_vault != address(0), \"GReward/Vault-not-zero-address\");\n        require(_liquidator != address(0), \"GReward/Liq-not-zero-address\");\n        require(_stakerCut < 1e9, \"GReward/staker-cut-lt-1e9\");\n\n        gaugeController = _gaugeController;\n        vault = _vault;\n        stakerCut = _stakerCut;\n        liquidator = _liquidator;\n\n        emit Deployed(_gaugeController, _vault, _liquidator, _stakerCut);\n    }\n\n    /* ============ External Functions ============ */\n\n    /**\n     * @notice Return the current reward token for the given gauge.\n     * @param _gauge Address of the gauge to get current reward token for\n     * @return Current reward token for the given gauge\n     */\n    function currentRewardToken(address _gauge) external view returns (RewardToken memory) {\n        return _currentRewardToken(_gauge);\n    }\n\n    /**\n     * @notice Get user rewards for a given gauge and token.\n     * @param _gauge Address of the gauge to get rewards for\n     * @param _rewardToken Reward token to get rewards for\n     * @param _user Address of the user to get rewards for\n     * @return Amount of rewards for the given gauge and token\n     */\n    function getRewards(\n        address _gauge,\n        RewardToken memory _rewardToken,\n        address _user\n    ) external view returns (uint256) {\n        uint256 _stakeBalance = gaugeController.getUserGaugeBalance(_gauge, _user);\n        (uint256 _rewards, ) = _getRewards(_gauge, _rewardToken, _user, _stakeBalance);\n\n        return _rewards;\n    }\n\n    /**\n     * @notice Records exchange rate after swapping an amount of `ticket` for `token`.\n     * @dev Called by the liquidator contract anytime tokens are liquidated.\n     * @dev Will push `token` to the `gaugeRewardTokens` mapping if different from the current one.\n     * @param _ticket Address of the tickets that were sold\n     * @param _token Address of the token that the tickets were sold for\n     * @param _tokenAmount Amount of tokens that the tickets were sold for\n     */\n    function afterSwap(\n        IPrizePool,\n        ITicket _ticket,\n        uint256,\n        IERC20 _token,\n        uint256 _tokenAmount\n    ) external override {\n        require(msg.sender == liquidator, \"GReward/only-liquidator\");\n\n        address _gauge = address(_ticket);\n\n        RewardToken memory _rewardToken = _currentRewardToken(_gauge);\n\n        if (_token != _rewardToken.token) {\n            uint256 _currentTimestamp = block.timestamp;\n\n            RewardToken memory _newRewardToken = RewardToken({\n                token: _token,\n                timestamp: uint64(_currentTimestamp)\n            });\n\n            gaugeRewardTokens[_gauge].push(_newRewardToken);\n\n            emit RewardTokenPushed(_gauge, _token, _currentTimestamp);\n\n            _rewardToken = _newRewardToken;\n        }\n\n        uint256 _gaugeRewards = (_tokenAmount * stakerCut) / 1e9;\n        uint256 _gaugeBalance = gaugeController.getGaugeBalance(_gauge);\n\n        // Exchange rate = amount / current staked amount on gauge\n        uint256 _exchangeRate = _gaugeBalance > 0 ? (_gaugeRewards * 1e18) / _gaugeBalance : 0;\n\n        gaugeRewardTokenExchangeRates[_gauge][_rewardToken.token][\n            _rewardToken.timestamp\n        ] += _exchangeRate;\n\n        emit RewardsAdded(_gauge, _token, _tokenAmount, _gaugeRewards, _exchangeRate);\n    }\n\n    /// @inheritdoc IGaugeReward\n    function afterIncreaseGauge(\n        address _gauge,\n        address _user,\n        uint256 _oldStakeBalance\n    ) external override onlyGaugeController {\n        _claimAll(_gauge, _user, _oldStakeBalance);\n    }\n\n    /// @inheritdoc IGaugeReward\n    function afterDecreaseGauge(\n        address _gauge,\n        address _user,\n        uint256 _oldStakeBalance\n    ) external override onlyGaugeController {\n        _claimAll(_gauge, _user, _oldStakeBalance);\n    }\n\n    /**\n     * @notice Claim user rewards for a given gauge and reward token.\n     * @param _gauge Address of the gauge to claim rewards for\n     * @param _rewardToken Reward token to claim rewards for\n     * @param _user Address of the user to claim rewards for\n     */\n    function claim(\n        address _gauge,\n        RewardToken memory _rewardToken,\n        address _user\n    ) external {\n        uint256 _stakeBalance = gaugeController.getUserGaugeBalance(_gauge, _user);\n        _claim(_gauge, _rewardToken, _user, _stakeBalance);\n    }\n\n    /**\n     * @notice Claim all user rewards for a given gauge.\n     * @param _gauge Address of the gauge to claim rewards for\n     * @param _user Address of the user to claim rewards for\n     */\n    function claimAll(address _gauge, address _user) external {\n        uint256 _stakeBalance = gaugeController.getUserGaugeBalance(_gauge, _user);\n        _claimAll(_gauge, _user, _stakeBalance);\n    }\n\n    /**\n     * @notice Redeem user rewards for a given token.\n     * @dev Rewards can be redeemed on behalf of a user.\n     * @param _user Address of the user to redeem rewards for\n     * @param _token Address of the token to redeem rewards for\n     * @return Amount of rewards redeemed\n     */\n    function redeem(address _user, IERC20 _token) external returns (uint256) {\n        uint256 _rewards = userRewardTokenBalances[_user][_token];\n\n        userRewardTokenBalances[_user][_token] = 0;\n        _token.safeTransferFrom(vault, _user, _rewards);\n\n        emit RewardsRedeemed(msg.sender, _user, _token, _rewards);\n\n        return _rewards;\n    }\n\n    /* ============ Internal Functions ============ */\n\n    /**\n     * @notice Return the current reward token for the given gauge\n     * @param _gauge Address of the gauge to get current reward token for\n     * @return Current reward token for the given gauge\n     */\n    function _currentRewardToken(address _gauge) internal view returns (RewardToken memory) {\n        RewardToken[] memory _gaugeRewardTokens = gaugeRewardTokens[_gauge];\n        uint256 _gaugeRewardTokensLength = _gaugeRewardTokens.length;\n\n        if (_gaugeRewardTokensLength > 0) {\n            return _gaugeRewardTokens[_gaugeRewardTokensLength - 1];\n        } else {\n            return RewardToken(IERC20(address(0)), 0);\n        }\n    }\n\n    /**\n     * @notice Get user last claimed timestamp for a given gauge and reward token\n     * @param _user Address of the user to set last claimed timestamp for\n     * @param _gauge Address of the gauge to set last claimed timestamp for\n     * @param _rewardTokenAddress Address of the reward token to set last claimed timestamp for\n     * @return Last claimed timestamp for the given gauge and reward token\n     */\n    function _getUserGaugeRewardTokenLastClaimedTimestamp(\n        address _user,\n        address _gauge,\n        address _rewardTokenAddress\n    ) internal view returns (uint256) {\n        return userGaugeRewardTokenLastClaimedTimestamp[_user][_gauge][_rewardTokenAddress];\n    }\n\n    /**\n     * @notice Set user last claimed timestamp for a given gauge and reward token\n     * @param _user Address of the user to set last claimed timestamp for\n     * @param _gauge Address of the gauge to set last claimed timestamp for\n     * @param _rewardTokenAddress Address of the reward token to set last claimed timestamp for\n     */\n    function _setUserGaugeRewardTokenLastClaimedTimestamp(\n        address _user,\n        address _gauge,\n        address _rewardTokenAddress\n    ) internal {\n        userGaugeRewardTokenLastClaimedTimestamp[_user][_gauge][_rewardTokenAddress] = uint64(\n            block.timestamp\n        );\n    }\n\n    /**\n     * @notice Get user rewards for a given gauge and token.\n     * @param _gauge Address of the gauge to get rewards for\n     * @param _rewardToken Reward token to get rewards for\n     * @param _user Address of the user to get rewards for\n     * @param _stakeBalance User stake balance\n     * @return _rewards Amount of rewards for the given gauge and token\n     * @return _exchangeRate Current exchange rate for the given gauge and token\n     */\n    function _getRewards(\n        address _gauge,\n        RewardToken memory _rewardToken,\n        address _user,\n        uint256 _stakeBalance\n    ) internal view returns (uint256 _rewards, uint256 _exchangeRate) {\n        uint256 _previousExchangeRate = userGaugeRewardTokenExchangeRates[_user][_gauge][\n            _rewardToken.token\n        ][_rewardToken.timestamp];\n\n        uint256 _currentExchangeRate = gaugeRewardTokenExchangeRates[_gauge][_rewardToken.token][\n            _rewardToken.timestamp\n        ];\n\n        uint256 _userLastClaimedTimestamp = _getUserGaugeRewardTokenLastClaimedTimestamp(\n            _user,\n            _gauge,\n            address(_rewardToken.token)\n        );\n\n        if (_userLastClaimedTimestamp == 0) {\n            RewardToken[] memory _gaugeRewardTokens = gaugeRewardTokens[_gauge];\n            uint256 _gaugeRewardTokensLength = _gaugeRewardTokens.length;\n\n            if (_gaugeRewardTokensLength > 1) {\n                RewardToken memory _previousRewardToken = _gaugeRewardTokens[\n                    _gaugeRewardTokensLength - 1\n                ];\n\n                // User may have claimed rewards for the previous reward token\n                _userLastClaimedTimestamp = _getUserGaugeRewardTokenLastClaimedTimestamp(\n                    _user,\n                    _gauge,\n                    address(_previousRewardToken.token)\n                );\n            }\n\n            if (_userLastClaimedTimestamp == 0) {\n                // User may have claimed rewards before any tokens were set for the gauge\n                _userLastClaimedTimestamp = _getUserGaugeRewardTokenLastClaimedTimestamp(\n                    _user,\n                    _gauge,\n                    address(0)\n                );\n            }\n        }\n\n        bool _isEligibleForPastRewards = _userLastClaimedTimestamp > 0 &&\n            _rewardToken.timestamp > _userLastClaimedTimestamp;\n\n        // User is not eligible for any rewards, we return early\n        if (!_isEligibleForPastRewards && _previousExchangeRate == 0) {\n            return (0, _currentExchangeRate);\n        }\n\n        return (\n            // Rewards = deltaExchangeRate * stakeBalance\n            ((_currentExchangeRate - _previousExchangeRate) * _stakeBalance) / 1e18,\n            _currentExchangeRate\n        );\n    }\n\n    /**\n     * @notice Claim user rewards for a given gauge and token.\n     * @param _gauge Address of the gauge to claim rewards for\n     * @param _rewardToken Reward token to get rewards for\n     * @param _user Address of the user to claim rewards for\n     * @param _stakeBalance User stake balance\n     */\n    function _claimRewards(\n        address _gauge,\n        RewardToken memory _rewardToken,\n        address _user,\n        uint256 _stakeBalance\n    ) internal returns (uint256) {\n        (uint256 _rewards, uint256 _exchangeRate) = _getRewards(\n            _gauge,\n            _rewardToken,\n            _user,\n            _stakeBalance\n        );\n\n        userGaugeRewardTokenExchangeRates[_user][_gauge][_rewardToken.token][\n            _rewardToken.timestamp\n        ] = _exchangeRate;\n\n        if (_rewards > 0) {\n            userRewardTokenBalances[_user][_rewardToken.token] += _rewards;\n            emit RewardsClaimed(_gauge, _rewardToken.token, _user, _rewards, _exchangeRate);\n        }\n\n        return _rewards;\n    }\n\n    /**\n     * @notice Claim user rewards for a given gauge and token.\n     * @param _gauge Address of the gauge to claim rewards for\n     * @param _rewardToken Reward token to claim rewards for\n     * @param _user Address of the user to claim rewards for\n     * @param _stakeBalance User stake balance\n     */\n    function _claim(\n        address _gauge,\n        RewardToken memory _rewardToken,\n        address _user,\n        uint256 _stakeBalance\n    ) internal {\n        _claimRewards(_gauge, _rewardToken, _user, _stakeBalance);\n        _setUserGaugeRewardTokenLastClaimedTimestamp(_user, _gauge, address(_rewardToken.token));\n    }\n\n    /**\n     * @notice Claim all user rewards for a given gauge.\n     * @dev Go through all the reward tokens for the given gauge and claim rewards.\n     * @param _gauge Address of the gauge to claim rewards for\n     * @param _user Address of the user to claim rewards for\n     * @param _stakeBalance User stake balance\n     */\n    function _claimAll(\n        address _gauge,\n        address _user,\n        uint256 _stakeBalance\n    ) internal {\n        uint256 _gaugeRewardTokensLength = gaugeRewardTokens[_gauge].length;\n\n        RewardToken memory _rewardToken;\n\n        if (_gaugeRewardTokensLength > 0) {\n            uint256 i = _gaugeRewardTokensLength;\n\n            while (i > 0) {\n                i = i - 1;\n                _rewardToken = gaugeRewardTokens[_gauge][i];\n                _claimRewards(_gauge, _rewardToken, _user, _stakeBalance);\n                _setUserGaugeRewardTokenLastClaimedTimestamp(\n                    _user,\n                    _gauge,\n                    address(_rewardToken.token)\n                );\n            }\n        } else {\n            // If no reward token has been added yet, set claimed timestamp for reward token 0\n            _setUserGaugeRewardTokenLastClaimedTimestamp(_user, _gauge, address(0));\n        }\n    }\n\n    /* ============ Modifiers ============ */\n\n    /// @notice Restricts call to GaugeController contract\n    modifier onlyGaugeController() {\n        require(msg.sender == address(gaugeController), \"GReward/only-GaugeController\");\n        _;\n    }\n}\n"
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IPrizePoolLiquidatorListener.sol": {
				"content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity 0.8.6;\n\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport \"./IPrizePool.sol\";\nimport \"./ITicket.sol\";\n\n/**\n * @author PoolTogether Inc Team\n */\ninterface IPrizePoolLiquidatorListener {\n    function afterSwap(IPrizePool prizePool, ITicket ticket, uint256 ticketAmount, IERC20 token, uint256 tokenAmount) external;\n}"
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IGaugeController.sol": {
				"content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.8.6;\n\ninterface IGaugeController {\n    /**\n     * @notice Get the gauge scaled average balance between two timestamps.\n     * @param _gauge Address of the gauge to get the average scaled balance for\n     * @param _startTime Start timestamp at which to get the average scaled balance\n     * @param _endTime End timestamp at which to get the average scaled balance\n     * @return The gauge scaled average balance between the two timestamps\n     */\n    function getScaledAverageGaugeBalanceBetween(\n        address _gauge,\n        uint256 _startTime,\n        uint256 _endTime\n    ) external view returns (uint256);\n    \n    /**\n     * @notice Read Gauge balance.\n     * @param _gauge Address of existing Gauge\n     * @return uint256 GaugeTWAB.details.balance\n     */\n     function getGaugeBalance(address _gauge) external view returns (uint256);\n\n     /**\n      * @notice Read Gauge scaled balance.\n      * @param _gauge Address of existing Gauge\n      * @return uint256 GaugeScaleTWAB.details.balance\n      */\n     function getGaugeScaleBalance(address _gauge) external view returns (uint256);\n \n     /**\n      * @notice Get the user stake balance for a given gauge\n      * @param _gauge Address of the gauge to get stake balance for\n      * @param _user Address of the user to get stake balance for\n      * @return The user gauge balance\n      */\n     function getUserGaugeBalance(address _gauge, address _user) external view returns (uint256);\n}"
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IGaugeReward.sol": {
				"content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity 0.8.6;\n\n/**\n * @title  PoolTogether V4 IGaugeReward\n * @author PoolTogether Inc Team\n * @notice The GaugeReward interface.\n */\ninterface IGaugeReward {\n    /**\n     * @notice Fallback function to call in GaugeController after a user has increased their gauge stake.\n     * @notice Callback function to call in GaugeController after a user has increased their gauge stake.\n     * @param gauge Address of the gauge to increase stake for\n     * @param user Address of the user to increase stake for\n     * @param oldStakeBalance Old stake balance of the user\n     */\n    function afterIncreaseGauge(\n        address gauge,\n        address user,\n        uint256 oldStakeBalance\n    ) external;\n\n    /**\n     * @notice Callback function to call in GaugeController after a user has decreased his gauge stake.\n     * @param gauge Address of the gauge to decrease stake for\n     * @param user Address of the user to decrease stake for\n     * @param oldStakeBalance Old stake balance of the user\n     */\n    function afterDecreaseGauge(\n        address gauge,\n        address user,\n        uint256 oldStakeBalance\n    ) external;\n}\n"
			},
			"@openzeppelin/contracts/utils/Multicall.sol": {
				"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0) (utils/Multicall.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./Address.sol\";\n\n/**\n * @dev Provides a function to batch together multiple calls in a single external call.\n *\n * _Available since v4.1._\n */\nabstract contract Multicall {\n    /**\n     * @dev Receives and executes a batch of function calls on this contract.\n     */\n    function multicall(bytes[] calldata data) external virtual returns (bytes[] memory results) {\n        results = new bytes[](data.length);\n        for (uint256 i = 0; i < data.length; i++) {\n            results[i] = Address.functionDelegateCall(address(this), data[i]);\n        }\n        return results;\n    }\n}\n"
			},
			"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": {
				"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../IERC20.sol\";\nimport \"../extensions/draft-IERC20Permit.sol\";\nimport \"../../../utils/Address.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 SafeERC20 {\n    using Address for address;\n\n    function safeTransfer(\n        IERC20 token,\n        address to,\n        uint256 value\n    ) internal {\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\n    }\n\n    function safeTransferFrom(\n        IERC20 token,\n        address from,\n        address to,\n        uint256 value\n    ) 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(\n        IERC20 token,\n        address spender,\n        uint256 value\n    ) 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    function safeIncreaseAllowance(\n        IERC20 token,\n        address spender,\n        uint256 value\n    ) internal {\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\n    }\n\n    function safeDecreaseAllowance(\n        IERC20 token,\n        address spender,\n        uint256 value\n    ) internal {\n        unchecked {\n            uint256 oldAllowance = token.allowance(address(this), spender);\n            require(oldAllowance >= value, \"SafeERC20: decreased allowance below zero\");\n            uint256 newAllowance = oldAllowance - value;\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\n        }\n    }\n\n    function safePermit(\n        IERC20Permit 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(IERC20 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        if (returndata.length > 0) {\n            // Return data is optional\n            require(abi.decode(returndata, (bool)), \"SafeERC20: ERC20 operation did not succeed\");\n        }\n    }\n}\n"
			},
			"@openzeppelin/contracts/token/ERC20/IERC20.sol": {
				"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.6.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 IERC20 {\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(\n        address from,\n        address to,\n        uint256 amount\n    ) external returns (bool);\n}\n"
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/ITicket.sol": {
				"content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity 0.8.6;\n\nimport \"../libraries/TwabLib.sol\";\nimport \"./IControlledToken.sol\";\n\ninterface ITicket is IControlledToken {\n    /**\n     * @notice A struct containing details for an Account.\n     * @param balance The current balance for an Account.\n     * @param nextTwabIndex The next available index to store a new twab.\n     * @param cardinality The number of recorded twabs (plus one!).\n     */\n    struct AccountDetails {\n        uint224 balance;\n        uint16 nextTwabIndex;\n        uint16 cardinality;\n    }\n\n    /**\n     * @notice Combines account details with their twab history.\n     * @param details The account details.\n     * @param twabs The history of twabs for this account.\n     */\n    struct Account {\n        AccountDetails details;\n        ObservationLib.Observation[65535] twabs;\n    }\n\n    /**\n     * @notice Emitted when TWAB balance has been delegated to another user.\n     * @param delegator Address of the delegator.\n     * @param delegate Address of the delegate.\n     */\n    event Delegated(address indexed delegator, address indexed delegate);\n\n    /**\n     * @notice Emitted when ticket is initialized.\n     * @param name Ticket name (eg: PoolTogether Dai Ticket (Compound)).\n     * @param symbol Ticket symbol (eg: PcDAI).\n     * @param decimals Ticket decimals.\n     * @param controller Token controller address.\n     */\n    event TicketInitialized(string name, string symbol, uint8 decimals, address indexed controller);\n\n    /**\n     * @notice Emitted when a new TWAB has been recorded.\n     * @param delegate The recipient of the ticket power (may be the same as the user).\n     * @param newTwab Updated TWAB of a ticket holder after a successful TWAB recording.\n     */\n    event NewUserTwab(\n        address indexed delegate,\n        ObservationLib.Observation newTwab\n    );\n\n    /**\n     * @notice Emitted when a new total supply TWAB has been recorded.\n     * @param newTotalSupplyTwab Updated TWAB of tickets total supply after a successful total supply TWAB recording.\n     */\n    event NewTotalSupplyTwab(ObservationLib.Observation newTotalSupplyTwab);\n\n    /**\n     * @notice Retrieves the address of the delegate to whom `user` has delegated their tickets.\n     * @dev Address of the delegate will be the zero address if `user` has not delegated their tickets.\n     * @param user Address of the delegator.\n     * @return Address of the delegate.\n     */\n    function delegateOf(address user) external view returns (address);\n\n    /**\n    * @notice Delegate time-weighted average balances to an alternative address.\n    * @dev    Transfers (including mints) trigger the storage of a TWAB in delegate(s) account, instead of the\n              targetted sender and/or recipient address(s).\n    * @dev    To reset the delegate, pass the zero address (0x000.000) as `to` parameter.\n    * @dev Current delegate address should be different from the new delegate address `to`.\n    * @param  to Recipient of delegated TWAB.\n    */\n    function delegate(address to) external;\n\n    /**\n     * @notice Allows the controller to delegate on a users behalf.\n     * @param user The user for whom to delegate\n     * @param delegate The new delegate\n     */\n    function controllerDelegateFor(address user, address delegate) external;\n\n    /**\n     * @notice Allows a user to delegate via signature\n     * @param user The user who is delegating\n     * @param delegate The new delegate\n     * @param deadline The timestamp by which this must be submitted\n     * @param v The v portion of the ECDSA sig\n     * @param r The r portion of the ECDSA sig\n     * @param s The s portion of the ECDSA sig\n     */\n    function delegateWithSignature(\n        address user,\n        address delegate,\n        uint256 deadline,\n        uint8 v,\n        bytes32 r,\n        bytes32 s\n    ) external;\n\n    /**\n     * @notice Gets a users twab context.  This is a struct with their balance, next twab index, and cardinality.\n     * @param user The user for whom to fetch the TWAB context.\n     * @return The TWAB context, which includes { balance, nextTwabIndex, cardinality }\n     */\n    function getAccountDetails(address user) external view returns (TwabLib.AccountDetails memory);\n\n    /**\n     * @notice Gets the TWAB at a specific index for a user.\n     * @param user The user for whom to fetch the TWAB.\n     * @param index The index of the TWAB to fetch.\n     * @return The TWAB, which includes the twab amount and the timestamp.\n     */\n    function getTwab(address user, uint16 index)\n        external\n        view\n        returns (ObservationLib.Observation memory);\n\n    /**\n     * @notice Retrieves `user` TWAB balance.\n     * @param user Address of the user whose TWAB is being fetched.\n     * @param timestamp Timestamp at which we want to retrieve the TWAB balance.\n     * @return The TWAB balance at the given timestamp.\n     */\n    function getBalanceAt(address user, uint64 timestamp) external view returns (uint256);\n\n    /**\n     * @notice Retrieves `user` TWAB balances.\n     * @param user Address of the user whose TWABs are being fetched.\n     * @param timestamps Timestamps range at which we want to retrieve the TWAB balances.\n     * @return `user` TWAB balances.\n     */\n    function getBalancesAt(address user, uint64[] calldata timestamps)\n        external\n        view\n        returns (uint256[] memory);\n\n    /**\n     * @notice Retrieves the average balance held by a user for a given time frame.\n     * @param user The user whose balance is checked.\n     * @param startTime The start time of the time frame.\n     * @param endTime The end time of the time frame.\n     * @return The average balance that the user held during the time frame.\n     */\n    function getAverageBalanceBetween(\n        address user,\n        uint64 startTime,\n        uint64 endTime\n    ) external view returns (uint256);\n\n    /**\n     * @notice Retrieves the average balances held by a user for a given time frame.\n     * @param user The user whose balance is checked.\n     * @param startTimes The start time of the time frame.\n     * @param endTimes The end time of the time frame.\n     * @return The average balance that the user held during the time frame.\n     */\n    function getAverageBalancesBetween(\n        address user,\n        uint64[] calldata startTimes,\n        uint64[] calldata endTimes\n    ) external view returns (uint256[] memory);\n\n    /**\n     * @notice Retrieves the total supply TWAB balance at the given timestamp.\n     * @param timestamp Timestamp at which we want to retrieve the total supply TWAB balance.\n     * @return The total supply TWAB balance at the given timestamp.\n     */\n    function getTotalSupplyAt(uint64 timestamp) external view returns (uint256);\n\n    /**\n     * @notice Retrieves the total supply TWAB balance between the given timestamps range.\n     * @param timestamps Timestamps range at which we want to retrieve the total supply TWAB balance.\n     * @return Total supply TWAB balances.\n     */\n    function getTotalSuppliesAt(uint64[] calldata timestamps)\n        external\n        view\n        returns (uint256[] memory);\n\n    /**\n     * @notice Retrieves the average total supply balance for a set of given time frames.\n     * @param startTimes Array of start times.\n     * @param endTimes Array of end times.\n     * @return The average total supplies held during the time frame.\n     */\n    function getAverageTotalSuppliesBetween(\n        uint64[] calldata startTimes,\n        uint64[] calldata endTimes\n    ) external view returns (uint256[] memory);\n}\n"
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IPrizePool.sol": {
				"content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity 0.8.6;\n\nimport \"../external/compound/ICompLike.sol\";\nimport \"../interfaces/ITicket.sol\";\n\ninterface IPrizePool {\n    /// @dev Event emitted when controlled token is added\n    event ControlledTokenAdded(ITicket indexed token);\n\n    event AwardCaptured(uint256 amount);\n\n    /// @dev Event emitted when assets are deposited\n    event Deposited(\n        address indexed operator,\n        address indexed to,\n        ITicket indexed token,\n        uint256 amount\n    );\n\n    /// @dev Event emitted when interest is awarded to a winner\n    event Awarded(address indexed winner, ITicket indexed token, uint256 amount);\n\n    /// @dev Event emitted when external ERC20s are awarded to a winner\n    event AwardedExternalERC20(address indexed winner, address indexed token, uint256 amount);\n\n    /// @dev Event emitted when external ERC20s are transferred out\n    event TransferredExternalERC20(address indexed to, address indexed token, uint256 amount);\n\n    /// @dev Event emitted when external ERC721s are awarded to a winner\n    event AwardedExternalERC721(address indexed winner, address indexed token, uint256[] tokenIds);\n\n    /// @dev Event emitted when assets are withdrawn\n    event Withdrawal(\n        address indexed operator,\n        address indexed from,\n        ITicket indexed token,\n        uint256 amount,\n        uint256 redeemed\n    );\n\n    /// @dev Event emitted when the Balance Cap is set\n    event BalanceCapSet(uint256 balanceCap);\n\n    /// @dev Event emitted when the Liquidity Cap is set\n    event LiquidityCapSet(uint256 liquidityCap);\n\n    /// @dev Event emitted when the Prize Strategy is set\n    event PrizeStrategySet(address indexed prizeStrategy);\n\n    /// @dev Event emitted when the Ticket is set\n    event TicketSet(ITicket indexed ticket);\n\n    /// @dev Emitted when there was an error thrown awarding an External ERC721\n    event ErrorAwardingExternalERC721(bytes error);\n\n    /// @notice Deposit assets into the Prize Pool in exchange for tokens\n    /// @param to The address receiving the newly minted tokens\n    /// @param amount The amount of assets to deposit\n    function depositTo(address to, uint256 amount) external;\n\n    /// @notice Deposit assets into the Prize Pool in exchange for tokens,\n    /// then sets the delegate on behalf of the caller.\n    /// @param to The address receiving the newly minted tokens\n    /// @param amount The amount of assets to deposit\n    /// @param delegate The address to delegate to for the caller\n    function depositToAndDelegate(address to, uint256 amount, address delegate) external;\n\n    /// @notice Withdraw assets from the Prize Pool instantly.\n    /// @param from The address to redeem tokens from.\n    /// @param amount The amount of tokens to redeem for assets.\n    /// @return The actual amount withdrawn\n    function withdrawFrom(address from, uint256 amount) external returns (uint256);\n\n    /// @notice Called by the prize strategy to award prizes.\n    /// @dev The amount awarded must be less than the awardBalance()\n    /// @param to The address of the winner that receives the award\n    /// @param amount The amount of assets to be awarded\n    function award(address to, uint256 amount) external;\n\n    /// @notice Returns the balance that is available to award.\n    /// @dev captureAwardBalance() should be called first\n    /// @return The total amount of assets to be awarded for the current prize\n    function awardBalance() external view returns (uint256);\n\n    /// @notice Captures any available interest as award balance.\n    /// @dev This function also captures the reserve fees.\n    /// @return The total amount of assets to be awarded for the current prize\n    function captureAwardBalance() external returns (uint256);\n\n    /// @dev Checks with the Prize Pool if a specific token type may be awarded as an external prize\n    /// @param externalToken The address of the token to check\n    /// @return True if the token may be awarded, false otherwise\n    function canAwardExternal(address externalToken) external view returns (bool);\n\n    // @dev Returns the total underlying balance of all assets. This includes both principal and interest.\n    /// @return The underlying balance of assets\n    function balance() external returns (uint256);\n\n    /**\n     * @notice Read internal Ticket accounted balance.\n     * @return uint256 accountBalance\n     */\n    function getAccountedBalance() external view returns (uint256);\n\n    /**\n     * @notice Read internal balanceCap variable\n     */\n    function getBalanceCap() external view returns (uint256);\n\n    /**\n     * @notice Read internal liquidityCap variable\n     */\n    function getLiquidityCap() external view returns (uint256);\n\n    /**\n     * @notice Read ticket variable\n     */\n    function getTicket() external view returns (ITicket);\n\n    /**\n     * @notice Read token variable\n     */\n    function getToken() external view returns (address);\n\n    /**\n     * @notice Read prizeStrategy variable\n     */\n    function getPrizeStrategy() external view returns (address);\n\n    /// @dev Checks if a specific token is controlled by the Prize Pool\n    /// @param controlledToken The address of the token to check\n    /// @return True if the token is a controlled token, false otherwise\n    function isControlled(ITicket controlledToken) external view returns (bool);\n\n    /// @notice Called by the Prize-Strategy to transfer out external ERC20 tokens\n    /// @dev Used to transfer out tokens held by the Prize Pool.  Could be liquidated, or anything.\n    /// @param to The address of the winner that receives the award\n    /// @param externalToken The address of the external asset token being awarded\n    /// @param amount The amount of external assets to be awarded\n    function transferExternalERC20(\n        address to,\n        address externalToken,\n        uint256 amount\n    ) external;\n\n    /// @notice Called by the Prize-Strategy to award external ERC20 prizes\n    /// @dev Used to award any arbitrary tokens held by the Prize Pool\n    /// @param to The address of the winner that receives the award\n    /// @param amount The amount of external assets to be awarded\n    /// @param externalToken The address of the external asset token being awarded\n    function awardExternalERC20(\n        address to,\n        address externalToken,\n        uint256 amount\n    ) external;\n\n    /// @notice Called by the prize strategy to award external ERC721 prizes\n    /// @dev Used to award any arbitrary NFTs held by the Prize Pool\n    /// @param to The address of the winner that receives the award\n    /// @param externalToken The address of the external NFT token being awarded\n    /// @param tokenIds An array of NFT Token IDs to be transferred\n    function awardExternalERC721(\n        address to,\n        address externalToken,\n        uint256[] calldata tokenIds\n    ) external;\n\n    /// @notice Allows the owner to set a balance cap per `token` for the pool.\n    /// @dev If a user wins, his balance can go over the cap. He will be able to withdraw the excess but not deposit.\n    /// @dev Needs to be called after deploying a prize pool to be able to deposit into it.\n    /// @param balanceCap New balance cap.\n    /// @return True if new balance cap has been successfully set.\n    function setBalanceCap(uint256 balanceCap) external returns (bool);\n\n    /// @notice Allows the Governor to set a cap on the amount of liquidity that he pool can hold\n    /// @param liquidityCap The new liquidity cap for the prize pool\n    function setLiquidityCap(uint256 liquidityCap) external;\n\n    /// @notice Sets the prize strategy of the prize pool.  Only callable by the owner.\n    /// @param _prizeStrategy The new prize strategy.\n    function setPrizeStrategy(address _prizeStrategy) external;\n\n    /// @notice Set prize pool ticket.\n    /// @param ticket Address of the ticket to set.\n    /// @return True if ticket has been successfully set.\n    function setTicket(ITicket ticket) external returns (bool);\n\n    /// @notice Delegate the votes for a Compound COMP-like token held by the prize pool\n    /// @param compLike The COMP-like token held by the prize pool that should be delegated\n    /// @param to The address to delegate to\n    function compLikeDelegate(ICompLike compLike, address to) external;\n}\n"
			},
			"@openzeppelin/contracts/utils/Address.sol": {
				"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.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                /// @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}\n"
			},
			"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol": {
				"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-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 */\ninterface IERC20Permit {\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    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"
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IControlledToken.sol": {
				"content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity 0.8.6;\n\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n/** @title IControlledToken\n  * @author PoolTogether Inc Team\n  * @notice ERC20 Tokens with a controller for minting & burning.\n*/\ninterface IControlledToken is IERC20 {\n\n    /** \n        @notice Interface to the contract responsible for controlling mint/burn\n    */\n    function controller() external view returns (address);\n\n    /** \n      * @notice Allows the controller to mint tokens for a user account\n      * @dev May be overridden to provide more granular control over minting\n      * @param user Address of the receiver of the minted tokens\n      * @param amount Amount of tokens to mint\n    */\n    function controllerMint(address user, uint256 amount) external;\n\n    /** \n      * @notice Allows the controller to burn tokens from a user account\n      * @dev May be overridden to provide more granular control over burning\n      * @param user Address of the holder account to burn tokens from\n      * @param amount Amount of tokens to burn\n    */\n    function controllerBurn(address user, uint256 amount) external;\n\n    /** \n      * @notice Allows an operator via the controller to burn tokens on behalf of a user account\n      * @dev May be overridden to provide more granular control over operator-burning\n      * @param operator Address of the operator performing the burn action via the controller contract\n      * @param user Address of the holder account to burn tokens from\n      * @param amount Amount of tokens to burn\n    */\n    function controllerBurnFrom(\n        address operator,\n        address user,\n        uint256 amount\n    ) external;\n}\n"
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/TwabLib.sol": {
				"content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity 0.8.6;\n\nimport \"./ExtendedSafeCastLib.sol\";\nimport \"./OverflowSafeComparatorLib.sol\";\nimport \"./RingBufferLib.sol\";\nimport \"./ObservationLib.sol\";\n\n/**\n  * @title  PoolTogether V4 TwabLib (Library)\n  * @author PoolTogether Inc Team\n  * @dev    Time-Weighted Average Balance Library for ERC20 tokens.\n  * @notice This TwabLib adds on-chain historical lookups to a user(s) time-weighted average balance.\n            Each user is mapped to an Account struct containing the TWAB history (ring buffer) and\n            ring buffer parameters. Every token.transfer() creates a new TWAB checkpoint. The new TWAB\n            checkpoint is stored in the circular ring buffer, as either a new checkpoint or rewriting\n            a previous checkpoint with new parameters. The TwabLib (using existing blocktimes of 1block/15sec)\n            guarantees minimum 7.4 years of search history.\n */\nlibrary TwabLib {\n    using OverflowSafeComparatorLib for uint32;\n    using ExtendedSafeCastLib for uint256;\n\n    /**\n      * @notice Sets max ring buffer length in the Account.twabs Observation list.\n                As users transfer/mint/burn tickets new Observation checkpoints are\n                recorded. The current max cardinality guarantees a seven year minimum,\n                of accurate historical lookups with current estimates of 1 new block\n                every 15 seconds - assuming each block contains a transfer to trigger an\n                observation write to storage.\n      * @dev    The user Account.AccountDetails.cardinality parameter can NOT exceed\n                the max cardinality variable. Preventing \"corrupted\" ring buffer lookup\n                pointers and new observation checkpoints.\n\n                The MAX_CARDINALITY in fact guarantees at least 7.4 years of records:\n                If 14 = block time in seconds\n                (2**24) * 14 = 234881024 seconds of history\n                234881024 / (365 * 24 * 60 * 60) ~= 7.44 years\n    */\n    uint24 public constant MAX_CARDINALITY = 16777215; // 2**24\n\n    /** @notice Struct ring buffer parameters for single user Account\n      * @param balance       Current balance for an Account\n      * @param nextTwabIndex Next uninitialized or updatable ring buffer checkpoint storage slot\n      * @param cardinality   Current total \"initialized\" ring buffer checkpoints for single user AccountDetails.\n                             Used to set initial boundary conditions for an efficient binary search.\n    */\n    struct AccountDetails {\n        uint208 balance;\n        uint24 nextTwabIndex;\n        uint24 cardinality;\n    }\n\n    /// @notice Combines account details with their twab history\n    /// @param details The account details\n    /// @param twabs The history of twabs for this account\n    struct Account {\n        AccountDetails details;\n        ObservationLib.Observation[MAX_CARDINALITY] twabs;\n    }\n\n    /// @notice Increases an account's balance and records a new twab.\n    /// @param _account The account whose balance will be increased\n    /// @param _amount The amount to increase the balance by\n    /// @param _currentTime The current time\n    /// @return accountDetails The new AccountDetails\n    /// @return twab The user's latest TWAB\n    /// @return isNew Whether the TWAB is new\n    function increaseBalance(\n        Account storage _account,\n        uint208 _amount,\n        uint32 _currentTime\n    )\n        internal\n        returns (\n            AccountDetails memory accountDetails,\n            ObservationLib.Observation memory twab,\n            bool isNew\n        )\n    {\n        AccountDetails memory _accountDetails = _account.details;\n        (accountDetails, twab, isNew) = _nextTwab(_account.twabs, _accountDetails, _currentTime);\n        accountDetails.balance = _accountDetails.balance + _amount;\n    }\n\n    /** @notice Calculates the next TWAB checkpoint for an account with a decreasing balance.\n     * @dev    With Account struct and amount decreasing calculates the next TWAB observable checkpoint.\n     * @param _account        Account whose balance will be decreased\n     * @param _amount         Amount to decrease the balance by\n     * @param _revertMessage  Revert message for insufficient balance\n     * @return accountDetails Updated Account.details struct\n     * @return twab           TWAB observation (with decreasing average)\n     * @return isNew          Whether TWAB is new or calling twice in the same block\n     */\n    function decreaseBalance(\n        Account storage _account,\n        uint208 _amount,\n        string memory _revertMessage,\n        uint32 _currentTime\n    )\n        internal\n        returns (\n            AccountDetails memory accountDetails,\n            ObservationLib.Observation memory twab,\n            bool isNew\n        )\n    {\n        AccountDetails memory _accountDetails = _account.details;\n\n        require(_accountDetails.balance >= _amount, _revertMessage);\n\n        (accountDetails, twab, isNew) = _nextTwab(_account.twabs, _accountDetails, _currentTime);\n        unchecked {\n            accountDetails.balance -= _amount;\n        }\n    }\n\n    /** @notice Calculates the average balance held by a user for a given time frame.\n      * @dev    Finds the average balance between start and end timestamp epochs.\n                Validates the supplied end time is within the range of elapsed time i.e. less then timestamp of now.\n      * @param _twabs          Individual user Observation recorded checkpoints passed as storage pointer\n      * @param _accountDetails User AccountDetails struct loaded in memory\n      * @param _startTime      Start of timestamp range as an epoch\n      * @param _endTime        End of timestamp range as an epoch\n      * @param _currentTime    Block.timestamp\n      * @return Average balance of user held between epoch timestamps start and end\n    */\n    function getAverageBalanceBetween(\n        ObservationLib.Observation[MAX_CARDINALITY] storage _twabs,\n        AccountDetails memory _accountDetails,\n        uint32 _startTime,\n        uint32 _endTime,\n        uint32 _currentTime\n    ) internal view returns (uint256) {\n        uint32 endTime = _endTime > _currentTime ? _currentTime : _endTime;\n\n        return\n            _getAverageBalanceBetween(_twabs, _accountDetails, _startTime, endTime, _currentTime);\n    }\n\n    /// @notice Retrieves the oldest TWAB\n    /// @param _twabs The storage array of twabs\n    /// @param _accountDetails The TWAB account details\n    /// @return index The index of the oldest TWAB in the twabs array\n    /// @return twab The oldest TWAB\n    function oldestTwab(\n        ObservationLib.Observation[MAX_CARDINALITY] storage _twabs,\n        AccountDetails memory _accountDetails\n    ) internal view returns (uint24 index, ObservationLib.Observation memory twab) {\n        index = _accountDetails.nextTwabIndex;\n        twab = _twabs[index];\n\n        // If the TWAB is not initialized we go to the beginning of the TWAB circular buffer at index 0\n        if (twab.timestamp == 0) {\n            index = 0;\n            twab = _twabs[0];\n        }\n    }\n\n    /// @notice Retrieves the newest TWAB\n    /// @param _twabs The storage array of twabs\n    /// @param _accountDetails The TWAB account details\n    /// @return index The index of the newest TWAB in the twabs array\n    /// @return twab The newest TWAB\n    function newestTwab(\n        ObservationLib.Observation[MAX_CARDINALITY] storage _twabs,\n        AccountDetails memory _accountDetails\n    ) internal view returns (uint24 index, ObservationLib.Observation memory twab) {\n        index = uint24(RingBufferLib.newestIndex(_accountDetails.nextTwabIndex, MAX_CARDINALITY));\n        twab = _twabs[index];\n    }\n\n    /// @notice Retrieves amount at `_targetTime` timestamp\n    /// @param _twabs List of TWABs to search through.\n    /// @param _accountDetails Accounts details\n    /// @param _targetTime Timestamp at which the reserved TWAB should be for.\n    /// @return uint256 TWAB amount at `_targetTime`.\n    function getBalanceAt(\n        ObservationLib.Observation[MAX_CARDINALITY] storage _twabs,\n        AccountDetails memory _accountDetails,\n        uint32 _targetTime,\n        uint32 _currentTime\n    ) internal view returns (uint256) {\n        uint32 timeToTarget = _targetTime > _currentTime ? _currentTime : _targetTime;\n        return _getBalanceAt(_twabs, _accountDetails, timeToTarget, _currentTime);\n    }\n\n    /// @notice Calculates the average balance held by a user for a given time frame.\n    /// @param _startTime The start time of the time frame.\n    /// @param _endTime The end time of the time frame.\n    /// @return The average balance that the user held during the time frame.\n    function _getAverageBalanceBetween(\n        ObservationLib.Observation[MAX_CARDINALITY] storage _twabs,\n        AccountDetails memory _accountDetails,\n        uint32 _startTime,\n        uint32 _endTime,\n        uint32 _currentTime\n    ) private view returns (uint256) {\n        (uint24 oldestTwabIndex, ObservationLib.Observation memory oldTwab) = oldestTwab(\n            _twabs,\n            _accountDetails\n        );\n\n        (uint24 newestTwabIndex, ObservationLib.Observation memory newTwab) = newestTwab(\n            _twabs,\n            _accountDetails\n        );\n\n        ObservationLib.Observation memory startTwab = _calculateTwab(\n            _twabs,\n            _accountDetails,\n            newTwab,\n            oldTwab,\n            newestTwabIndex,\n            oldestTwabIndex,\n            _startTime,\n            _currentTime\n        );\n\n        ObservationLib.Observation memory endTwab = _calculateTwab(\n            _twabs,\n            _accountDetails,\n            newTwab,\n            oldTwab,\n            newestTwabIndex,\n            oldestTwabIndex,\n            _endTime,\n            _currentTime\n        );\n\n        // Difference in amount / time\n        return (endTwab.amount - startTwab.amount) / OverflowSafeComparatorLib.checkedSub(endTwab.timestamp, startTwab.timestamp, _currentTime);\n    }\n\n    /** @notice Searches TWAB history and calculate the difference between amount(s)/timestamp(s) to return average balance\n                between the Observations closes to the supplied targetTime.\n      * @param _twabs          Individual user Observation recorded checkpoints passed as storage pointer\n      * @param _accountDetails User AccountDetails struct loaded in memory\n      * @param _targetTime     Target timestamp to filter Observations in the ring buffer binary search\n      * @param _currentTime    Block.timestamp\n      * @return uint256 Time-weighted average amount between two closest observations.\n    */\n    function _getBalanceAt(\n        ObservationLib.Observation[MAX_CARDINALITY] storage _twabs,\n        AccountDetails memory _accountDetails,\n        uint32 _targetTime,\n        uint32 _currentTime\n    ) private view returns (uint256) {\n        uint24 newestTwabIndex;\n        ObservationLib.Observation memory afterOrAt;\n        ObservationLib.Observation memory beforeOrAt;\n        (newestTwabIndex, beforeOrAt) = newestTwab(_twabs, _accountDetails);\n\n        // If `_targetTime` is chronologically after the newest TWAB, we can simply return the current balance\n        if (beforeOrAt.timestamp.lte(_targetTime, _currentTime)) {\n            return _accountDetails.balance;\n        }\n\n        uint24 oldestTwabIndex;\n        // Now, set before to the oldest TWAB\n        (oldestTwabIndex, beforeOrAt) = oldestTwab(_twabs, _accountDetails);\n\n        // If `_targetTime` is chronologically before the oldest TWAB, we can early return\n        if (_targetTime.lt(beforeOrAt.timestamp, _currentTime)) {\n            return 0;\n        }\n\n        // Otherwise, we perform the `binarySearch`\n        (beforeOrAt, afterOrAt) = ObservationLib.binarySearch(\n            _twabs,\n            newestTwabIndex,\n            oldestTwabIndex,\n            _targetTime,\n            _accountDetails.cardinality,\n            _currentTime\n        );\n\n        // Sum the difference in amounts and divide by the difference in timestamps.\n        // The time-weighted average balance uses time measured between two epoch timestamps as\n        // a constaint on the measurement when calculating the time weighted average balance.\n        return\n            (afterOrAt.amount - beforeOrAt.amount) / OverflowSafeComparatorLib.checkedSub(afterOrAt.timestamp, beforeOrAt.timestamp, _currentTime);\n    }\n\n    /** @notice Calculates a user TWAB for a target timestamp using the historical TWAB records.\n                The balance is linearly interpolated: amount differences / timestamp differences\n                using the simple (after.amount - before.amount / end.timestamp - start.timestamp) formula.\n    /** @dev    Binary search in _calculateTwab fails when searching out of bounds. Thus, before\n                searching we exclude target timestamps out of range of newest/oldest TWAB(s).\n                IF a search is before or after the range we \"extrapolate\" a Observation from the expected state.\n      * @param _twabs           Individual user Observation recorded checkpoints passed as storage pointer\n      * @param _accountDetails  User AccountDetails struct loaded in memory\n      * @param _newestTwab      Newest TWAB in history (end of ring buffer)\n      * @param _oldestTwab      Olderst TWAB in history (end of ring buffer)\n      * @param _newestTwabIndex Pointer in ring buffer to newest TWAB\n      * @param _oldestTwabIndex Pointer in ring buffer to oldest TWAB\n      * @param _targetTimestamp Epoch timestamp to calculate for time (T) in the TWAB\n      * @param _time            Block.timestamp\n      * @return accountDetails Updated Account.details struct\n    */\n    function _calculateTwab(\n        ObservationLib.Observation[MAX_CARDINALITY] storage _twabs,\n        AccountDetails memory _accountDetails,\n        ObservationLib.Observation memory _newestTwab,\n        ObservationLib.Observation memory _oldestTwab,\n        uint24 _newestTwabIndex,\n        uint24 _oldestTwabIndex,\n        uint32 _targetTimestamp,\n        uint32 _time\n    ) private view returns (ObservationLib.Observation memory) {\n        // If `_targetTimestamp` is chronologically after the newest TWAB, we extrapolate a new one\n        if (_newestTwab.timestamp.lt(_targetTimestamp, _time)) {\n            return _computeNextTwab(_newestTwab, _accountDetails.balance, _targetTimestamp);\n        }\n\n        if (_newestTwab.timestamp == _targetTimestamp) {\n            return _newestTwab;\n        }\n\n        if (_oldestTwab.timestamp == _targetTimestamp) {\n            return _oldestTwab;\n        }\n\n        // If `_targetTimestamp` is chronologically before the oldest TWAB, we create a zero twab\n        if (_targetTimestamp.lt(_oldestTwab.timestamp, _time)) {\n            return ObservationLib.Observation({ amount: 0, timestamp: _targetTimestamp });\n        }\n\n        // Otherwise, both timestamps must be surrounded by twabs.\n        (\n            ObservationLib.Observation memory beforeOrAtStart,\n            ObservationLib.Observation memory afterOrAtStart\n        ) = ObservationLib.binarySearch(\n                _twabs,\n                _newestTwabIndex,\n                _oldestTwabIndex,\n                _targetTimestamp,\n                _accountDetails.cardinality,\n                _time\n            );\n\n        uint224 heldBalance = (afterOrAtStart.amount - beforeOrAtStart.amount) /\n            OverflowSafeComparatorLib.checkedSub(afterOrAtStart.timestamp, beforeOrAtStart.timestamp, _time);\n\n        return _computeNextTwab(beforeOrAtStart, heldBalance, _targetTimestamp);\n    }\n\n    /**\n     * @notice Calculates the next TWAB using the newestTwab and updated balance.\n     * @dev    Storage of the TWAB obersation is managed by the calling function and not _computeNextTwab.\n     * @param _currentTwab    Newest Observation in the Account.twabs list\n     * @param _currentBalance User balance at time of most recent (newest) checkpoint write\n     * @param _time           Current block.timestamp\n     * @return TWAB Observation\n     */\n    function _computeNextTwab(\n        ObservationLib.Observation memory _currentTwab,\n        uint224 _currentBalance,\n        uint32 _time\n    ) private pure returns (ObservationLib.Observation memory) {\n        // New twab amount = last twab amount (or zero) + (current amount * elapsed seconds)\n        return\n            ObservationLib.Observation({\n                amount: _currentTwab.amount +\n                    _currentBalance *\n                    (_time.checkedSub(_currentTwab.timestamp, _time)),\n                timestamp: _time\n            });\n    }\n\n    /// @notice Sets a new TWAB Observation at the next available index and returns the new account details.\n    /// @dev Note that if _currentTime is before the last observation timestamp, it appears as an overflow\n    /// @param _twabs The twabs array to insert into\n    /// @param _accountDetails The current account details\n    /// @param _currentTime The current time\n    /// @return accountDetails The new account details\n    /// @return twab The newest twab (may or may not be brand-new)\n    /// @return isNew Whether the newest twab was created by this call\n    function _nextTwab(\n        ObservationLib.Observation[MAX_CARDINALITY] storage _twabs,\n        AccountDetails memory _accountDetails,\n        uint32 _currentTime\n    )\n        private\n        returns (\n            AccountDetails memory accountDetails,\n            ObservationLib.Observation memory twab,\n            bool isNew\n        )\n    {\n        (, ObservationLib.Observation memory _newestTwab) = newestTwab(_twabs, _accountDetails);\n\n        // if we're in the same block, return\n        if (_newestTwab.timestamp == _currentTime) {\n            return (_accountDetails, _newestTwab, false);\n        }\n\n        ObservationLib.Observation memory newTwab = _computeNextTwab(\n            _newestTwab,\n            _accountDetails.balance,\n            _currentTime\n        );\n\n        _twabs[_accountDetails.nextTwabIndex] = newTwab;\n\n        AccountDetails memory nextAccountDetails = push(_accountDetails);\n\n        return (nextAccountDetails, newTwab, true);\n    }\n\n    /// @notice \"Pushes\" a new element on the AccountDetails ring buffer, and returns the new AccountDetails\n    /// @param _accountDetails The account details from which to pull the cardinality and next index\n    /// @return The new AccountDetails\n    function push(AccountDetails memory _accountDetails)\n        internal\n        pure\n        returns (AccountDetails memory)\n    {\n        _accountDetails.nextTwabIndex = uint24(\n            RingBufferLib.nextIndex(_accountDetails.nextTwabIndex, MAX_CARDINALITY)\n        );\n\n        // Prevent the Account specific cardinality from exceeding the MAX_CARDINALITY.\n        // The ring buffer length is limited by MAX_CARDINALITY. IF the account.cardinality\n        // exceeds the max cardinality, new observations would be incorrectly set or the\n        // observation would be out of \"bounds\" of the ring buffer. Once reached the\n        // AccountDetails.cardinality will continue to be equal to max cardinality.\n        if (_accountDetails.cardinality < MAX_CARDINALITY) {\n            _accountDetails.cardinality += 1;\n        }\n\n        return _accountDetails;\n    }\n}\n"
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/external/compound/ICompLike.sol": {
				"content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity 0.8.6;\n\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\ninterface ICompLike is IERC20 {\n    function getCurrentVotes(address account) external view returns (uint96);\n\n    function delegate(address delegate) external;\n}\n"
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/ObservationLib.sol": {
				"content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity 0.8.6;\n\nimport \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\n\nimport \"./OverflowSafeComparatorLib.sol\";\nimport \"./RingBufferLib.sol\";\n\n/**\n* @title Observation Library\n* @notice This library allows one to store an array of timestamped values and efficiently binary search them.\n* @dev Largely pulled from Uniswap V3 Oracle.sol: https://github.com/Uniswap/v3-core/blob/c05a0e2c8c08c460fb4d05cfdda30b3ad8deeaac/contracts/libraries/Oracle.sol\n* @author PoolTogether Inc.\n*/\nlibrary ObservationLib {\n    using OverflowSafeComparatorLib for uint32;\n    using SafeCast for uint256;\n\n    /// @notice The maximum number of observations\n    uint24 public constant MAX_CARDINALITY = 16777215; // 2**24\n\n    /**\n    * @notice Observation, which includes an amount and timestamp.\n    * @param amount `amount` at `timestamp`.\n    * @param timestamp Recorded `timestamp`.\n    */\n    struct Observation {\n        uint224 amount;\n        uint32 timestamp;\n    }\n\n    /**\n    * @notice Fetches Observations `beforeOrAt` and `atOrAfter` a `_target`, eg: where [`beforeOrAt`, `atOrAfter`] is satisfied.\n    * The result may be the same Observation, or adjacent Observations.\n    * @dev The answer must be contained in the array used when the target is located within the stored Observation.\n    * boundaries: older than the most recent Observation and younger, or the same age as, the oldest Observation.\n    * @dev  If `_newestObservationIndex` is less than `_oldestObservationIndex`, it means that we've wrapped around the circular buffer.\n    *       So the most recent observation will be at `_oldestObservationIndex + _cardinality - 1`, at the beginning of the circular buffer.\n    * @param _observations List of Observations to search through.\n    * @param _newestObservationIndex Index of the newest Observation. Right side of the circular buffer.\n    * @param _oldestObservationIndex Index of the oldest Observation. Left side of the circular buffer.\n    * @param _target Timestamp at which we are searching the Observation.\n    * @param _cardinality Cardinality of the circular buffer we are searching through.\n    * @param _time Timestamp at which we perform the binary search.\n    * @return beforeOrAt Observation recorded before, or at, the target.\n    * @return atOrAfter Observation recorded at, or after, the target.\n    */\n    function binarySearch(\n        Observation[MAX_CARDINALITY] storage _observations,\n        uint24 _newestObservationIndex,\n        uint24 _oldestObservationIndex,\n        uint32 _target,\n        uint24 _cardinality,\n        uint32 _time\n    ) internal view returns (Observation memory beforeOrAt, Observation memory atOrAfter) {\n        uint256 leftSide = _oldestObservationIndex;\n        uint256 rightSide = _newestObservationIndex < leftSide\n            ? leftSide + _cardinality - 1\n            : _newestObservationIndex;\n        uint256 currentIndex;\n\n        while (true) {\n            // We start our search in the middle of the `leftSide` and `rightSide`.\n            // After each iteration, we narrow down the search to the left or the right side while still starting our search in the middle.\n            currentIndex = (leftSide + rightSide) / 2;\n\n            beforeOrAt = _observations[uint24(RingBufferLib.wrap(currentIndex, _cardinality))];\n            uint32 beforeOrAtTimestamp = beforeOrAt.timestamp;\n\n            // We've landed on an uninitialized timestamp, keep searching higher (more recently).\n            if (beforeOrAtTimestamp == 0) {\n                leftSide = currentIndex + 1;\n                continue;\n            }\n\n            atOrAfter = _observations[uint24(RingBufferLib.nextIndex(currentIndex, _cardinality))];\n\n            bool targetAtOrAfter = beforeOrAtTimestamp.lte(_target, _time);\n\n            // Check if we've found the corresponding Observation.\n            if (targetAtOrAfter && _target.lte(atOrAfter.timestamp, _time)) {\n                break;\n            }\n\n            // If `beforeOrAtTimestamp` is greater than `_target`, then we keep searching lower. To the left of the current index.\n            if (!targetAtOrAfter) {\n                rightSide = currentIndex - 1;\n            } else {\n                // Otherwise, we keep searching higher. To the left of the current index.\n                leftSide = currentIndex + 1;\n            }\n        }\n    }\n}\n"
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/RingBufferLib.sol": {
				"content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity 0.8.6;\n\nlibrary RingBufferLib {\n    /**\n    * @notice Returns wrapped TWAB index.\n    * @dev  In order to navigate the TWAB circular buffer, we need to use the modulo operator.\n    * @dev  For example, if `_index` is equal to 32 and the TWAB circular buffer is of `_cardinality` 32,\n    *       it will return 0 and will point to the first element of the array.\n    * @param _index Index used to navigate through the TWAB circular buffer.\n    * @param _cardinality TWAB buffer cardinality.\n    * @return TWAB index.\n    */\n    function wrap(uint256 _index, uint256 _cardinality) internal pure returns (uint256) {\n        return _index % _cardinality;\n    }\n\n    /**\n    * @notice Computes the negative offset from the given index, wrapped by the cardinality.\n    * @dev  We add `_cardinality` to `_index` to be able to offset even if `_amount` is superior to `_cardinality`.\n    * @param _index The index from which to offset\n    * @param _amount The number of indices to offset.  This is subtracted from the given index.\n    * @param _cardinality The number of elements in the ring buffer\n    * @return Offsetted index.\n     */\n    function offset(\n        uint256 _index,\n        uint256 _amount,\n        uint256 _cardinality\n    ) internal pure returns (uint256) {\n        return wrap(_index + _cardinality - _amount, _cardinality);\n    }\n\n    /// @notice Returns the index of the last recorded TWAB\n    /// @param _nextIndex The next available twab index.  This will be recorded to next.\n    /// @param _cardinality The cardinality of the TWAB history.\n    /// @return The index of the last recorded TWAB\n    function newestIndex(uint256 _nextIndex, uint256 _cardinality)\n        internal\n        pure\n        returns (uint256)\n    {\n        if (_cardinality == 0) {\n            return 0;\n        }\n\n        return wrap(_nextIndex + _cardinality - 1, _cardinality);\n    }\n\n    /// @notice Computes the ring buffer index that follows the given one, wrapped by cardinality\n    /// @param _index The index to increment\n    /// @param _cardinality The number of elements in the Ring Buffer\n    /// @return The next index relative to the given index.  Will wrap around to 0 if the next index == cardinality\n    function nextIndex(uint256 _index, uint256 _cardinality)\n        internal\n        pure\n        returns (uint256)\n    {\n        return wrap(_index + 1, _cardinality);\n    }\n}\n"
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/OverflowSafeComparatorLib.sol": {
				"content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity 0.8.6;\n\n/// @title OverflowSafeComparatorLib library to share comparator functions between contracts\n/// @dev Code taken from Uniswap V3 Oracle.sol: https://github.com/Uniswap/v3-core/blob/3e88af408132fc957e3e406f65a0ce2b1ca06c3d/contracts/libraries/Oracle.sol\n/// @author PoolTogether Inc.\nlibrary OverflowSafeComparatorLib {\n    /// @notice 32-bit timestamps comparator.\n    /// @dev safe for 0 or 1 overflows, `_a` and `_b` must be chronologically before or equal to time.\n    /// @param _a A comparison timestamp from which to determine the relative position of `_timestamp`.\n    /// @param _b Timestamp to compare against `_a`.\n    /// @param _timestamp A timestamp truncated to 32 bits.\n    /// @return bool Whether `_a` is chronologically < `_b`.\n    function lt(\n        uint32 _a,\n        uint32 _b,\n        uint32 _timestamp\n    ) internal pure returns (bool) {\n        // No need to adjust if there hasn't been an overflow\n        if (_a <= _timestamp && _b <= _timestamp) return _a < _b;\n\n        uint256 aAdjusted = _a > _timestamp ? _a : _a + 2**32;\n        uint256 bAdjusted = _b > _timestamp ? _b : _b + 2**32;\n\n        return aAdjusted < bAdjusted;\n    }\n\n    /// @notice 32-bit timestamps comparator.\n    /// @dev safe for 0 or 1 overflows, `_a` and `_b` must be chronologically before or equal to time.\n    /// @param _a A comparison timestamp from which to determine the relative position of `_timestamp`.\n    /// @param _b Timestamp to compare against `_a`.\n    /// @param _timestamp A timestamp truncated to 32 bits.\n    /// @return bool Whether `_a` is chronologically <= `_b`.\n    function lte(\n        uint32 _a,\n        uint32 _b,\n        uint32 _timestamp\n    ) internal pure returns (bool) {\n\n        // No need to adjust if there hasn't been an overflow\n        if (_a <= _timestamp && _b <= _timestamp) return _a <= _b;\n\n        uint256 aAdjusted = _a > _timestamp ? _a : _a + 2**32;\n        uint256 bAdjusted = _b > _timestamp ? _b : _b + 2**32;\n\n        return aAdjusted <= bAdjusted;\n    }\n\n    /// @notice 32-bit timestamp subtractor\n    /// @dev safe for 0 or 1 overflows, where `_a` and `_b` must be chronologically before or equal to time\n    /// @param _a The subtraction left operand\n    /// @param _b The subtraction right operand\n    /// @param _timestamp The current time.  Expected to be chronologically after both.\n    /// @return The difference between a and b, adjusted for overflow\n    function checkedSub(\n        uint32 _a,\n        uint32 _b,\n        uint32 _timestamp\n    ) internal pure returns (uint32) {\n        // No need to adjust if there hasn't been an overflow\n\n        if (_a <= _timestamp && _b <= _timestamp) return _a - _b;\n\n        uint256 aAdjusted = _a > _timestamp ? _a : _a + 2**32;\n        uint256 bAdjusted = _b > _timestamp ? _b : _b + 2**32;\n\n        return uint32(aAdjusted - bAdjusted);\n    }\n}\n"
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/ExtendedSafeCastLib.sol": {
				"content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity 0.8.6;\n\n/**\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\n * checks.\n *\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n * easily result in undesired exploitation or bugs, since developers usually\n * assume that overflows raise errors. `SafeCast` restores this intuition by\n * reverting the transaction when such an operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n *\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\n * all math on `uint256` and `int256` and then downcasting.\n */\nlibrary ExtendedSafeCastLib {\n\n    /**\n     * @dev Returns the downcasted uint104 from uint256, reverting on\n     * overflow (when the input is greater than largest uint104).\n     *\n     * Counterpart to Solidity's `uint104` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 104 bits\n     */\n    function toUint104(uint256 _value) internal pure returns (uint104) {\n        require(_value <= type(uint104).max, \"SafeCast: value doesn't fit in 104 bits\");\n        return uint104(_value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint208 from uint256, reverting on\n     * overflow (when the input is greater than largest uint208).\n     *\n     * Counterpart to Solidity's `uint208` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 208 bits\n     */\n    function toUint208(uint256 _value) internal pure returns (uint208) {\n        require(_value <= type(uint208).max, \"SafeCast: value doesn't fit in 208 bits\");\n        return uint208(_value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint224 from uint256, reverting on\n     * overflow (when the input is greater than largest uint224).\n     *\n     * Counterpart to Solidity's `uint224` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 224 bits\n     */\n    function toUint224(uint256 _value) internal pure returns (uint224) {\n        require(_value <= type(uint224).max, \"SafeCast: value doesn't fit in 224 bits\");\n        return uint224(_value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint192 from uint256, reverting on\n     * overflow (when the input is greater than largest uint192).\n     *\n     * Counterpart to Solidity's `uint192` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 224 bits\n     */\n    function toUint192(uint256 value) internal pure returns (uint192) {\n        require(value <= type(uint192).max, \"SafeCast: value doesn't fit in 192 bits\");\n        return uint192(value);\n    }\n\n}\n"
			},
			"@openzeppelin/contracts/utils/math/SafeCast.sol": {
				"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/math/SafeCast.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\n * checks.\n *\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n * easily result in undesired exploitation or bugs, since developers usually\n * assume that overflows raise errors. `SafeCast` restores this intuition by\n * reverting the transaction when such an operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n *\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\n * all math on `uint256` and `int256` and then downcasting.\n */\nlibrary SafeCast {\n    /**\n     * @dev Returns the downcasted uint248 from uint256, reverting on\n     * overflow (when the input is greater than largest uint248).\n     *\n     * Counterpart to Solidity's `uint248` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 248 bits\n     *\n     * _Available since v4.7._\n     */\n    function toUint248(uint256 value) internal pure returns (uint248) {\n        require(value <= type(uint248).max, \"SafeCast: value doesn't fit in 248 bits\");\n        return uint248(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint240 from uint256, reverting on\n     * overflow (when the input is greater than largest uint240).\n     *\n     * Counterpart to Solidity's `uint240` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 240 bits\n     *\n     * _Available since v4.7._\n     */\n    function toUint240(uint256 value) internal pure returns (uint240) {\n        require(value <= type(uint240).max, \"SafeCast: value doesn't fit in 240 bits\");\n        return uint240(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint232 from uint256, reverting on\n     * overflow (when the input is greater than largest uint232).\n     *\n     * Counterpart to Solidity's `uint232` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 232 bits\n     *\n     * _Available since v4.7._\n     */\n    function toUint232(uint256 value) internal pure returns (uint232) {\n        require(value <= type(uint232).max, \"SafeCast: value doesn't fit in 232 bits\");\n        return uint232(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint224 from uint256, reverting on\n     * overflow (when the input is greater than largest uint224).\n     *\n     * Counterpart to Solidity's `uint224` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 224 bits\n     *\n     * _Available since v4.2._\n     */\n    function toUint224(uint256 value) internal pure returns (uint224) {\n        require(value <= type(uint224).max, \"SafeCast: value doesn't fit in 224 bits\");\n        return uint224(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint216 from uint256, reverting on\n     * overflow (when the input is greater than largest uint216).\n     *\n     * Counterpart to Solidity's `uint216` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 216 bits\n     *\n     * _Available since v4.7._\n     */\n    function toUint216(uint256 value) internal pure returns (uint216) {\n        require(value <= type(uint216).max, \"SafeCast: value doesn't fit in 216 bits\");\n        return uint216(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint208 from uint256, reverting on\n     * overflow (when the input is greater than largest uint208).\n     *\n     * Counterpart to Solidity's `uint208` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 208 bits\n     *\n     * _Available since v4.7._\n     */\n    function toUint208(uint256 value) internal pure returns (uint208) {\n        require(value <= type(uint208).max, \"SafeCast: value doesn't fit in 208 bits\");\n        return uint208(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint200 from uint256, reverting on\n     * overflow (when the input is greater than largest uint200).\n     *\n     * Counterpart to Solidity's `uint200` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 200 bits\n     *\n     * _Available since v4.7._\n     */\n    function toUint200(uint256 value) internal pure returns (uint200) {\n        require(value <= type(uint200).max, \"SafeCast: value doesn't fit in 200 bits\");\n        return uint200(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint192 from uint256, reverting on\n     * overflow (when the input is greater than largest uint192).\n     *\n     * Counterpart to Solidity's `uint192` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 192 bits\n     *\n     * _Available since v4.7._\n     */\n    function toUint192(uint256 value) internal pure returns (uint192) {\n        require(value <= type(uint192).max, \"SafeCast: value doesn't fit in 192 bits\");\n        return uint192(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint184 from uint256, reverting on\n     * overflow (when the input is greater than largest uint184).\n     *\n     * Counterpart to Solidity's `uint184` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 184 bits\n     *\n     * _Available since v4.7._\n     */\n    function toUint184(uint256 value) internal pure returns (uint184) {\n        require(value <= type(uint184).max, \"SafeCast: value doesn't fit in 184 bits\");\n        return uint184(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint176 from uint256, reverting on\n     * overflow (when the input is greater than largest uint176).\n     *\n     * Counterpart to Solidity's `uint176` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 176 bits\n     *\n     * _Available since v4.7._\n     */\n    function toUint176(uint256 value) internal pure returns (uint176) {\n        require(value <= type(uint176).max, \"SafeCast: value doesn't fit in 176 bits\");\n        return uint176(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint168 from uint256, reverting on\n     * overflow (when the input is greater than largest uint168).\n     *\n     * Counterpart to Solidity's `uint168` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 168 bits\n     *\n     * _Available since v4.7._\n     */\n    function toUint168(uint256 value) internal pure returns (uint168) {\n        require(value <= type(uint168).max, \"SafeCast: value doesn't fit in 168 bits\");\n        return uint168(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint160 from uint256, reverting on\n     * overflow (when the input is greater than largest uint160).\n     *\n     * Counterpart to Solidity's `uint160` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 160 bits\n     *\n     * _Available since v4.7._\n     */\n    function toUint160(uint256 value) internal pure returns (uint160) {\n        require(value <= type(uint160).max, \"SafeCast: value doesn't fit in 160 bits\");\n        return uint160(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint152 from uint256, reverting on\n     * overflow (when the input is greater than largest uint152).\n     *\n     * Counterpart to Solidity's `uint152` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 152 bits\n     *\n     * _Available since v4.7._\n     */\n    function toUint152(uint256 value) internal pure returns (uint152) {\n        require(value <= type(uint152).max, \"SafeCast: value doesn't fit in 152 bits\");\n        return uint152(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint144 from uint256, reverting on\n     * overflow (when the input is greater than largest uint144).\n     *\n     * Counterpart to Solidity's `uint144` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 144 bits\n     *\n     * _Available since v4.7._\n     */\n    function toUint144(uint256 value) internal pure returns (uint144) {\n        require(value <= type(uint144).max, \"SafeCast: value doesn't fit in 144 bits\");\n        return uint144(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint136 from uint256, reverting on\n     * overflow (when the input is greater than largest uint136).\n     *\n     * Counterpart to Solidity's `uint136` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 136 bits\n     *\n     * _Available since v4.7._\n     */\n    function toUint136(uint256 value) internal pure returns (uint136) {\n        require(value <= type(uint136).max, \"SafeCast: value doesn't fit in 136 bits\");\n        return uint136(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint128 from uint256, reverting on\n     * overflow (when the input is greater than largest uint128).\n     *\n     * Counterpart to Solidity's `uint128` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 128 bits\n     *\n     * _Available since v2.5._\n     */\n    function toUint128(uint256 value) internal pure returns (uint128) {\n        require(value <= type(uint128).max, \"SafeCast: value doesn't fit in 128 bits\");\n        return uint128(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint120 from uint256, reverting on\n     * overflow (when the input is greater than largest uint120).\n     *\n     * Counterpart to Solidity's `uint120` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 120 bits\n     *\n     * _Available since v4.7._\n     */\n    function toUint120(uint256 value) internal pure returns (uint120) {\n        require(value <= type(uint120).max, \"SafeCast: value doesn't fit in 120 bits\");\n        return uint120(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint112 from uint256, reverting on\n     * overflow (when the input is greater than largest uint112).\n     *\n     * Counterpart to Solidity's `uint112` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 112 bits\n     *\n     * _Available since v4.7._\n     */\n    function toUint112(uint256 value) internal pure returns (uint112) {\n        require(value <= type(uint112).max, \"SafeCast: value doesn't fit in 112 bits\");\n        return uint112(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint104 from uint256, reverting on\n     * overflow (when the input is greater than largest uint104).\n     *\n     * Counterpart to Solidity's `uint104` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 104 bits\n     *\n     * _Available since v4.7._\n     */\n    function toUint104(uint256 value) internal pure returns (uint104) {\n        require(value <= type(uint104).max, \"SafeCast: value doesn't fit in 104 bits\");\n        return uint104(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint96 from uint256, reverting on\n     * overflow (when the input is greater than largest uint96).\n     *\n     * Counterpart to Solidity's `uint96` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 96 bits\n     *\n     * _Available since v4.2._\n     */\n    function toUint96(uint256 value) internal pure returns (uint96) {\n        require(value <= type(uint96).max, \"SafeCast: value doesn't fit in 96 bits\");\n        return uint96(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint88 from uint256, reverting on\n     * overflow (when the input is greater than largest uint88).\n     *\n     * Counterpart to Solidity's `uint88` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 88 bits\n     *\n     * _Available since v4.7._\n     */\n    function toUint88(uint256 value) internal pure returns (uint88) {\n        require(value <= type(uint88).max, \"SafeCast: value doesn't fit in 88 bits\");\n        return uint88(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint80 from uint256, reverting on\n     * overflow (when the input is greater than largest uint80).\n     *\n     * Counterpart to Solidity's `uint80` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 80 bits\n     *\n     * _Available since v4.7._\n     */\n    function toUint80(uint256 value) internal pure returns (uint80) {\n        require(value <= type(uint80).max, \"SafeCast: value doesn't fit in 80 bits\");\n        return uint80(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint72 from uint256, reverting on\n     * overflow (when the input is greater than largest uint72).\n     *\n     * Counterpart to Solidity's `uint72` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 72 bits\n     *\n     * _Available since v4.7._\n     */\n    function toUint72(uint256 value) internal pure returns (uint72) {\n        require(value <= type(uint72).max, \"SafeCast: value doesn't fit in 72 bits\");\n        return uint72(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint64 from uint256, reverting on\n     * overflow (when the input is greater than largest uint64).\n     *\n     * Counterpart to Solidity's `uint64` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 64 bits\n     *\n     * _Available since v2.5._\n     */\n    function toUint64(uint256 value) internal pure returns (uint64) {\n        require(value <= type(uint64).max, \"SafeCast: value doesn't fit in 64 bits\");\n        return uint64(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint56 from uint256, reverting on\n     * overflow (when the input is greater than largest uint56).\n     *\n     * Counterpart to Solidity's `uint56` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 56 bits\n     *\n     * _Available since v4.7._\n     */\n    function toUint56(uint256 value) internal pure returns (uint56) {\n        require(value <= type(uint56).max, \"SafeCast: value doesn't fit in 56 bits\");\n        return uint56(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint48 from uint256, reverting on\n     * overflow (when the input is greater than largest uint48).\n     *\n     * Counterpart to Solidity's `uint48` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 48 bits\n     *\n     * _Available since v4.7._\n     */\n    function toUint48(uint256 value) internal pure returns (uint48) {\n        require(value <= type(uint48).max, \"SafeCast: value doesn't fit in 48 bits\");\n        return uint48(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint40 from uint256, reverting on\n     * overflow (when the input is greater than largest uint40).\n     *\n     * Counterpart to Solidity's `uint40` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 40 bits\n     *\n     * _Available since v4.7._\n     */\n    function toUint40(uint256 value) internal pure returns (uint40) {\n        require(value <= type(uint40).max, \"SafeCast: value doesn't fit in 40 bits\");\n        return uint40(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint32 from uint256, reverting on\n     * overflow (when the input is greater than largest uint32).\n     *\n     * Counterpart to Solidity's `uint32` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 32 bits\n     *\n     * _Available since v2.5._\n     */\n    function toUint32(uint256 value) internal pure returns (uint32) {\n        require(value <= type(uint32).max, \"SafeCast: value doesn't fit in 32 bits\");\n        return uint32(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint24 from uint256, reverting on\n     * overflow (when the input is greater than largest uint24).\n     *\n     * Counterpart to Solidity's `uint24` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 24 bits\n     *\n     * _Available since v4.7._\n     */\n    function toUint24(uint256 value) internal pure returns (uint24) {\n        require(value <= type(uint24).max, \"SafeCast: value doesn't fit in 24 bits\");\n        return uint24(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint16 from uint256, reverting on\n     * overflow (when the input is greater than largest uint16).\n     *\n     * Counterpart to Solidity's `uint16` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 16 bits\n     *\n     * _Available since v2.5._\n     */\n    function toUint16(uint256 value) internal pure returns (uint16) {\n        require(value <= type(uint16).max, \"SafeCast: value doesn't fit in 16 bits\");\n        return uint16(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint8 from uint256, reverting on\n     * overflow (when the input is greater than largest uint8).\n     *\n     * Counterpart to Solidity's `uint8` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 8 bits\n     *\n     * _Available since v2.5._\n     */\n    function toUint8(uint256 value) internal pure returns (uint8) {\n        require(value <= type(uint8).max, \"SafeCast: value doesn't fit in 8 bits\");\n        return uint8(value);\n    }\n\n    /**\n     * @dev Converts a signed int256 into an unsigned uint256.\n     *\n     * Requirements:\n     *\n     * - input must be greater than or equal to 0.\n     *\n     * _Available since v3.0._\n     */\n    function toUint256(int256 value) internal pure returns (uint256) {\n        require(value >= 0, \"SafeCast: value must be positive\");\n        return uint256(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int248 from int256, reverting on\n     * overflow (when the input is less than smallest int248 or\n     * greater than largest int248).\n     *\n     * Counterpart to Solidity's `int248` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 248 bits\n     *\n     * _Available since v4.7._\n     */\n    function toInt248(int256 value) internal pure returns (int248) {\n        require(value >= type(int248).min && value <= type(int248).max, \"SafeCast: value doesn't fit in 248 bits\");\n        return int248(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int240 from int256, reverting on\n     * overflow (when the input is less than smallest int240 or\n     * greater than largest int240).\n     *\n     * Counterpart to Solidity's `int240` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 240 bits\n     *\n     * _Available since v4.7._\n     */\n    function toInt240(int256 value) internal pure returns (int240) {\n        require(value >= type(int240).min && value <= type(int240).max, \"SafeCast: value doesn't fit in 240 bits\");\n        return int240(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int232 from int256, reverting on\n     * overflow (when the input is less than smallest int232 or\n     * greater than largest int232).\n     *\n     * Counterpart to Solidity's `int232` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 232 bits\n     *\n     * _Available since v4.7._\n     */\n    function toInt232(int256 value) internal pure returns (int232) {\n        require(value >= type(int232).min && value <= type(int232).max, \"SafeCast: value doesn't fit in 232 bits\");\n        return int232(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int224 from int256, reverting on\n     * overflow (when the input is less than smallest int224 or\n     * greater than largest int224).\n     *\n     * Counterpart to Solidity's `int224` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 224 bits\n     *\n     * _Available since v4.7._\n     */\n    function toInt224(int256 value) internal pure returns (int224) {\n        require(value >= type(int224).min && value <= type(int224).max, \"SafeCast: value doesn't fit in 224 bits\");\n        return int224(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int216 from int256, reverting on\n     * overflow (when the input is less than smallest int216 or\n     * greater than largest int216).\n     *\n     * Counterpart to Solidity's `int216` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 216 bits\n     *\n     * _Available since v4.7._\n     */\n    function toInt216(int256 value) internal pure returns (int216) {\n        require(value >= type(int216).min && value <= type(int216).max, \"SafeCast: value doesn't fit in 216 bits\");\n        return int216(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int208 from int256, reverting on\n     * overflow (when the input is less than smallest int208 or\n     * greater than largest int208).\n     *\n     * Counterpart to Solidity's `int208` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 208 bits\n     *\n     * _Available since v4.7._\n     */\n    function toInt208(int256 value) internal pure returns (int208) {\n        require(value >= type(int208).min && value <= type(int208).max, \"SafeCast: value doesn't fit in 208 bits\");\n        return int208(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int200 from int256, reverting on\n     * overflow (when the input is less than smallest int200 or\n     * greater than largest int200).\n     *\n     * Counterpart to Solidity's `int200` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 200 bits\n     *\n     * _Available since v4.7._\n     */\n    function toInt200(int256 value) internal pure returns (int200) {\n        require(value >= type(int200).min && value <= type(int200).max, \"SafeCast: value doesn't fit in 200 bits\");\n        return int200(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int192 from int256, reverting on\n     * overflow (when the input is less than smallest int192 or\n     * greater than largest int192).\n     *\n     * Counterpart to Solidity's `int192` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 192 bits\n     *\n     * _Available since v4.7._\n     */\n    function toInt192(int256 value) internal pure returns (int192) {\n        require(value >= type(int192).min && value <= type(int192).max, \"SafeCast: value doesn't fit in 192 bits\");\n        return int192(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int184 from int256, reverting on\n     * overflow (when the input is less than smallest int184 or\n     * greater than largest int184).\n     *\n     * Counterpart to Solidity's `int184` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 184 bits\n     *\n     * _Available since v4.7._\n     */\n    function toInt184(int256 value) internal pure returns (int184) {\n        require(value >= type(int184).min && value <= type(int184).max, \"SafeCast: value doesn't fit in 184 bits\");\n        return int184(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int176 from int256, reverting on\n     * overflow (when the input is less than smallest int176 or\n     * greater than largest int176).\n     *\n     * Counterpart to Solidity's `int176` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 176 bits\n     *\n     * _Available since v4.7._\n     */\n    function toInt176(int256 value) internal pure returns (int176) {\n        require(value >= type(int176).min && value <= type(int176).max, \"SafeCast: value doesn't fit in 176 bits\");\n        return int176(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int168 from int256, reverting on\n     * overflow (when the input is less than smallest int168 or\n     * greater than largest int168).\n     *\n     * Counterpart to Solidity's `int168` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 168 bits\n     *\n     * _Available since v4.7._\n     */\n    function toInt168(int256 value) internal pure returns (int168) {\n        require(value >= type(int168).min && value <= type(int168).max, \"SafeCast: value doesn't fit in 168 bits\");\n        return int168(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int160 from int256, reverting on\n     * overflow (when the input is less than smallest int160 or\n     * greater than largest int160).\n     *\n     * Counterpart to Solidity's `int160` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 160 bits\n     *\n     * _Available since v4.7._\n     */\n    function toInt160(int256 value) internal pure returns (int160) {\n        require(value >= type(int160).min && value <= type(int160).max, \"SafeCast: value doesn't fit in 160 bits\");\n        return int160(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int152 from int256, reverting on\n     * overflow (when the input is less than smallest int152 or\n     * greater than largest int152).\n     *\n     * Counterpart to Solidity's `int152` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 152 bits\n     *\n     * _Available since v4.7._\n     */\n    function toInt152(int256 value) internal pure returns (int152) {\n        require(value >= type(int152).min && value <= type(int152).max, \"SafeCast: value doesn't fit in 152 bits\");\n        return int152(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int144 from int256, reverting on\n     * overflow (when the input is less than smallest int144 or\n     * greater than largest int144).\n     *\n     * Counterpart to Solidity's `int144` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 144 bits\n     *\n     * _Available since v4.7._\n     */\n    function toInt144(int256 value) internal pure returns (int144) {\n        require(value >= type(int144).min && value <= type(int144).max, \"SafeCast: value doesn't fit in 144 bits\");\n        return int144(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int136 from int256, reverting on\n     * overflow (when the input is less than smallest int136 or\n     * greater than largest int136).\n     *\n     * Counterpart to Solidity's `int136` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 136 bits\n     *\n     * _Available since v4.7._\n     */\n    function toInt136(int256 value) internal pure returns (int136) {\n        require(value >= type(int136).min && value <= type(int136).max, \"SafeCast: value doesn't fit in 136 bits\");\n        return int136(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int128 from int256, reverting on\n     * overflow (when the input is less than smallest int128 or\n     * greater than largest int128).\n     *\n     * Counterpart to Solidity's `int128` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 128 bits\n     *\n     * _Available since v3.1._\n     */\n    function toInt128(int256 value) internal pure returns (int128) {\n        require(value >= type(int128).min && value <= type(int128).max, \"SafeCast: value doesn't fit in 128 bits\");\n        return int128(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int120 from int256, reverting on\n     * overflow (when the input is less than smallest int120 or\n     * greater than largest int120).\n     *\n     * Counterpart to Solidity's `int120` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 120 bits\n     *\n     * _Available since v4.7._\n     */\n    function toInt120(int256 value) internal pure returns (int120) {\n        require(value >= type(int120).min && value <= type(int120).max, \"SafeCast: value doesn't fit in 120 bits\");\n        return int120(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int112 from int256, reverting on\n     * overflow (when the input is less than smallest int112 or\n     * greater than largest int112).\n     *\n     * Counterpart to Solidity's `int112` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 112 bits\n     *\n     * _Available since v4.7._\n     */\n    function toInt112(int256 value) internal pure returns (int112) {\n        require(value >= type(int112).min && value <= type(int112).max, \"SafeCast: value doesn't fit in 112 bits\");\n        return int112(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int104 from int256, reverting on\n     * overflow (when the input is less than smallest int104 or\n     * greater than largest int104).\n     *\n     * Counterpart to Solidity's `int104` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 104 bits\n     *\n     * _Available since v4.7._\n     */\n    function toInt104(int256 value) internal pure returns (int104) {\n        require(value >= type(int104).min && value <= type(int104).max, \"SafeCast: value doesn't fit in 104 bits\");\n        return int104(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int96 from int256, reverting on\n     * overflow (when the input is less than smallest int96 or\n     * greater than largest int96).\n     *\n     * Counterpart to Solidity's `int96` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 96 bits\n     *\n     * _Available since v4.7._\n     */\n    function toInt96(int256 value) internal pure returns (int96) {\n        require(value >= type(int96).min && value <= type(int96).max, \"SafeCast: value doesn't fit in 96 bits\");\n        return int96(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int88 from int256, reverting on\n     * overflow (when the input is less than smallest int88 or\n     * greater than largest int88).\n     *\n     * Counterpart to Solidity's `int88` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 88 bits\n     *\n     * _Available since v4.7._\n     */\n    function toInt88(int256 value) internal pure returns (int88) {\n        require(value >= type(int88).min && value <= type(int88).max, \"SafeCast: value doesn't fit in 88 bits\");\n        return int88(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int80 from int256, reverting on\n     * overflow (when the input is less than smallest int80 or\n     * greater than largest int80).\n     *\n     * Counterpart to Solidity's `int80` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 80 bits\n     *\n     * _Available since v4.7._\n     */\n    function toInt80(int256 value) internal pure returns (int80) {\n        require(value >= type(int80).min && value <= type(int80).max, \"SafeCast: value doesn't fit in 80 bits\");\n        return int80(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int72 from int256, reverting on\n     * overflow (when the input is less than smallest int72 or\n     * greater than largest int72).\n     *\n     * Counterpart to Solidity's `int72` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 72 bits\n     *\n     * _Available since v4.7._\n     */\n    function toInt72(int256 value) internal pure returns (int72) {\n        require(value >= type(int72).min && value <= type(int72).max, \"SafeCast: value doesn't fit in 72 bits\");\n        return int72(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int64 from int256, reverting on\n     * overflow (when the input is less than smallest int64 or\n     * greater than largest int64).\n     *\n     * Counterpart to Solidity's `int64` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 64 bits\n     *\n     * _Available since v3.1._\n     */\n    function toInt64(int256 value) internal pure returns (int64) {\n        require(value >= type(int64).min && value <= type(int64).max, \"SafeCast: value doesn't fit in 64 bits\");\n        return int64(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int56 from int256, reverting on\n     * overflow (when the input is less than smallest int56 or\n     * greater than largest int56).\n     *\n     * Counterpart to Solidity's `int56` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 56 bits\n     *\n     * _Available since v4.7._\n     */\n    function toInt56(int256 value) internal pure returns (int56) {\n        require(value >= type(int56).min && value <= type(int56).max, \"SafeCast: value doesn't fit in 56 bits\");\n        return int56(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int48 from int256, reverting on\n     * overflow (when the input is less than smallest int48 or\n     * greater than largest int48).\n     *\n     * Counterpart to Solidity's `int48` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 48 bits\n     *\n     * _Available since v4.7._\n     */\n    function toInt48(int256 value) internal pure returns (int48) {\n        require(value >= type(int48).min && value <= type(int48).max, \"SafeCast: value doesn't fit in 48 bits\");\n        return int48(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int40 from int256, reverting on\n     * overflow (when the input is less than smallest int40 or\n     * greater than largest int40).\n     *\n     * Counterpart to Solidity's `int40` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 40 bits\n     *\n     * _Available since v4.7._\n     */\n    function toInt40(int256 value) internal pure returns (int40) {\n        require(value >= type(int40).min && value <= type(int40).max, \"SafeCast: value doesn't fit in 40 bits\");\n        return int40(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int32 from int256, reverting on\n     * overflow (when the input is less than smallest int32 or\n     * greater than largest int32).\n     *\n     * Counterpart to Solidity's `int32` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 32 bits\n     *\n     * _Available since v3.1._\n     */\n    function toInt32(int256 value) internal pure returns (int32) {\n        require(value >= type(int32).min && value <= type(int32).max, \"SafeCast: value doesn't fit in 32 bits\");\n        return int32(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int24 from int256, reverting on\n     * overflow (when the input is less than smallest int24 or\n     * greater than largest int24).\n     *\n     * Counterpart to Solidity's `int24` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 24 bits\n     *\n     * _Available since v4.7._\n     */\n    function toInt24(int256 value) internal pure returns (int24) {\n        require(value >= type(int24).min && value <= type(int24).max, \"SafeCast: value doesn't fit in 24 bits\");\n        return int24(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int16 from int256, reverting on\n     * overflow (when the input is less than smallest int16 or\n     * greater than largest int16).\n     *\n     * Counterpart to Solidity's `int16` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 16 bits\n     *\n     * _Available since v3.1._\n     */\n    function toInt16(int256 value) internal pure returns (int16) {\n        require(value >= type(int16).min && value <= type(int16).max, \"SafeCast: value doesn't fit in 16 bits\");\n        return int16(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int8 from int256, reverting on\n     * overflow (when the input is less than smallest int8 or\n     * greater than largest int8).\n     *\n     * Counterpart to Solidity's `int8` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 8 bits\n     *\n     * _Available since v3.1._\n     */\n    function toInt8(int256 value) internal pure returns (int8) {\n        require(value >= type(int8).min && value <= type(int8).max, \"SafeCast: value doesn't fit in 8 bits\");\n        return int8(value);\n    }\n\n    /**\n     * @dev Converts an unsigned uint256 into a signed int256.\n     *\n     * Requirements:\n     *\n     * - input must be less than or equal to maxInt256.\n     *\n     * _Available since v3.0._\n     */\n    function toInt256(uint256 value) internal pure returns (int256) {\n        // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\n        require(value <= uint256(type(int256).max), \"SafeCast: value doesn't fit in an int256\");\n        return int256(value);\n    }\n}\n"
			}
		},
		"settings": {
			"optimizer": {
				"enabled": false,
				"runs": 200
			},
			"outputSelection": {
				"*": {
					"": [
						"ast"
					],
					"*": [
						"abi",
						"metadata",
						"devdoc",
						"userdoc",
						"storageLayout",
						"evm.legacyAssembly",
						"evm.bytecode",
						"evm.deployedBytecode",
						"evm.methodIdentifiers",
						"evm.gasEstimates",
						"evm.assembly"
					]
				}
			}
		}
	},
	"output": {
		"contracts": {
			"@openzeppelin/contracts/token/ERC20/IERC20.sol": {
				"IERC20": {
					"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": {
						"assembly": "",
						"bytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"linkReferences": {},
							"object": "",
							"opcodes": "",
							"sourceMap": ""
						},
						"deployedBytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"immutableReferences": {},
							"linkReferences": {},
							"object": "",
							"opcodes": "",
							"sourceMap": ""
						},
						"gasEstimates": null,
						"legacyAssembly": 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.6+commit.11564f7e\"},\"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/token/ERC20/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"berlin\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]}},\"version\":1}",
					"storageLayout": {
						"storage": [],
						"types": null
					},
					"userdoc": {
						"kind": "user",
						"methods": {},
						"version": 1
					}
				}
			},
			"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol": {
				"IERC20Permit": {
					"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.",
						"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]."
							}
						},
						"version": 1
					},
					"evm": {
						"assembly": "",
						"bytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"linkReferences": {},
							"object": "",
							"opcodes": "",
							"sourceMap": ""
						},
						"deployedBytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"immutableReferences": {},
							"linkReferences": {},
							"object": "",
							"opcodes": "",
							"sourceMap": ""
						},
						"gasEstimates": null,
						"legacyAssembly": null,
						"methodIdentifiers": {
							"DOMAIN_SEPARATOR()": "3644e515",
							"nonces(address)": "7ecebe00",
							"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf"
						}
					},
					"metadata": "{\"compiler\":{\"version\":\"0.8.6+commit.11564f7e\"},\"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.\",\"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].\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":\"IERC20Permit\"},\"evmVersion\":\"berlin\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95\",\"dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7\"]}},\"version\":1}",
					"storageLayout": {
						"storage": [],
						"types": null
					},
					"userdoc": {
						"kind": "user",
						"methods": {},
						"version": 1
					}
				}
			},
			"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": {
				"SafeERC20": {
					"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": {
						"assembly": "    /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":707:4455  library SafeERC20 {... */\n  dataSize(sub_0)\n  dataOffset(sub_0)\n  0x0b\n  dup3\n  dup3\n  dup3\n  codecopy\n  dup1\n  mload\n  0x00\n  byte\n  0x73\n  eq\n  tag_1\n  jumpi\n  mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n  mstore(0x04, 0x00)\n  revert(0x00, 0x24)\ntag_1:\n  mstore(0x00, address)\n  0x73\n  dup2\n  mstore8\n  dup3\n  dup2\n  return\nstop\n\nsub_0: assembly {\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":707:4455  library SafeERC20 {... */\n      eq(address, deployTimeAddress())\n      mstore(0x40, 0x80)\n      0x00\n      dup1\n      revert\n\n    auxdata: 0xa264697066735822122071d6a2b09f34fd606fda84e92c27f7f2b2920e3d64851f9a414432265439465164736f6c63430008060033\n}\n",
						"bytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"linkReferences": {},
							"object": "60566050600b82828239805160001a6073146043577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122071d6a2b09f34fd606fda84e92c27f7f2b2920e3d64851f9a414432265439465164736f6c63430008060033",
							"opcodes": "PUSH1 0x56 PUSH1 0x50 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x43 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 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 PUSH18 0xD6A2B09F34FD606FDA84E92C27F7F2B2920E RETURNDATASIZE PUSH5 0x851F9A4144 ORIGIN 0x26 SLOAD CODECOPY CHAINID MLOAD PUSH5 0x736F6C6343 STOP ADDMOD MOD STOP CALLER ",
							"sourceMap": "707:3748:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
						},
						"deployedBytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"immutableReferences": {},
							"linkReferences": {},
							"object": "73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122071d6a2b09f34fd606fda84e92c27f7f2b2920e3d64851f9a414432265439465164736f6c63430008060033",
							"opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH18 0xD6A2B09F34FD606FDA84E92C27F7F2B2920E RETURNDATASIZE PUSH5 0x851F9A4144 ORIGIN 0x26 SLOAD CODECOPY CHAINID MLOAD PUSH5 0x736F6C6343 STOP ADDMOD MOD STOP CALLER ",
							"sourceMap": "707:3748:2:-:0;;;;;;;;"
						},
						"gasEstimates": {
							"creation": {
								"codeDepositCost": "17200",
								"executionCost": "97",
								"totalCost": "17297"
							},
							"internal": {
								"_callOptionalReturn(contract IERC20,bytes memory)": "infinite",
								"safeApprove(contract IERC20,address,uint256)": "infinite",
								"safeDecreaseAllowance(contract IERC20,address,uint256)": "infinite",
								"safeIncreaseAllowance(contract IERC20,address,uint256)": "infinite",
								"safePermit(contract IERC20Permit,address,address,uint256,uint256,uint8,bytes32,bytes32)": "infinite",
								"safeTransfer(contract IERC20,address,uint256)": "infinite",
								"safeTransferFrom(contract IERC20,address,address,uint256)": "infinite"
							}
						},
						"legacyAssembly": {
							".code": [
								{
									"begin": 707,
									"end": 4455,
									"name": "PUSH #[$]",
									"source": 2,
									"value": "0000000000000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "PUSH [$]",
									"source": 2,
									"value": "0000000000000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "PUSH",
									"source": 2,
									"value": "B"
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "DUP3",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "DUP3",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "DUP3",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "CODECOPY",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "DUP1",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "MLOAD",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "PUSH",
									"source": 2,
									"value": "0"
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "BYTE",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "PUSH",
									"source": 2,
									"value": "73"
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "EQ",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "PUSH [tag]",
									"source": 2,
									"value": "1"
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "JUMPI",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "PUSH",
									"source": 2,
									"value": "4E487B7100000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "PUSH",
									"source": 2,
									"value": "0"
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "MSTORE",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "PUSH",
									"source": 2,
									"value": "0"
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "PUSH",
									"source": 2,
									"value": "4"
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "MSTORE",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "PUSH",
									"source": 2,
									"value": "24"
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "PUSH",
									"source": 2,
									"value": "0"
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "REVERT",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "tag",
									"source": 2,
									"value": "1"
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "JUMPDEST",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "ADDRESS",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "PUSH",
									"source": 2,
									"value": "0"
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "MSTORE",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "PUSH",
									"source": 2,
									"value": "73"
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "DUP2",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "MSTORE8",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "DUP3",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "DUP2",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "RETURN",
									"source": 2
								}
							],
							".data": {
								"0": {
									".auxdata": "a264697066735822122071d6a2b09f34fd606fda84e92c27f7f2b2920e3d64851f9a414432265439465164736f6c63430008060033",
									".code": [
										{
											"begin": 707,
											"end": 4455,
											"name": "PUSHDEPLOYADDRESS",
											"source": 2
										},
										{
											"begin": 707,
											"end": 4455,
											"name": "ADDRESS",
											"source": 2
										},
										{
											"begin": 707,
											"end": 4455,
											"name": "EQ",
											"source": 2
										},
										{
											"begin": 707,
											"end": 4455,
											"name": "PUSH",
											"source": 2,
											"value": "80"
										},
										{
											"begin": 707,
											"end": 4455,
											"name": "PUSH",
											"source": 2,
											"value": "40"
										},
										{
											"begin": 707,
											"end": 4455,
											"name": "MSTORE",
											"source": 2
										},
										{
											"begin": 707,
											"end": 4455,
											"name": "PUSH",
											"source": 2,
											"value": "0"
										},
										{
											"begin": 707,
											"end": 4455,
											"name": "DUP1",
											"source": 2
										},
										{
											"begin": 707,
											"end": 4455,
											"name": "REVERT",
											"source": 2
										}
									]
								}
							}
						},
						"methodIdentifiers": {}
					},
					"metadata": "{\"compiler\":{\"version\":\"0.8.6+commit.11564f7e\"},\"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/token/ERC20/utils/SafeERC20.sol\":\"SafeERC20\"},\"evmVersion\":\"berlin\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95\",\"dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x032807210d1d7d218963d7355d62e021a84bf1b3339f4f50be2f63b53cccaf29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11756f42121f6541a35a8339ea899ee7514cfaa2e6d740625fcc844419296aa6\",\"dweb:/ipfs/QmekMuk6BY4DAjzeXr4MSbKdgoqqsZnA8JPtuyWc6CwXHf\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487\",\"dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG\"]}},\"version\":1}",
					"storageLayout": {
						"storage": [],
						"types": null
					},
					"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": {
						"assembly": "    /* \"@openzeppelin/contracts/utils/Address.sol\":194:8305  library Address {... */\n  dataSize(sub_0)\n  dataOffset(sub_0)\n  0x0b\n  dup3\n  dup3\n  dup3\n  codecopy\n  dup1\n  mload\n  0x00\n  byte\n  0x73\n  eq\n  tag_1\n  jumpi\n  mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n  mstore(0x04, 0x00)\n  revert(0x00, 0x24)\ntag_1:\n  mstore(0x00, address)\n  0x73\n  dup2\n  mstore8\n  dup3\n  dup2\n  return\nstop\n\nsub_0: assembly {\n        /* \"@openzeppelin/contracts/utils/Address.sol\":194:8305  library Address {... */\n      eq(address, deployTimeAddress())\n      mstore(0x40, 0x80)\n      0x00\n      dup1\n      revert\n\n    auxdata: 0xa264697066735822122095b696351425d1b47aa18c5a06f30d0fd230c71aea8cf280c5f79360b9ca758664736f6c63430008060033\n}\n",
						"bytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"linkReferences": {},
							"object": "60566050600b82828239805160001a6073146043577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122095b696351425d1b47aa18c5a06f30d0fd230c71aea8cf280c5f79360b9ca758664736f6c63430008060033",
							"opcodes": "PUSH1 0x56 PUSH1 0x50 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x43 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 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 SWAP6 0xB6 SWAP7 CALLDATALOAD EQ 0x25 0xD1 0xB4 PUSH27 0xA18C5A06F30D0FD230C71AEA8CF280C5F79360B9CA758664736F6C PUSH4 0x43000806 STOP CALLER ",
							"sourceMap": "194:8111:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
						},
						"deployedBytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"immutableReferences": {},
							"linkReferences": {},
							"object": "73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122095b696351425d1b47aa18c5a06f30d0fd230c71aea8cf280c5f79360b9ca758664736f6c63430008060033",
							"opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP6 0xB6 SWAP7 CALLDATALOAD EQ 0x25 0xD1 0xB4 PUSH27 0xA18C5A06F30D0FD230C71AEA8CF280C5F79360B9CA758664736F6C PUSH4 0x43000806 STOP CALLER ",
							"sourceMap": "194:8111:3:-:0;;;;;;;;"
						},
						"gasEstimates": {
							"creation": {
								"codeDepositCost": "17200",
								"executionCost": "97",
								"totalCost": "17297"
							},
							"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"
							}
						},
						"legacyAssembly": {
							".code": [
								{
									"begin": 194,
									"end": 8305,
									"name": "PUSH #[$]",
									"source": 3,
									"value": "0000000000000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "PUSH [$]",
									"source": 3,
									"value": "0000000000000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "PUSH",
									"source": 3,
									"value": "B"
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "DUP3",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "DUP3",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "DUP3",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "CODECOPY",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "DUP1",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "MLOAD",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "PUSH",
									"source": 3,
									"value": "0"
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "BYTE",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "PUSH",
									"source": 3,
									"value": "73"
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "EQ",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "PUSH [tag]",
									"source": 3,
									"value": "1"
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "JUMPI",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "PUSH",
									"source": 3,
									"value": "4E487B7100000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "PUSH",
									"source": 3,
									"value": "0"
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "MSTORE",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "PUSH",
									"source": 3,
									"value": "0"
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "PUSH",
									"source": 3,
									"value": "4"
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "MSTORE",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "PUSH",
									"source": 3,
									"value": "24"
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "PUSH",
									"source": 3,
									"value": "0"
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "REVERT",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "tag",
									"source": 3,
									"value": "1"
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "JUMPDEST",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "ADDRESS",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "PUSH",
									"source": 3,
									"value": "0"
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "MSTORE",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "PUSH",
									"source": 3,
									"value": "73"
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "DUP2",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "MSTORE8",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "DUP3",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "DUP2",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "RETURN",
									"source": 3
								}
							],
							".data": {
								"0": {
									".auxdata": "a264697066735822122095b696351425d1b47aa18c5a06f30d0fd230c71aea8cf280c5f79360b9ca758664736f6c63430008060033",
									".code": [
										{
											"begin": 194,
											"end": 8305,
											"name": "PUSHDEPLOYADDRESS",
											"source": 3
										},
										{
											"begin": 194,
											"end": 8305,
											"name": "ADDRESS",
											"source": 3
										},
										{
											"begin": 194,
											"end": 8305,
											"name": "EQ",
											"source": 3
										},
										{
											"begin": 194,
											"end": 8305,
											"name": "PUSH",
											"source": 3,
											"value": "80"
										},
										{
											"begin": 194,
											"end": 8305,
											"name": "PUSH",
											"source": 3,
											"value": "40"
										},
										{
											"begin": 194,
											"end": 8305,
											"name": "MSTORE",
											"source": 3
										},
										{
											"begin": 194,
											"end": 8305,
											"name": "PUSH",
											"source": 3,
											"value": "0"
										},
										{
											"begin": 194,
											"end": 8305,
											"name": "DUP1",
											"source": 3
										},
										{
											"begin": 194,
											"end": 8305,
											"name": "REVERT",
											"source": 3
										}
									]
								}
							}
						},
						"methodIdentifiers": {}
					},
					"metadata": "{\"compiler\":{\"version\":\"0.8.6+commit.11564f7e\"},\"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\":\"berlin\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487\",\"dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG\"]}},\"version\":1}",
					"storageLayout": {
						"storage": [],
						"types": null
					},
					"userdoc": {
						"kind": "user",
						"methods": {},
						"version": 1
					}
				}
			},
			"@openzeppelin/contracts/utils/Multicall.sol": {
				"Multicall": {
					"abi": [
						{
							"inputs": [
								{
									"internalType": "bytes[]",
									"name": "data",
									"type": "bytes[]"
								}
							],
							"name": "multicall",
							"outputs": [
								{
									"internalType": "bytes[]",
									"name": "results",
									"type": "bytes[]"
								}
							],
							"stateMutability": "nonpayable",
							"type": "function"
						}
					],
					"devdoc": {
						"details": "Provides a function to batch together multiple calls in a single external call. _Available since v4.1._",
						"kind": "dev",
						"methods": {
							"multicall(bytes[])": {
								"details": "Receives and executes a batch of function calls on this contract."
							}
						},
						"version": 1
					},
					"evm": {
						"assembly": "",
						"bytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"linkReferences": {},
							"object": "",
							"opcodes": "",
							"sourceMap": ""
						},
						"deployedBytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"immutableReferences": {},
							"linkReferences": {},
							"object": "",
							"opcodes": "",
							"sourceMap": ""
						},
						"gasEstimates": null,
						"legacyAssembly": null,
						"methodIdentifiers": {
							"multicall(bytes[])": "ac9650d8"
						}
					},
					"metadata": "{\"compiler\":{\"version\":\"0.8.6+commit.11564f7e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Provides a function to batch together multiple calls in a single external call. _Available since v4.1._\",\"kind\":\"dev\",\"methods\":{\"multicall(bytes[])\":{\"details\":\"Receives and executes a batch of function calls on this contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Multicall.sol\":\"Multicall\"},\"evmVersion\":\"berlin\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487\",\"dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG\"]},\"@openzeppelin/contracts/utils/Multicall.sol\":{\"keccak256\":\"0x35e30a35e23f856cbcee3558b7efdd83f6017a8f1b419710645143d98e892463\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7dae8b319a276abec4bb2f134251597daddbacd03779c707105a348e53cfd72a\",\"dweb:/ipfs/QmXPnLLsoWDKSa4NocGr6HonQhHnfxy72gYLgV8oitH1WQ\"]}},\"version\":1}",
					"storageLayout": {
						"storage": [],
						"types": null
					},
					"userdoc": {
						"kind": "user",
						"methods": {},
						"version": 1
					}
				}
			},
			"@openzeppelin/contracts/utils/math/SafeCast.sol": {
				"SafeCast": {
					"abi": [],
					"devdoc": {
						"details": "Wrappers over Solidity's uintXX/intXX casting operators with added overflow checks. Downcasting from uint256/int256 in Solidity does not revert on overflow. This can easily result in undesired exploitation or bugs, since developers usually assume that overflows raise errors. `SafeCast` restores this intuition by reverting the transaction when such an operation overflows. Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always. Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing all math on `uint256` and `int256` and then downcasting.",
						"kind": "dev",
						"methods": {},
						"version": 1
					},
					"evm": {
						"assembly": "    /* \"@openzeppelin/contracts/utils/math/SafeCast.sol\":842:35527  library SafeCast {... */\n  dataSize(sub_0)\n  dataOffset(sub_0)\n  0x0b\n  dup3\n  dup3\n  dup3\n  codecopy\n  dup1\n  mload\n  0x00\n  byte\n  0x73\n  eq\n  tag_1\n  jumpi\n  mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n  mstore(0x04, 0x00)\n  revert(0x00, 0x24)\ntag_1:\n  mstore(0x00, address)\n  0x73\n  dup2\n  mstore8\n  dup3\n  dup2\n  return\nstop\n\nsub_0: assembly {\n        /* \"@openzeppelin/contracts/utils/math/SafeCast.sol\":842:35527  library SafeCast {... */\n      eq(address, deployTimeAddress())\n      mstore(0x40, 0x80)\n      0x00\n      dup1\n      revert\n\n    auxdata: 0xa2646970667358221220de42d83375a2053956daa00b50042049caf5dd886646fe4dbd0add076f144c1664736f6c63430008060033\n}\n",
						"bytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"linkReferences": {},
							"object": "60566050600b82828239805160001a6073146043577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220de42d83375a2053956daa00b50042049caf5dd886646fe4dbd0add076f144c1664736f6c63430008060033",
							"opcodes": "PUSH1 0x56 PUSH1 0x50 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x43 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 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 0xDE TIMESTAMP 0xD8 CALLER PUSH22 0xA2053956DAA00B50042049CAF5DD886646FE4DBD0ADD SMOD PUSH16 0x144C1664736F6C634300080600330000 ",
							"sourceMap": "842:34685:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
						},
						"deployedBytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"immutableReferences": {},
							"linkReferences": {},
							"object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220de42d83375a2053956daa00b50042049caf5dd886646fe4dbd0add076f144c1664736f6c63430008060033",
							"opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDE TIMESTAMP 0xD8 CALLER PUSH22 0xA2053956DAA00B50042049CAF5DD886646FE4DBD0ADD SMOD PUSH16 0x144C1664736F6C634300080600330000 ",
							"sourceMap": "842:34685:5:-:0;;;;;;;;"
						},
						"gasEstimates": {
							"creation": {
								"codeDepositCost": "17200",
								"executionCost": "97",
								"totalCost": "17297"
							},
							"internal": {
								"toInt104(int256)": "infinite",
								"toInt112(int256)": "infinite",
								"toInt120(int256)": "infinite",
								"toInt128(int256)": "infinite",
								"toInt136(int256)": "infinite",
								"toInt144(int256)": "infinite",
								"toInt152(int256)": "infinite",
								"toInt16(int256)": "infinite",
								"toInt160(int256)": "infinite",
								"toInt168(int256)": "infinite",
								"toInt176(int256)": "infinite",
								"toInt184(int256)": "infinite",
								"toInt192(int256)": "infinite",
								"toInt200(int256)": "infinite",
								"toInt208(int256)": "infinite",
								"toInt216(int256)": "infinite",
								"toInt224(int256)": "infinite",
								"toInt232(int256)": "infinite",
								"toInt24(int256)": "infinite",
								"toInt240(int256)": "infinite",
								"toInt248(int256)": "infinite",
								"toInt256(uint256)": "infinite",
								"toInt32(int256)": "infinite",
								"toInt40(int256)": "infinite",
								"toInt48(int256)": "infinite",
								"toInt56(int256)": "infinite",
								"toInt64(int256)": "infinite",
								"toInt72(int256)": "infinite",
								"toInt8(int256)": "infinite",
								"toInt80(int256)": "infinite",
								"toInt88(int256)": "infinite",
								"toInt96(int256)": "infinite",
								"toUint104(uint256)": "infinite",
								"toUint112(uint256)": "infinite",
								"toUint120(uint256)": "infinite",
								"toUint128(uint256)": "infinite",
								"toUint136(uint256)": "infinite",
								"toUint144(uint256)": "infinite",
								"toUint152(uint256)": "infinite",
								"toUint16(uint256)": "infinite",
								"toUint160(uint256)": "infinite",
								"toUint168(uint256)": "infinite",
								"toUint176(uint256)": "infinite",
								"toUint184(uint256)": "infinite",
								"toUint192(uint256)": "infinite",
								"toUint200(uint256)": "infinite",
								"toUint208(uint256)": "infinite",
								"toUint216(uint256)": "infinite",
								"toUint224(uint256)": "infinite",
								"toUint232(uint256)": "infinite",
								"toUint24(uint256)": "infinite",
								"toUint240(uint256)": "infinite",
								"toUint248(uint256)": "infinite",
								"toUint256(int256)": "infinite",
								"toUint32(uint256)": "infinite",
								"toUint40(uint256)": "infinite",
								"toUint48(uint256)": "infinite",
								"toUint56(uint256)": "infinite",
								"toUint64(uint256)": "infinite",
								"toUint72(uint256)": "infinite",
								"toUint8(uint256)": "infinite",
								"toUint80(uint256)": "infinite",
								"toUint88(uint256)": "infinite",
								"toUint96(uint256)": "infinite"
							}
						},
						"legacyAssembly": {
							".code": [
								{
									"begin": 842,
									"end": 35527,
									"name": "PUSH #[$]",
									"source": 5,
									"value": "0000000000000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 842,
									"end": 35527,
									"name": "PUSH [$]",
									"source": 5,
									"value": "0000000000000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 842,
									"end": 35527,
									"name": "PUSH",
									"source": 5,
									"value": "B"
								},
								{
									"begin": 842,
									"end": 35527,
									"name": "DUP3",
									"source": 5
								},
								{
									"begin": 842,
									"end": 35527,
									"name": "DUP3",
									"source": 5
								},
								{
									"begin": 842,
									"end": 35527,
									"name": "DUP3",
									"source": 5
								},
								{
									"begin": 842,
									"end": 35527,
									"name": "CODECOPY",
									"source": 5
								},
								{
									"begin": 842,
									"end": 35527,
									"name": "DUP1",
									"source": 5
								},
								{
									"begin": 842,
									"end": 35527,
									"name": "MLOAD",
									"source": 5
								},
								{
									"begin": 842,
									"end": 35527,
									"name": "PUSH",
									"source": 5,
									"value": "0"
								},
								{
									"begin": 842,
									"end": 35527,
									"name": "BYTE",
									"source": 5
								},
								{
									"begin": 842,
									"end": 35527,
									"name": "PUSH",
									"source": 5,
									"value": "73"
								},
								{
									"begin": 842,
									"end": 35527,
									"name": "EQ",
									"source": 5
								},
								{
									"begin": 842,
									"end": 35527,
									"name": "PUSH [tag]",
									"source": 5,
									"value": "1"
								},
								{
									"begin": 842,
									"end": 35527,
									"name": "JUMPI",
									"source": 5
								},
								{
									"begin": 842,
									"end": 35527,
									"name": "PUSH",
									"source": 5,
									"value": "4E487B7100000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 842,
									"end": 35527,
									"name": "PUSH",
									"source": 5,
									"value": "0"
								},
								{
									"begin": 842,
									"end": 35527,
									"name": "MSTORE",
									"source": 5
								},
								{
									"begin": 842,
									"end": 35527,
									"name": "PUSH",
									"source": 5,
									"value": "0"
								},
								{
									"begin": 842,
									"end": 35527,
									"name": "PUSH",
									"source": 5,
									"value": "4"
								},
								{
									"begin": 842,
									"end": 35527,
									"name": "MSTORE",
									"source": 5
								},
								{
									"begin": 842,
									"end": 35527,
									"name": "PUSH",
									"source": 5,
									"value": "24"
								},
								{
									"begin": 842,
									"end": 35527,
									"name": "PUSH",
									"source": 5,
									"value": "0"
								},
								{
									"begin": 842,
									"end": 35527,
									"name": "REVERT",
									"source": 5
								},
								{
									"begin": 842,
									"end": 35527,
									"name": "tag",
									"source": 5,
									"value": "1"
								},
								{
									"begin": 842,
									"end": 35527,
									"name": "JUMPDEST",
									"source": 5
								},
								{
									"begin": 842,
									"end": 35527,
									"name": "ADDRESS",
									"source": 5
								},
								{
									"begin": 842,
									"end": 35527,
									"name": "PUSH",
									"source": 5,
									"value": "0"
								},
								{
									"begin": 842,
									"end": 35527,
									"name": "MSTORE",
									"source": 5
								},
								{
									"begin": 842,
									"end": 35527,
									"name": "PUSH",
									"source": 5,
									"value": "73"
								},
								{
									"begin": 842,
									"end": 35527,
									"name": "DUP2",
									"source": 5
								},
								{
									"begin": 842,
									"end": 35527,
									"name": "MSTORE8",
									"source": 5
								},
								{
									"begin": 842,
									"end": 35527,
									"name": "DUP3",
									"source": 5
								},
								{
									"begin": 842,
									"end": 35527,
									"name": "DUP2",
									"source": 5
								},
								{
									"begin": 842,
									"end": 35527,
									"name": "RETURN",
									"source": 5
								}
							],
							".data": {
								"0": {
									".auxdata": "a2646970667358221220de42d83375a2053956daa00b50042049caf5dd886646fe4dbd0add076f144c1664736f6c63430008060033",
									".code": [
										{
											"begin": 842,
											"end": 35527,
											"name": "PUSHDEPLOYADDRESS",
											"source": 5
										},
										{
											"begin": 842,
											"end": 35527,
											"name": "ADDRESS",
											"source": 5
										},
										{
											"begin": 842,
											"end": 35527,
											"name": "EQ",
											"source": 5
										},
										{
											"begin": 842,
											"end": 35527,
											"name": "PUSH",
											"source": 5,
											"value": "80"
										},
										{
											"begin": 842,
											"end": 35527,
											"name": "PUSH",
											"source": 5,
											"value": "40"
										},
										{
											"begin": 842,
											"end": 35527,
											"name": "MSTORE",
											"source": 5
										},
										{
											"begin": 842,
											"end": 35527,
											"name": "PUSH",
											"source": 5,
											"value": "0"
										},
										{
											"begin": 842,
											"end": 35527,
											"name": "DUP1",
											"source": 5
										},
										{
											"begin": 842,
											"end": 35527,
											"name": "REVERT",
											"source": 5
										}
									]
								}
							}
						},
						"methodIdentifiers": {}
					},
					"metadata": "{\"compiler\":{\"version\":\"0.8.6+commit.11564f7e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Wrappers over Solidity's uintXX/intXX casting operators with added overflow checks. Downcasting from uint256/int256 in Solidity does not revert on overflow. This can easily result in undesired exploitation or bugs, since developers usually assume that overflows raise errors. `SafeCast` restores this intuition by reverting the transaction when such an operation overflows. Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always. Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing all math on `uint256` and `int256` and then downcasting.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/SafeCast.sol\":\"SafeCast\"},\"evmVersion\":\"berlin\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x02686c31ccb9ee77a299fa5f47327af5271f251a707a0e24f321957166ff0434\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cb562d8ae1da31249ca0d8553df9f89ef4c3c110a018c4449dde68ae30e51ec1\",\"dweb:/ipfs/QmUwxjtTUYB89ymeV46TZPmTsGnYrKNcgTHk7MQA1MG3hj\"]}},\"version\":1}",
					"storageLayout": {
						"storage": [],
						"types": null
					},
					"userdoc": {
						"kind": "user",
						"methods": {},
						"version": 1
					}
				}
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol": {
				"GaugeReward": {
					"abi": [
						{
							"inputs": [
								{
									"internalType": "contract IGaugeController",
									"name": "_gaugeController",
									"type": "address"
								},
								{
									"internalType": "address",
									"name": "_vault",
									"type": "address"
								},
								{
									"internalType": "address",
									"name": "_liquidator",
									"type": "address"
								},
								{
									"internalType": "uint32",
									"name": "_stakerCut",
									"type": "uint32"
								}
							],
							"stateMutability": "nonpayable",
							"type": "constructor"
						},
						{
							"anonymous": false,
							"inputs": [
								{
									"indexed": true,
									"internalType": "contract IGaugeController",
									"name": "gaugeController",
									"type": "address"
								},
								{
									"indexed": true,
									"internalType": "address",
									"name": "vault",
									"type": "address"
								},
								{
									"indexed": true,
									"internalType": "address",
									"name": "liquidator",
									"type": "address"
								},
								{
									"indexed": false,
									"internalType": "uint32",
									"name": "stakerCut",
									"type": "uint32"
								}
							],
							"name": "Deployed",
							"type": "event"
						},
						{
							"anonymous": false,
							"inputs": [
								{
									"indexed": true,
									"internalType": "address",
									"name": "gauge",
									"type": "address"
								},
								{
									"indexed": true,
									"internalType": "contract IERC20",
									"name": "token",
									"type": "address"
								},
								{
									"indexed": false,
									"internalType": "uint256",
									"name": "timestamp",
									"type": "uint256"
								}
							],
							"name": "RewardTokenPushed",
							"type": "event"
						},
						{
							"anonymous": false,
							"inputs": [
								{
									"indexed": true,
									"internalType": "address",
									"name": "gauge",
									"type": "address"
								},
								{
									"indexed": true,
									"internalType": "contract IERC20",
									"name": "token",
									"type": "address"
								},
								{
									"indexed": false,
									"internalType": "uint256",
									"name": "amount",
									"type": "uint256"
								},
								{
									"indexed": false,
									"internalType": "uint256",
									"name": "stakerRewards",
									"type": "uint256"
								},
								{
									"indexed": false,
									"internalType": "uint256",
									"name": "exchangeRate",
									"type": "uint256"
								}
							],
							"name": "RewardsAdded",
							"type": "event"
						},
						{
							"anonymous": false,
							"inputs": [
								{
									"indexed": true,
									"internalType": "address",
									"name": "gauge",
									"type": "address"
								},
								{
									"indexed": true,
									"internalType": "contract IERC20",
									"name": "token",
									"type": "address"
								},
								{
									"indexed": true,
									"internalType": "address",
									"name": "user",
									"type": "address"
								},
								{
									"indexed": false,
									"internalType": "uint256",
									"name": "amount",
									"type": "uint256"
								},
								{
									"indexed": false,
									"internalType": "uint256",
									"name": "exchangeRate",
									"type": "uint256"
								}
							],
							"name": "RewardsClaimed",
							"type": "event"
						},
						{
							"anonymous": false,
							"inputs": [
								{
									"indexed": true,
									"internalType": "address",
									"name": "caller",
									"type": "address"
								},
								{
									"indexed": true,
									"internalType": "address",
									"name": "user",
									"type": "address"
								},
								{
									"indexed": true,
									"internalType": "contract IERC20",
									"name": "token",
									"type": "address"
								},
								{
									"indexed": false,
									"internalType": "uint256",
									"name": "amount",
									"type": "uint256"
								}
							],
							"name": "RewardsRedeemed",
							"type": "event"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "_gauge",
									"type": "address"
								},
								{
									"internalType": "address",
									"name": "_user",
									"type": "address"
								},
								{
									"internalType": "uint256",
									"name": "_oldStakeBalance",
									"type": "uint256"
								}
							],
							"name": "afterDecreaseGauge",
							"outputs": [],
							"stateMutability": "nonpayable",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "_gauge",
									"type": "address"
								},
								{
									"internalType": "address",
									"name": "_user",
									"type": "address"
								},
								{
									"internalType": "uint256",
									"name": "_oldStakeBalance",
									"type": "uint256"
								}
							],
							"name": "afterIncreaseGauge",
							"outputs": [],
							"stateMutability": "nonpayable",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "contract IPrizePool",
									"name": "",
									"type": "address"
								},
								{
									"internalType": "contract ITicket",
									"name": "_ticket",
									"type": "address"
								},
								{
									"internalType": "uint256",
									"name": "",
									"type": "uint256"
								},
								{
									"internalType": "contract IERC20",
									"name": "_token",
									"type": "address"
								},
								{
									"internalType": "uint256",
									"name": "_tokenAmount",
									"type": "uint256"
								}
							],
							"name": "afterSwap",
							"outputs": [],
							"stateMutability": "nonpayable",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "_gauge",
									"type": "address"
								},
								{
									"components": [
										{
											"internalType": "contract IERC20",
											"name": "token",
											"type": "address"
										},
										{
											"internalType": "uint64",
											"name": "timestamp",
											"type": "uint64"
										}
									],
									"internalType": "struct GaugeReward.RewardToken",
									"name": "_rewardToken",
									"type": "tuple"
								},
								{
									"internalType": "address",
									"name": "_user",
									"type": "address"
								}
							],
							"name": "claim",
							"outputs": [],
							"stateMutability": "nonpayable",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "_gauge",
									"type": "address"
								},
								{
									"internalType": "address",
									"name": "_user",
									"type": "address"
								}
							],
							"name": "claimAll",
							"outputs": [],
							"stateMutability": "nonpayable",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "_gauge",
									"type": "address"
								}
							],
							"name": "currentRewardToken",
							"outputs": [
								{
									"components": [
										{
											"internalType": "contract IERC20",
											"name": "token",
											"type": "address"
										},
										{
											"internalType": "uint64",
											"name": "timestamp",
											"type": "uint64"
										}
									],
									"internalType": "struct GaugeReward.RewardToken",
									"name": "",
									"type": "tuple"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [],
							"name": "gaugeController",
							"outputs": [
								{
									"internalType": "contract IGaugeController",
									"name": "",
									"type": "address"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "",
									"type": "address"
								},
								{
									"internalType": "contract IERC20",
									"name": "",
									"type": "address"
								},
								{
									"internalType": "uint64",
									"name": "",
									"type": "uint64"
								}
							],
							"name": "gaugeRewardTokenExchangeRates",
							"outputs": [
								{
									"internalType": "uint256",
									"name": "",
									"type": "uint256"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "",
									"type": "address"
								},
								{
									"internalType": "uint256",
									"name": "",
									"type": "uint256"
								}
							],
							"name": "gaugeRewardTokens",
							"outputs": [
								{
									"internalType": "contract IERC20",
									"name": "token",
									"type": "address"
								},
								{
									"internalType": "uint64",
									"name": "timestamp",
									"type": "uint64"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "_gauge",
									"type": "address"
								},
								{
									"components": [
										{
											"internalType": "contract IERC20",
											"name": "token",
											"type": "address"
										},
										{
											"internalType": "uint64",
											"name": "timestamp",
											"type": "uint64"
										}
									],
									"internalType": "struct GaugeReward.RewardToken",
									"name": "_rewardToken",
									"type": "tuple"
								},
								{
									"internalType": "address",
									"name": "_user",
									"type": "address"
								}
							],
							"name": "getRewards",
							"outputs": [
								{
									"internalType": "uint256",
									"name": "",
									"type": "uint256"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [],
							"name": "liquidator",
							"outputs": [
								{
									"internalType": "address",
									"name": "",
									"type": "address"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "bytes[]",
									"name": "data",
									"type": "bytes[]"
								}
							],
							"name": "multicall",
							"outputs": [
								{
									"internalType": "bytes[]",
									"name": "results",
									"type": "bytes[]"
								}
							],
							"stateMutability": "nonpayable",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "_user",
									"type": "address"
								},
								{
									"internalType": "contract IERC20",
									"name": "_token",
									"type": "address"
								}
							],
							"name": "redeem",
							"outputs": [
								{
									"internalType": "uint256",
									"name": "",
									"type": "uint256"
								}
							],
							"stateMutability": "nonpayable",
							"type": "function"
						},
						{
							"inputs": [],
							"name": "stakerCut",
							"outputs": [
								{
									"internalType": "uint32",
									"name": "",
									"type": "uint32"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "",
									"type": "address"
								},
								{
									"internalType": "address",
									"name": "",
									"type": "address"
								},
								{
									"internalType": "contract IERC20",
									"name": "",
									"type": "address"
								},
								{
									"internalType": "uint64",
									"name": "",
									"type": "uint64"
								}
							],
							"name": "userGaugeRewardTokenExchangeRates",
							"outputs": [
								{
									"internalType": "uint256",
									"name": "",
									"type": "uint256"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "",
									"type": "address"
								},
								{
									"internalType": "address",
									"name": "",
									"type": "address"
								},
								{
									"internalType": "address",
									"name": "",
									"type": "address"
								}
							],
							"name": "userGaugeRewardTokenLastClaimedTimestamp",
							"outputs": [
								{
									"internalType": "uint256",
									"name": "",
									"type": "uint256"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "",
									"type": "address"
								},
								{
									"internalType": "contract IERC20",
									"name": "",
									"type": "address"
								}
							],
							"name": "userRewardTokenBalances",
							"outputs": [
								{
									"internalType": "uint256",
									"name": "",
									"type": "uint256"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [],
							"name": "vault",
							"outputs": [
								{
									"internalType": "address",
									"name": "",
									"type": "address"
								}
							],
							"stateMutability": "view",
							"type": "function"
						}
					],
					"devdoc": {
						"author": "PoolTogether Inc Team",
						"details": "This contract is only keeping track of the rewards. Reward tokens are actually stored in the TokenVault contract.",
						"events": {
							"Deployed(address,address,address,uint32)": {
								"params": {
									"gaugeController": "Address of the GaugeController",
									"liquidator": "Address of the Liquidator",
									"stakerCut": "Percentage of rewards that goes to stakers",
									"vault": "Address of the Vault"
								}
							},
							"RewardTokenPushed(address,address,uint256)": {
								"params": {
									"gauge": "Address of the gauge for which the reward token is added",
									"timestamp": "Timestamp at which the reward token was pushed",
									"token": "Address of the token being pushed"
								}
							},
							"RewardsAdded(address,address,uint256,uint256,uint256)": {
								"params": {
									"amount": "Amount of tokens sent to the vault",
									"exchangeRate": "New exchange rate for this `token` in this `gauge`",
									"gauge": "Address of the gauge for which tokens were added",
									"stakerRewards": "Amount of rewards allocated to stakers",
									"token": "Address of the token sent to the vault"
								}
							},
							"RewardsClaimed(address,address,address,uint256,uint256)": {
								"params": {
									"amount": "Total amount of rewards claimed",
									"exchangeRate": "Exchange rate at which the rewards were claimed",
									"gauge": "Address of the gauge for which the user claimed rewards",
									"token": "Address of the token for which the user claimed rewards",
									"user": "Address of the user for which the rewards were claimed"
								}
							},
							"RewardsRedeemed(address,address,address,uint256)": {
								"params": {
									"amount": "Total amount of rewards redeemed",
									"caller": "Address who called the redeem function",
									"token": "Address of the token for which the user redeemed rewards",
									"user": "Address of the user for which the rewards were redeemed"
								}
							}
						},
						"kind": "dev",
						"methods": {
							"afterDecreaseGauge(address,address,uint256)": {
								"params": {
									"gauge": "Address of the gauge to decrease stake for",
									"oldStakeBalance": "Old stake balance of the user",
									"user": "Address of the user to decrease stake for"
								}
							},
							"afterIncreaseGauge(address,address,uint256)": {
								"params": {
									"gauge": "Address of the gauge to increase stake for",
									"oldStakeBalance": "Old stake balance of the user",
									"user": "Address of the user to increase stake for"
								}
							},
							"afterSwap(address,address,uint256,address,uint256)": {
								"details": "Called by the liquidator contract anytime tokens are liquidated.Will push `token` to the `gaugeRewardTokens` mapping if different from the current one.",
								"params": {
									"_ticket": "Address of the tickets that were sold",
									"_token": "Address of the token that the tickets were sold for",
									"_tokenAmount": "Amount of tokens that the tickets were sold for"
								}
							},
							"claim(address,(address,uint64),address)": {
								"params": {
									"_gauge": "Address of the gauge to claim rewards for",
									"_rewardToken": "Reward token to claim rewards for",
									"_user": "Address of the user to claim rewards for"
								}
							},
							"claimAll(address,address)": {
								"params": {
									"_gauge": "Address of the gauge to claim rewards for",
									"_user": "Address of the user to claim rewards for"
								}
							},
							"constructor": {
								"params": {
									"_gaugeController": "Address of the GaugeController",
									"_liquidator": "Address of the Liquidator",
									"_stakerCut": "Percentage of rewards that goes to stakers",
									"_vault": "Address of the Vault"
								}
							},
							"currentRewardToken(address)": {
								"params": {
									"_gauge": "Address of the gauge to get current reward token for"
								},
								"returns": {
									"_0": "Current reward token for the given gauge"
								}
							},
							"getRewards(address,(address,uint64),address)": {
								"params": {
									"_gauge": "Address of the gauge to get rewards for",
									"_rewardToken": "Reward token to get rewards for",
									"_user": "Address of the user to get rewards for"
								},
								"returns": {
									"_0": "Amount of rewards for the given gauge and token"
								}
							},
							"multicall(bytes[])": {
								"details": "Receives and executes a batch of function calls on this contract."
							},
							"redeem(address,address)": {
								"details": "Rewards can be redeemed on behalf of a user.",
								"params": {
									"_token": "Address of the token to redeem rewards for",
									"_user": "Address of the user to redeem rewards for"
								},
								"returns": {
									"_0": "Amount of rewards redeemed"
								}
							}
						},
						"stateVariables": {
							"gaugeRewardTokenExchangeRates": {
								"details": "gauge => reward token address => reward token timestamp => exchange rate"
							},
							"gaugeRewardTokens": {
								"details": "gauge => reward tokens array"
							},
							"userGaugeRewardTokenExchangeRates": {
								"details": "user => gauge => reward token address => reward token timestamp => exchange rate"
							},
							"userGaugeRewardTokenLastClaimedTimestamp": {
								"details": "user => gauge => reward token address => timestamp"
							},
							"userRewardTokenBalances": {
								"details": "user => reward token address => balance"
							}
						},
						"title": "PoolTogether V4 GaugeReward",
						"version": 1
					},
					"evm": {
						"assembly": "    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":743:19463  contract GaugeReward is IGaugeReward, IPrizePoolLiquidatorListener, Multicall {... */\n  mstore(0x40, 0x80)\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":5767:6427  constructor(... */\n  callvalue\n  dup1\n  iszero\n  tag_1\n  jumpi\n  0x00\n  dup1\n  revert\ntag_1:\n  pop\n  mload(0x40)\n  sub(codesize, bytecodeSize)\n  dup1\n  bytecodeSize\n  dup4\n  codecopy\n  dup2\n  dup2\n  add\n  0x40\n  mstore\n  dup2\n  add\n  swap1\n  tag_2\n  swap2\n  swap1\n  tag_3\n  jump\t// in\ntag_2:\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":5963:5964  0 */\n  0x00\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":5926:5965  address(_gaugeController) != address(0) */\n  0xffffffffffffffffffffffffffffffffffffffff\n  and\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":5934:5950  _gaugeController */\n  dup5\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":5926:5965  address(_gaugeController) != address(0) */\n  0xffffffffffffffffffffffffffffffffffffffff\n  and\n  eq\n  iszero\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":5918:5997  require(address(_gaugeController) != address(0), \"GReward/GC-not-zero-address\") */\n  tag_6\n  jumpi\n  mload(0x40)\n  0x08c379a000000000000000000000000000000000000000000000000000000000\n  dup2\n  mstore\n  0x04\n  add\n  tag_7\n  swap1\n  tag_8\n  jump\t// in\ntag_7:\n  mload(0x40)\n  dup1\n  swap2\n  sub\n  swap1\n  revert\ntag_6:\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6033:6034  0 */\n  0x00\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6015:6035  _vault != address(0) */\n  0xffffffffffffffffffffffffffffffffffffffff\n  and\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6015:6021  _vault */\n  dup4\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6015:6035  _vault != address(0) */\n  0xffffffffffffffffffffffffffffffffffffffff\n  and\n  eq\n  iszero\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6007:6070  require(_vault != address(0), \"GReward/Vault-not-zero-address\") */\n  tag_9\n  jumpi\n  mload(0x40)\n  0x08c379a000000000000000000000000000000000000000000000000000000000\n  dup2\n  mstore\n  0x04\n  add\n  tag_10\n  swap1\n  tag_11\n  jump\t// in\ntag_10:\n  mload(0x40)\n  dup1\n  swap2\n  sub\n  swap1\n  revert\ntag_9:\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6111:6112  0 */\n  0x00\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6088:6113  _liquidator != address(0) */\n  0xffffffffffffffffffffffffffffffffffffffff\n  and\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6088:6099  _liquidator */\n  dup3\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6088:6113  _liquidator != address(0) */\n  0xffffffffffffffffffffffffffffffffffffffff\n  and\n  eq\n  iszero\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6080:6146  require(_liquidator != address(0), \"GReward/Liq-not-zero-address\") */\n  tag_12\n  jumpi\n  mload(0x40)\n  0x08c379a000000000000000000000000000000000000000000000000000000000\n  dup2\n  mstore\n  0x04\n  add\n  tag_13\n  swap1\n  tag_14\n  jump\t// in\ntag_13:\n  mload(0x40)\n  dup1\n  swap2\n  sub\n  swap1\n  revert\ntag_12:\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6177:6180  1e9 */\n  0x3b9aca00\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6164:6174  _stakerCut */\n  dup2\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6164:6180  _stakerCut < 1e9 */\n  0xffffffff\n  and\n  lt\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6156:6210  require(_stakerCut < 1e9, \"GReward/staker-cut-lt-1e9\") */\n  tag_15\n  jumpi\n  mload(0x40)\n  0x08c379a000000000000000000000000000000000000000000000000000000000\n  dup2\n  mstore\n  0x04\n  add\n  tag_16\n  swap1\n  tag_17\n  jump\t// in\ntag_16:\n  mload(0x40)\n  dup1\n  swap2\n  sub\n  swap1\n  revert\ntag_15:\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6239:6255  _gaugeController */\n  dup4\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6221:6236  gaugeController */\n  0x05\n  0x00\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6221:6255  gaugeController = _gaugeController */\n  0x0100\n  exp\n  dup2\n  sload\n  dup2\n  0xffffffffffffffffffffffffffffffffffffffff\n  mul\n  not\n  and\n  swap1\n  dup4\n  0xffffffffffffffffffffffffffffffffffffffff\n  and\n  mul\n  or\n  swap1\n  sstore\n  pop\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6273:6279  _vault */\n  dup3\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6265:6270  vault */\n  0x06\n  0x00\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6265:6279  vault = _vault */\n  0x0100\n  exp\n  dup2\n  sload\n  dup2\n  0xffffffffffffffffffffffffffffffffffffffff\n  mul\n  not\n  and\n  swap1\n  dup4\n  0xffffffffffffffffffffffffffffffffffffffff\n  and\n  mul\n  or\n  swap1\n  sstore\n  pop\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6301:6311  _stakerCut */\n  dup1\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6289:6298  stakerCut */\n  0x07\n  0x14\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6289:6311  stakerCut = _stakerCut */\n  0x0100\n  exp\n  dup2\n  sload\n  dup2\n  0xffffffff\n  mul\n  not\n  and\n  swap1\n  dup4\n  0xffffffff\n  and\n  mul\n  or\n  swap1\n  sstore\n  pop\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6334:6345  _liquidator */\n  dup2\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6321:6331  liquidator */\n  0x07\n  0x00\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6321:6345  liquidator = _liquidator */\n  0x0100\n  exp\n  dup2\n  sload\n  dup2\n  0xffffffffffffffffffffffffffffffffffffffff\n  mul\n  not\n  and\n  swap1\n  dup4\n  0xffffffffffffffffffffffffffffffffffffffff\n  and\n  mul\n  or\n  swap1\n  sstore\n  pop\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6396:6407  _liquidator */\n  dup2\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6361:6420  Deployed(_gaugeController, _vault, _liquidator, _stakerCut) */\n  0xffffffffffffffffffffffffffffffffffffffff\n  and\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6388:6394  _vault */\n  dup4\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6361:6420  Deployed(_gaugeController, _vault, _liquidator, _stakerCut) */\n  0xffffffffffffffffffffffffffffffffffffffff\n  and\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6370:6386  _gaugeController */\n  dup6\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6361:6420  Deployed(_gaugeController, _vault, _liquidator, _stakerCut) */\n  0xffffffffffffffffffffffffffffffffffffffff\n  and\n  0x048ccaf1264df58374a01de5614345aa417e2d16af0f2e86b97729dc752e253f\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6409:6419  _stakerCut */\n  dup5\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6361:6420  Deployed(_gaugeController, _vault, _liquidator, _stakerCut) */\n  mload(0x40)\n  tag_18\n  swap2\n  swap1\n  tag_19\n  jump\t// in\ntag_18:\n  mload(0x40)\n  dup1\n  swap2\n  sub\n  swap1\n  log4\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":5767:6427  constructor(... */\n  pop\n  pop\n  pop\n  pop\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":743:19463  contract GaugeReward is IGaugeReward, IPrizePoolLiquidatorListener, Multicall {... */\n  jump(tag_20)\n    /* \"#utility.yul\":7:150   */\ntag_22:\n    /* \"#utility.yul\":64:69   */\n  0x00\n    /* \"#utility.yul\":95:101   */\n  dup2\n    /* \"#utility.yul\":89:102   */\n  mload\n    /* \"#utility.yul\":80:102   */\n  swap1\n  pop\n    /* \"#utility.yul\":111:144   */\n  tag_24\n    /* \"#utility.yul\":138:143   */\n  dup2\n    /* \"#utility.yul\":111:144   */\n  tag_25\n  jump\t// in\ntag_24:\n    /* \"#utility.yul\":70:150   */\n  swap3\n  swap2\n  pop\n  pop\n  jump\t// out\n    /* \"#utility.yul\":156:349   */\ntag_26:\n    /* \"#utility.yul\":238:243   */\n  0x00\n    /* \"#utility.yul\":269:275   */\n  dup2\n    /* \"#utility.yul\":263:276   */\n  mload\n    /* \"#utility.yul\":254:276   */\n  swap1\n  pop\n    /* \"#utility.yul\":285:343   */\n  tag_28\n    /* \"#utility.yul\":337:342   */\n  dup2\n    /* \"#utility.yul\":285:343   */\n  tag_29\n  jump\t// in\ntag_28:\n    /* \"#utility.yul\":244:349   */\n  swap3\n  swap2\n  pop\n  pop\n  jump\t// out\n    /* \"#utility.yul\":355:496   */\ntag_30:\n    /* \"#utility.yul\":411:416   */\n  0x00\n    /* \"#utility.yul\":442:448   */\n  dup2\n    /* \"#utility.yul\":436:449   */\n  mload\n    /* \"#utility.yul\":427:449   */\n  swap1\n  pop\n    /* \"#utility.yul\":458:490   */\n  tag_32\n    /* \"#utility.yul\":484:489   */\n  dup2\n    /* \"#utility.yul\":458:490   */\n  tag_33\n  jump\t// in\ntag_32:\n    /* \"#utility.yul\":417:496   */\n  swap3\n  swap2\n  pop\n  pop\n  jump\t// out\n    /* \"#utility.yul\":502:1370   */\ntag_3:\n    /* \"#utility.yul\":623:629   */\n  0x00\n    /* \"#utility.yul\":631:637   */\n  dup1\n    /* \"#utility.yul\":639:645   */\n  0x00\n    /* \"#utility.yul\":647:653   */\n  dup1\n    /* \"#utility.yul\":696:699   */\n  0x80\n    /* \"#utility.yul\":684:693   */\n  dup6\n    /* \"#utility.yul\":675:682   */\n  dup8\n    /* \"#utility.yul\":671:694   */\n  sub\n    /* \"#utility.yul\":667:700   */\n  slt\n    /* \"#utility.yul\":664:666   */\n  iszero\n  tag_35\n  jumpi\n    /* \"#utility.yul\":703:782   */\n  tag_36\n  tag_37\n  jump\t// in\ntag_36:\n    /* \"#utility.yul\":664:666   */\ntag_35:\n    /* \"#utility.yul\":823:824   */\n  0x00\n    /* \"#utility.yul\":848:937   */\n  tag_38\n    /* \"#utility.yul\":929:936   */\n  dup8\n    /* \"#utility.yul\":920:926   */\n  dup3\n    /* \"#utility.yul\":909:918   */\n  dup9\n    /* \"#utility.yul\":905:927   */\n  add\n    /* \"#utility.yul\":848:937   */\n  tag_26\n  jump\t// in\ntag_38:\n    /* \"#utility.yul\":838:937   */\n  swap5\n  pop\n    /* \"#utility.yul\":794:947   */\n  pop\n    /* \"#utility.yul\":986:988   */\n  0x20\n    /* \"#utility.yul\":1012:1076   */\n  tag_39\n    /* \"#utility.yul\":1068:1075   */\n  dup8\n    /* \"#utility.yul\":1059:1065   */\n  dup3\n    /* \"#utility.yul\":1048:1057   */\n  dup9\n    /* \"#utility.yul\":1044:1066   */\n  add\n    /* \"#utility.yul\":1012:1076   */\n  tag_22\n  jump\t// in\ntag_39:\n    /* \"#utility.yul\":1002:1076   */\n  swap4\n  pop\n    /* \"#utility.yul\":957:1086   */\n  pop\n    /* \"#utility.yul\":1125:1127   */\n  0x40\n    /* \"#utility.yul\":1151:1215   */\n  tag_40\n    /* \"#utility.yul\":1207:1214   */\n  dup8\n    /* \"#utility.yul\":1198:1204   */\n  dup3\n    /* \"#utility.yul\":1187:1196   */\n  dup9\n    /* \"#utility.yul\":1183:1205   */\n  add\n    /* \"#utility.yul\":1151:1215   */\n  tag_22\n  jump\t// in\ntag_40:\n    /* \"#utility.yul\":1141:1215   */\n  swap3\n  pop\n    /* \"#utility.yul\":1096:1225   */\n  pop\n    /* \"#utility.yul\":1264:1266   */\n  0x60\n    /* \"#utility.yul\":1290:1353   */\n  tag_41\n    /* \"#utility.yul\":1345:1352   */\n  dup8\n    /* \"#utility.yul\":1336:1342   */\n  dup3\n    /* \"#utility.yul\":1325:1334   */\n  dup9\n    /* \"#utility.yul\":1321:1343   */\n  add\n    /* \"#utility.yul\":1290:1353   */\n  tag_30\n  jump\t// in\ntag_41:\n    /* \"#utility.yul\":1280:1353   */\n  swap2\n  pop\n    /* \"#utility.yul\":1235:1363   */\n  pop\n    /* \"#utility.yul\":654:1370   */\n  swap3\n  swap6\n  swap2\n  swap5\n  pop\n  swap3\n  pop\n  jump\t// out\n    /* \"#utility.yul\":1376:1742   */\ntag_42:\n    /* \"#utility.yul\":1518:1521   */\n  0x00\n    /* \"#utility.yul\":1539:1606   */\n  tag_44\n    /* \"#utility.yul\":1603:1605   */\n  0x19\n    /* \"#utility.yul\":1598:1601   */\n  dup4\n    /* \"#utility.yul\":1539:1606   */\n  tag_45\n  jump\t// in\ntag_44:\n    /* \"#utility.yul\":1532:1606   */\n  swap2\n  pop\n    /* \"#utility.yul\":1615:1708   */\n  tag_46\n    /* \"#utility.yul\":1704:1707   */\n  dup3\n    /* \"#utility.yul\":1615:1708   */\n  tag_47\n  jump\t// in\ntag_46:\n    /* \"#utility.yul\":1733:1735   */\n  0x20\n    /* \"#utility.yul\":1728:1731   */\n  dup3\n    /* \"#utility.yul\":1724:1736   */\n  add\n    /* \"#utility.yul\":1717:1736   */\n  swap1\n  pop\n    /* \"#utility.yul\":1522:1742   */\n  swap2\n  swap1\n  pop\n  jump\t// out\n    /* \"#utility.yul\":1748:2114   */\ntag_48:\n    /* \"#utility.yul\":1890:1893   */\n  0x00\n    /* \"#utility.yul\":1911:1978   */\n  tag_50\n    /* \"#utility.yul\":1975:1977   */\n  0x1e\n    /* \"#utility.yul\":1970:1973   */\n  dup4\n    /* \"#utility.yul\":1911:1978   */\n  tag_45\n  jump\t// in\ntag_50:\n    /* \"#utility.yul\":1904:1978   */\n  swap2\n  pop\n    /* \"#utility.yul\":1987:2080   */\n  tag_51\n    /* \"#utility.yul\":2076:2079   */\n  dup3\n    /* \"#utility.yul\":1987:2080   */\n  tag_52\n  jump\t// in\ntag_51:\n    /* \"#utility.yul\":2105:2107   */\n  0x20\n    /* \"#utility.yul\":2100:2103   */\n  dup3\n    /* \"#utility.yul\":2096:2108   */\n  add\n    /* \"#utility.yul\":2089:2108   */\n  swap1\n  pop\n    /* \"#utility.yul\":1894:2114   */\n  swap2\n  swap1\n  pop\n  jump\t// out\n    /* \"#utility.yul\":2120:2486   */\ntag_53:\n    /* \"#utility.yul\":2262:2265   */\n  0x00\n    /* \"#utility.yul\":2283:2350   */\n  tag_55\n    /* \"#utility.yul\":2347:2349   */\n  0x1c\n    /* \"#utility.yul\":2342:2345   */\n  dup4\n    /* \"#utility.yul\":2283:2350   */\n  tag_45\n  jump\t// in\ntag_55:\n    /* \"#utility.yul\":2276:2350   */\n  swap2\n  pop\n    /* \"#utility.yul\":2359:2452   */\n  tag_56\n    /* \"#utility.yul\":2448:2451   */\n  dup3\n    /* \"#utility.yul\":2359:2452   */\n  tag_57\n  jump\t// in\ntag_56:\n    /* \"#utility.yul\":2477:2479   */\n  0x20\n    /* \"#utility.yul\":2472:2475   */\n  dup3\n    /* \"#utility.yul\":2468:2480   */\n  add\n    /* \"#utility.yul\":2461:2480   */\n  swap1\n  pop\n    /* \"#utility.yul\":2266:2486   */\n  swap2\n  swap1\n  pop\n  jump\t// out\n    /* \"#utility.yul\":2492:2858   */\ntag_58:\n    /* \"#utility.yul\":2634:2637   */\n  0x00\n    /* \"#utility.yul\":2655:2722   */\n  tag_60\n    /* \"#utility.yul\":2719:2721   */\n  0x1b\n    /* \"#utility.yul\":2714:2717   */\n  dup4\n    /* \"#utility.yul\":2655:2722   */\n  tag_45\n  jump\t// in\ntag_60:\n    /* \"#utility.yul\":2648:2722   */\n  swap2\n  pop\n    /* \"#utility.yul\":2731:2824   */\n  tag_61\n    /* \"#utility.yul\":2820:2823   */\n  dup3\n    /* \"#utility.yul\":2731:2824   */\n  tag_62\n  jump\t// in\ntag_61:\n    /* \"#utility.yul\":2849:2851   */\n  0x20\n    /* \"#utility.yul\":2844:2847   */\n  dup3\n    /* \"#utility.yul\":2840:2852   */\n  add\n    /* \"#utility.yul\":2833:2852   */\n  swap1\n  pop\n    /* \"#utility.yul\":2638:2858   */\n  swap2\n  swap1\n  pop\n  jump\t// out\n    /* \"#utility.yul\":2864:2979   */\ntag_63:\n    /* \"#utility.yul\":2949:2972   */\n  tag_65\n    /* \"#utility.yul\":2966:2971   */\n  dup2\n    /* \"#utility.yul\":2949:2972   */\n  tag_66\n  jump\t// in\ntag_65:\n    /* \"#utility.yul\":2944:2947   */\n  dup3\n    /* \"#utility.yul\":2937:2973   */\n  mstore\n    /* \"#utility.yul\":2927:2979   */\n  pop\n  pop\n  jump\t// out\n    /* \"#utility.yul\":2985:3404   */\ntag_17:\n    /* \"#utility.yul\":3151:3155   */\n  0x00\n    /* \"#utility.yul\":3189:3191   */\n  0x20\n    /* \"#utility.yul\":3178:3187   */\n  dup3\n    /* \"#utility.yul\":3174:3192   */\n  add\n    /* \"#utility.yul\":3166:3192   */\n  swap1\n  pop\n    /* \"#utility.yul\":3238:3247   */\n  dup2\n    /* \"#utility.yul\":3232:3236   */\n  dup2\n    /* \"#utility.yul\":3228:3248   */\n  sub\n    /* \"#utility.yul\":3224:3225   */\n  0x00\n    /* \"#utility.yul\":3213:3222   */\n  dup4\n    /* \"#utility.yul\":3209:3226   */\n  add\n    /* \"#utility.yul\":3202:3249   */\n  mstore\n    /* \"#utility.yul\":3266:3397   */\n  tag_68\n    /* \"#utility.yul\":3392:3396   */\n  dup2\n    /* \"#utility.yul\":3266:3397   */\n  tag_42\n  jump\t// in\ntag_68:\n    /* \"#utility.yul\":3258:3397   */\n  swap1\n  pop\n    /* \"#utility.yul\":3156:3404   */\n  swap2\n  swap1\n  pop\n  jump\t// out\n    /* \"#utility.yul\":3410:3829   */\ntag_11:\n    /* \"#utility.yul\":3576:3580   */\n  0x00\n    /* \"#utility.yul\":3614:3616   */\n  0x20\n    /* \"#utility.yul\":3603:3612   */\n  dup3\n    /* \"#utility.yul\":3599:3617   */\n  add\n    /* \"#utility.yul\":3591:3617   */\n  swap1\n  pop\n    /* \"#utility.yul\":3663:3672   */\n  dup2\n    /* \"#utility.yul\":3657:3661   */\n  dup2\n    /* \"#utility.yul\":3653:3673   */\n  sub\n    /* \"#utility.yul\":3649:3650   */\n  0x00\n    /* \"#utility.yul\":3638:3647   */\n  dup4\n    /* \"#utility.yul\":3634:3651   */\n  add\n    /* \"#utility.yul\":3627:3674   */\n  mstore\n    /* \"#utility.yul\":3691:3822   */\n  tag_70\n    /* \"#utility.yul\":3817:3821   */\n  dup2\n    /* \"#utility.yul\":3691:3822   */\n  tag_48\n  jump\t// in\ntag_70:\n    /* \"#utility.yul\":3683:3822   */\n  swap1\n  pop\n    /* \"#utility.yul\":3581:3829   */\n  swap2\n  swap1\n  pop\n  jump\t// out\n    /* \"#utility.yul\":3835:4254   */\ntag_14:\n    /* \"#utility.yul\":4001:4005   */\n  0x00\n    /* \"#utility.yul\":4039:4041   */\n  0x20\n    /* \"#utility.yul\":4028:4037   */\n  dup3\n    /* \"#utility.yul\":4024:4042   */\n  add\n    /* \"#utility.yul\":4016:4042   */\n  swap1\n  pop\n    /* \"#utility.yul\":4088:4097   */\n  dup2\n    /* \"#utility.yul\":4082:4086   */\n  dup2\n    /* \"#utility.yul\":4078:4098   */\n  sub\n    /* \"#utility.yul\":4074:4075   */\n  0x00\n    /* \"#utility.yul\":4063:4072   */\n  dup4\n    /* \"#utility.yul\":4059:4076   */\n  add\n    /* \"#utility.yul\":4052:4099   */\n  mstore\n    /* \"#utility.yul\":4116:4247   */\n  tag_72\n    /* \"#utility.yul\":4242:4246   */\n  dup2\n    /* \"#utility.yul\":4116:4247   */\n  tag_53\n  jump\t// in\ntag_72:\n    /* \"#utility.yul\":4108:4247   */\n  swap1\n  pop\n    /* \"#utility.yul\":4006:4254   */\n  swap2\n  swap1\n  pop\n  jump\t// out\n    /* \"#utility.yul\":4260:4679   */\ntag_8:\n    /* \"#utility.yul\":4426:4430   */\n  0x00\n    /* \"#utility.yul\":4464:4466   */\n  0x20\n    /* \"#utility.yul\":4453:4462   */\n  dup3\n    /* \"#utility.yul\":4449:4467   */\n  add\n    /* \"#utility.yul\":4441:4467   */\n  swap1\n  pop\n    /* \"#utility.yul\":4513:4522   */\n  dup2\n    /* \"#utility.yul\":4507:4511   */\n  dup2\n    /* \"#utility.yul\":4503:4523   */\n  sub\n    /* \"#utility.yul\":4499:4500   */\n  0x00\n    /* \"#utility.yul\":4488:4497   */\n  dup4\n    /* \"#utility.yul\":4484:4501   */\n  add\n    /* \"#utility.yul\":4477:4524   */\n  mstore\n    /* \"#utility.yul\":4541:4672   */\n  tag_74\n    /* \"#utility.yul\":4667:4671   */\n  dup2\n    /* \"#utility.yul\":4541:4672   */\n  tag_58\n  jump\t// in\ntag_74:\n    /* \"#utility.yul\":4533:4672   */\n  swap1\n  pop\n    /* \"#utility.yul\":4431:4679   */\n  swap2\n  swap1\n  pop\n  jump\t// out\n    /* \"#utility.yul\":4685:4903   */\ntag_19:\n    /* \"#utility.yul\":4776:4780   */\n  0x00\n    /* \"#utility.yul\":4814:4816   */\n  0x20\n    /* \"#utility.yul\":4803:4812   */\n  dup3\n    /* \"#utility.yul\":4799:4817   */\n  add\n    /* \"#utility.yul\":4791:4817   */\n  swap1\n  pop\n    /* \"#utility.yul\":4827:4896   */\n  tag_76\n    /* \"#utility.yul\":4893:4894   */\n  0x00\n    /* \"#utility.yul\":4882:4891   */\n  dup4\n    /* \"#utility.yul\":4878:4895   */\n  add\n    /* \"#utility.yul\":4869:4875   */\n  dup5\n    /* \"#utility.yul\":4827:4896   */\n  tag_63\n  jump\t// in\ntag_76:\n    /* \"#utility.yul\":4781:4903   */\n  swap3\n  swap2\n  pop\n  pop\n  jump\t// out\n    /* \"#utility.yul\":4990:5159   */\ntag_45:\n    /* \"#utility.yul\":5074:5085   */\n  0x00\n    /* \"#utility.yul\":5108:5114   */\n  dup3\n    /* \"#utility.yul\":5103:5106   */\n  dup3\n    /* \"#utility.yul\":5096:5115   */\n  mstore\n    /* \"#utility.yul\":5148:5152   */\n  0x20\n    /* \"#utility.yul\":5143:5146   */\n  dup3\n    /* \"#utility.yul\":5139:5153   */\n  add\n    /* \"#utility.yul\":5124:5153   */\n  swap1\n  pop\n    /* \"#utility.yul\":5086:5159   */\n  swap3\n  swap2\n  pop\n  pop\n  jump\t// out\n    /* \"#utility.yul\":5165:5261   */\ntag_80:\n    /* \"#utility.yul\":5202:5209   */\n  0x00\n    /* \"#utility.yul\":5231:5255   */\n  tag_82\n    /* \"#utility.yul\":5249:5254   */\n  dup3\n    /* \"#utility.yul\":5231:5255   */\n  tag_83\n  jump\t// in\ntag_82:\n    /* \"#utility.yul\":5220:5255   */\n  swap1\n  pop\n    /* \"#utility.yul\":5210:5261   */\n  swap2\n  swap1\n  pop\n  jump\t// out\n    /* \"#utility.yul\":5267:5388   */\ntag_84:\n    /* \"#utility.yul\":5329:5336   */\n  0x00\n    /* \"#utility.yul\":5358:5382   */\n  tag_86\n    /* \"#utility.yul\":5376:5381   */\n  dup3\n    /* \"#utility.yul\":5358:5382   */\n  tag_80\n  jump\t// in\ntag_86:\n    /* \"#utility.yul\":5347:5382   */\n  swap1\n  pop\n    /* \"#utility.yul\":5337:5388   */\n  swap2\n  swap1\n  pop\n  jump\t// out\n    /* \"#utility.yul\":5394:5520   */\ntag_83:\n    /* \"#utility.yul\":5431:5438   */\n  0x00\n    /* \"#utility.yul\":5471:5513   */\n  0xffffffffffffffffffffffffffffffffffffffff\n    /* \"#utility.yul\":5464:5469   */\n  dup3\n    /* \"#utility.yul\":5460:5514   */\n  and\n    /* \"#utility.yul\":5449:5514   */\n  swap1\n  pop\n    /* \"#utility.yul\":5439:5520   */\n  swap2\n  swap1\n  pop\n  jump\t// out\n    /* \"#utility.yul\":5526:5619   */\ntag_66:\n    /* \"#utility.yul\":5562:5569   */\n  0x00\n    /* \"#utility.yul\":5602:5612   */\n  0xffffffff\n    /* \"#utility.yul\":5595:5600   */\n  dup3\n    /* \"#utility.yul\":5591:5613   */\n  and\n    /* \"#utility.yul\":5580:5613   */\n  swap1\n  pop\n    /* \"#utility.yul\":5570:5619   */\n  swap2\n  swap1\n  pop\n  jump\t// out\n    /* \"#utility.yul\":5748:5865   */\ntag_37:\n    /* \"#utility.yul\":5857:5858   */\n  0x00\n    /* \"#utility.yul\":5854:5855   */\n  dup1\n    /* \"#utility.yul\":5847:5859   */\n  revert\n    /* \"#utility.yul\":5871:6046   */\ntag_47:\n    /* \"#utility.yul\":6011:6038   */\n  0x475265776172642f7374616b65722d6375742d6c742d31653900000000000000\n    /* \"#utility.yul\":6007:6008   */\n  0x00\n    /* \"#utility.yul\":5999:6005   */\n  dup3\n    /* \"#utility.yul\":5995:6009   */\n  add\n    /* \"#utility.yul\":5988:6039   */\n  mstore\n    /* \"#utility.yul\":5977:6046   */\n  pop\n  jump\t// out\n    /* \"#utility.yul\":6052:6232   */\ntag_52:\n    /* \"#utility.yul\":6192:6224   */\n  0x475265776172642f5661756c742d6e6f742d7a65726f2d616464726573730000\n    /* \"#utility.yul\":6188:6189   */\n  0x00\n    /* \"#utility.yul\":6180:6186   */\n  dup3\n    /* \"#utility.yul\":6176:6190   */\n  add\n    /* \"#utility.yul\":6169:6225   */\n  mstore\n    /* \"#utility.yul\":6158:6232   */\n  pop\n  jump\t// out\n    /* \"#utility.yul\":6238:6416   */\ntag_57:\n    /* \"#utility.yul\":6378:6408   */\n  0x475265776172642f4c69712d6e6f742d7a65726f2d6164647265737300000000\n    /* \"#utility.yul\":6374:6375   */\n  0x00\n    /* \"#utility.yul\":6366:6372   */\n  dup3\n    /* \"#utility.yul\":6362:6376   */\n  add\n    /* \"#utility.yul\":6355:6409   */\n  mstore\n    /* \"#utility.yul\":6344:6416   */\n  pop\n  jump\t// out\n    /* \"#utility.yul\":6422:6599   */\ntag_62:\n    /* \"#utility.yul\":6562:6591   */\n  0x475265776172642f47432d6e6f742d7a65726f2d616464726573730000000000\n    /* \"#utility.yul\":6558:6559   */\n  0x00\n    /* \"#utility.yul\":6550:6556   */\n  dup3\n    /* \"#utility.yul\":6546:6560   */\n  add\n    /* \"#utility.yul\":6539:6592   */\n  mstore\n    /* \"#utility.yul\":6528:6599   */\n  pop\n  jump\t// out\n    /* \"#utility.yul\":6605:6727   */\ntag_25:\n    /* \"#utility.yul\":6678:6702   */\n  tag_97\n    /* \"#utility.yul\":6696:6701   */\n  dup2\n    /* \"#utility.yul\":6678:6702   */\n  tag_80\n  jump\t// in\ntag_97:\n    /* \"#utility.yul\":6671:6676   */\n  dup2\n    /* \"#utility.yul\":6668:6703   */\n  eq\n    /* \"#utility.yul\":6658:6660   */\n  tag_98\n  jumpi\n    /* \"#utility.yul\":6717:6718   */\n  0x00\n    /* \"#utility.yul\":6714:6715   */\n  dup1\n    /* \"#utility.yul\":6707:6719   */\n  revert\n    /* \"#utility.yul\":6658:6660   */\ntag_98:\n    /* \"#utility.yul\":6648:6727   */\n  pop\n  jump\t// out\n    /* \"#utility.yul\":6733:6905   */\ntag_29:\n    /* \"#utility.yul\":6831:6880   */\n  tag_100\n    /* \"#utility.yul\":6874:6879   */\n  dup2\n    /* \"#utility.yul\":6831:6880   */\n  tag_84\n  jump\t// in\ntag_100:\n    /* \"#utility.yul\":6824:6829   */\n  dup2\n    /* \"#utility.yul\":6821:6881   */\n  eq\n    /* \"#utility.yul\":6811:6813   */\n  tag_101\n  jumpi\n    /* \"#utility.yul\":6895:6896   */\n  0x00\n    /* \"#utility.yul\":6892:6893   */\n  dup1\n    /* \"#utility.yul\":6885:6897   */\n  revert\n    /* \"#utility.yul\":6811:6813   */\ntag_101:\n    /* \"#utility.yul\":6801:6905   */\n  pop\n  jump\t// out\n    /* \"#utility.yul\":6911:7031   */\ntag_33:\n    /* \"#utility.yul\":6983:7006   */\n  tag_103\n    /* \"#utility.yul\":7000:7005   */\n  dup2\n    /* \"#utility.yul\":6983:7006   */\n  tag_66\n  jump\t// in\ntag_103:\n    /* \"#utility.yul\":6976:6981   */\n  dup2\n    /* \"#utility.yul\":6973:7007   */\n  eq\n    /* \"#utility.yul\":6963:6965   */\n  tag_104\n  jumpi\n    /* \"#utility.yul\":7021:7022   */\n  0x00\n    /* \"#utility.yul\":7018:7019   */\n  dup1\n    /* \"#utility.yul\":7011:7023   */\n  revert\n    /* \"#utility.yul\":6963:6965   */\ntag_104:\n    /* \"#utility.yul\":6953:7031   */\n  pop\n  jump\t// out\n    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":743:19463  contract GaugeReward is IGaugeReward, IPrizePoolLiquidatorListener, Multicall {... */\ntag_20:\n  dataSize(sub_0)\n  dup1\n  dataOffset(sub_0)\n  0x00\n  codecopy\n  0x00\n  return\nstop\n\nsub_0: assembly {\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":743:19463  contract GaugeReward is IGaugeReward, IPrizePoolLiquidatorListener, Multicall {... */\n      mstore(0x40, 0x80)\n      callvalue\n      dup1\n      iszero\n      tag_1\n      jumpi\n      0x00\n      dup1\n      revert\n    tag_1:\n      pop\n      jumpi(tag_2, lt(calldatasize, 0x04))\n      shr(0xe0, calldataload(0x00))\n      dup1\n      0xac9650d8\n      gt\n      tag_21\n      jumpi\n      dup1\n      0xf00b1997\n      gt\n      tag_22\n      jumpi\n      dup1\n      0xf00b1997\n      eq\n      tag_16\n      jumpi\n      dup1\n      0xf1883e5d\n      eq\n      tag_17\n      jumpi\n      dup1\n      0xf741e08f\n      eq\n      tag_18\n      jumpi\n      dup1\n      0xfbfa77cf\n      eq\n      tag_19\n      jumpi\n      dup1\n      0xfd401628\n      eq\n      tag_20\n      jumpi\n      jump(tag_2)\n    tag_22:\n      dup1\n      0xac9650d8\n      eq\n      tag_12\n      jumpi\n      dup1\n      0xac9fb71d\n      eq\n      tag_13\n      jumpi\n      dup1\n      0xbba06f27\n      eq\n      tag_14\n      jumpi\n      dup1\n      0xe5f744b8\n      eq\n      tag_15\n      jumpi\n      jump(tag_2)\n    tag_21:\n      dup1\n      0x5902fc3b\n      gt\n      tag_23\n      jumpi\n      dup1\n      0x5902fc3b\n      eq\n      tag_7\n      jumpi\n      dup1\n      0x6e8fc2d3\n      eq\n      tag_8\n      jumpi\n      dup1\n      0x81d7af2e\n      eq\n      tag_9\n      jumpi\n      dup1\n      0x95cebcd4\n      eq\n      tag_10\n      jumpi\n      dup1\n      0x99eecb3b\n      eq\n      tag_11\n      jumpi\n      jump(tag_2)\n    tag_23:\n      dup1\n      0x06302ef1\n      eq\n      tag_3\n      jumpi\n      dup1\n      0x31661930\n      eq\n      tag_4\n      jumpi\n      dup1\n      0x4046ebae\n      eq\n      tag_5\n      jumpi\n      dup1\n      0x5767bba5\n      eq\n      tag_6\n      jumpi\n    tag_2:\n      0x00\n      dup1\n      revert\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":1024:1101  mapping(address => mapping(IERC20 => uint256)) public userRewardTokenBalances */\n    tag_3:\n      tag_24\n      0x04\n      dup1\n      calldatasize\n      sub\n      dup2\n      add\n      swap1\n      tag_25\n      swap2\n      swap1\n      tag_26\n      jump\t// in\n    tag_25:\n      tag_27\n      jump\t// in\n    tag_24:\n      mload(0x40)\n      tag_28\n      swap2\n      swap1\n      tag_29\n      jump\t// in\n    tag_28:\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      return\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9630:9842  function afterDecreaseGauge(... */\n    tag_4:\n      tag_30\n      0x04\n      dup1\n      calldatasize\n      sub\n      dup2\n      add\n      swap1\n      tag_31\n      swap2\n      swap1\n      tag_32\n      jump\t// in\n    tag_31:\n      tag_33\n      jump\t// in\n    tag_30:\n      stop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":2644:2669  address public liquidator */\n    tag_5:\n      tag_34\n      tag_35\n      jump\t// in\n    tag_34:\n      mload(0x40)\n      tag_36\n      swap2\n      swap1\n      tag_37\n      jump\t// in\n    tag_36:\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      return\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":10591:10789  function claimAll(address _gauge, address _user) external {... */\n    tag_6:\n      tag_38\n      0x04\n      dup1\n      calldatasize\n      sub\n      dup2\n      add\n      swap1\n      tag_39\n      swap2\n      swap1\n      tag_40\n      jump\t// in\n    tag_39:\n      tag_41\n      jump\t// in\n    tag_38:\n      stop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":2341:2399  mapping(address => RewardToken[]) public gaugeRewardTokens */\n    tag_7:\n      tag_42\n      0x04\n      dup1\n      calldatasize\n      sub\n      dup2\n      add\n      swap1\n      tag_43\n      swap2\n      swap1\n      tag_44\n      jump\t// in\n    tag_43:\n      tag_45\n      jump\t// in\n    tag_42:\n      mload(0x40)\n      tag_46\n      swap3\n      swap2\n      swap1\n      tag_47\n      jump\t// in\n    tag_46:\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      return\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6703:6841  function currentRewardToken(address _gauge) external view returns (RewardToken memory) {... */\n    tag_8:\n      tag_48\n      0x04\n      dup1\n      calldatasize\n      sub\n      dup2\n      add\n      swap1\n      tag_49\n      swap2\n      swap1\n      tag_50\n      jump\t// in\n    tag_49:\n      tag_51\n      jump\t// in\n    tag_48:\n      mload(0x40)\n      tag_52\n      swap2\n      swap1\n      tag_53\n      jump\t// in\n    tag_52:\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      return\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":1582:1705  mapping(address => mapping(address => mapping(address => uint256)))... */\n    tag_9:\n      tag_54\n      0x04\n      dup1\n      calldatasize\n      sub\n      dup2\n      add\n      swap1\n      tag_55\n      swap2\n      swap1\n      tag_56\n      jump\t// in\n    tag_55:\n      tag_57\n      jump\t// in\n    tag_54:\n      mload(0x40)\n      tag_58\n      swap2\n      swap1\n      tag_29\n      jump\t// in\n    tag_58:\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      return\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9379:9591  function afterIncreaseGauge(... */\n    tag_10:\n      tag_59\n      0x04\n      dup1\n      calldatasize\n      sub\n      dup2\n      add\n      swap1\n      tag_60\n      swap2\n      swap1\n      tag_32\n      jump\t// in\n    tag_60:\n      tag_61\n      jump\t// in\n    tag_59:\n      stop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":2455:2494  IGaugeController public gaugeController */\n    tag_11:\n      tag_62\n      tag_63\n      jump\t// in\n    tag_62:\n      mload(0x40)\n      tag_64\n      swap2\n      swap1\n      tag_65\n      jump\t// in\n    tag_64:\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      return\n        /* \"@openzeppelin/contracts/utils/Multicall.sol\":407:715  function multicall(bytes[] calldata data) external virtual returns (bytes[] memory results) {... */\n    tag_12:\n      tag_66\n      0x04\n      dup1\n      calldatasize\n      sub\n      dup2\n      add\n      swap1\n      tag_67\n      swap2\n      swap1\n      tag_68\n      jump\t// in\n    tag_67:\n      tag_69\n      jump\t// in\n    tag_66:\n      mload(0x40)\n      tag_70\n      swap2\n      swap1\n      tag_71\n      jump\t// in\n    tag_70:\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      return\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":2778:2801  uint32 public stakerCut */\n    tag_13:\n      tag_72\n      tag_73\n      jump\t// in\n    tag_72:\n      mload(0x40)\n      tag_74\n      swap2\n      swap1\n      tag_75\n      jump\t// in\n    tag_74:\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      return\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11090:11441  function redeem(address _user, IERC20 _token) external returns (uint256) {... */\n    tag_14:\n      tag_76\n      0x04\n      dup1\n      calldatasize\n      sub\n      dup2\n      add\n      swap1\n      tag_77\n      swap2\n      swap1\n      tag_26\n      jump\t// in\n    tag_77:\n      tag_78\n      jump\t// in\n    tag_76:\n      mload(0x40)\n      tag_79\n      swap2\n      swap1\n      tag_29\n      jump\t// in\n    tag_79:\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      return\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":1285:1419  mapping(address => mapping(address => mapping(IERC20 => mapping(uint64 => uint256))))... */\n    tag_15:\n      tag_80\n      0x04\n      dup1\n      calldatasize\n      sub\n      dup2\n      add\n      swap1\n      tag_81\n      swap2\n      swap1\n      tag_82\n      jump\t// in\n    tag_81:\n      tag_83\n      jump\t// in\n    tag_80:\n      mload(0x40)\n      tag_84\n      swap2\n      swap1\n      tag_29\n      jump\t// in\n    tag_84:\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      return\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":7166:7517  function getRewards(... */\n    tag_16:\n      tag_85\n      0x04\n      dup1\n      calldatasize\n      sub\n      dup2\n      add\n      swap1\n      tag_86\n      swap2\n      swap1\n      tag_87\n      jump\t// in\n    tag_86:\n      tag_88\n      jump\t// in\n    tag_85:\n      mload(0x40)\n      tag_89\n      swap2\n      swap1\n      tag_29\n      jump\t// in\n    tag_89:\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      return\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":1873:1983  mapping(address => mapping(IERC20 => mapping(uint64 => uint256)))... */\n    tag_17:\n      tag_90\n      0x04\n      dup1\n      calldatasize\n      sub\n      dup2\n      add\n      swap1\n      tag_91\n      swap2\n      swap1\n      tag_92\n      jump\t// in\n    tag_91:\n      tag_93\n      jump\t// in\n    tag_90:\n      mload(0x40)\n      tag_94\n      swap2\n      swap1\n      tag_29\n      jump\t// in\n    tag_94:\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      return\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":10119:10388  function claim(... */\n    tag_18:\n      tag_95\n      0x04\n      dup1\n      calldatasize\n      sub\n      dup2\n      add\n      swap1\n      tag_96\n      swap2\n      swap1\n      tag_87\n      jump\t// in\n    tag_96:\n      tag_97\n      jump\t// in\n    tag_95:\n      stop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":2540:2560  address public vault */\n    tag_19:\n      tag_98\n      tag_99\n      jump\t// in\n    tag_98:\n      mload(0x40)\n      tag_100\n      swap2\n      swap1\n      tag_37\n      jump\t// in\n    tag_100:\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      return\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8011:9340  function afterSwap(... */\n    tag_20:\n      tag_101\n      0x04\n      dup1\n      calldatasize\n      sub\n      dup2\n      add\n      swap1\n      tag_102\n      swap2\n      swap1\n      tag_103\n      jump\t// in\n    tag_102:\n      tag_104\n      jump\t// in\n    tag_101:\n      stop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":1024:1101  mapping(address => mapping(IERC20 => uint256)) public userRewardTokenBalances */\n    tag_27:\n      mstore(0x20, 0x00)\n      dup2\n      0x00\n      mstore\n      mstore(0x20, keccak256(0x00, 0x40))\n      dup1\n      0x00\n      mstore\n      keccak256(0x00, 0x40)\n      0x00\n      swap2\n      pop\n      swap2\n      pop\n      pop\n      sload\n      dup2\n      jump\t// out\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9630:9842  function afterDecreaseGauge(... */\n    tag_33:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":19394:19409  gaugeController */\n      0x05\n      0x00\n      swap1\n      sload\n      swap1\n      0x0100\n      exp\n      swap1\n      div\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":19372:19410  msg.sender == address(gaugeController) */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":19372:19382  msg.sender */\n      caller\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":19372:19410  msg.sender == address(gaugeController) */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      eq\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":19364:19443  require(msg.sender == address(gaugeController), \"GReward/only-GaugeController\") */\n      tag_106\n      jumpi\n      mload(0x40)\n      0x08c379a000000000000000000000000000000000000000000000000000000000\n      dup2\n      mstore\n      0x04\n      add\n      tag_107\n      swap1\n      tag_108\n      jump\t// in\n    tag_107:\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      revert\n    tag_106:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9793:9835  _claimAll(_gauge, _user, _oldStakeBalance) */\n      tag_110\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9803:9809  _gauge */\n      dup4\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9811:9816  _user */\n      dup4\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9818:9834  _oldStakeBalance */\n      dup4\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9793:9802  _claimAll */\n      tag_111\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9793:9835  _claimAll(_gauge, _user, _oldStakeBalance) */\n      jump\t// in\n    tag_110:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9630:9842  function afterDecreaseGauge(... */\n      pop\n      pop\n      pop\n      jump\t// out\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":2644:2669  address public liquidator */\n    tag_35:\n      0x07\n      0x00\n      swap1\n      sload\n      swap1\n      0x0100\n      exp\n      swap1\n      div\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      dup2\n      jump\t// out\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":10591:10789  function claimAll(address _gauge, address _user) external {... */\n    tag_41:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":10659:10680  uint256 _stakeBalance */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":10683:10698  gaugeController */\n      0x05\n      0x00\n      swap1\n      sload\n      swap1\n      0x0100\n      exp\n      swap1\n      div\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":10683:10718  gaugeController.getUserGaugeBalance */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0x78fa672e\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":10719:10725  _gauge */\n      dup5\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":10727:10732  _user */\n      dup5\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":10683:10733  gaugeController.getUserGaugeBalance(_gauge, _user) */\n      mload(0x40)\n      dup4\n      0xffffffff\n      and\n      0xe0\n      shl\n      dup2\n      mstore\n      0x04\n      add\n      tag_113\n      swap3\n      swap2\n      swap1\n      tag_114\n      jump\t// in\n    tag_113:\n      0x20\n      mload(0x40)\n      dup1\n      dup4\n      sub\n      dup2\n      dup7\n      dup1\n      extcodesize\n      iszero\n      dup1\n      iszero\n      tag_115\n      jumpi\n      0x00\n      dup1\n      revert\n    tag_115:\n      pop\n      gas\n      staticcall\n      iszero\n      dup1\n      iszero\n      tag_117\n      jumpi\n      returndatasize\n      0x00\n      dup1\n      returndatacopy\n      revert(0x00, returndatasize)\n    tag_117:\n      pop\n      pop\n      pop\n      pop\n      mload(0x40)\n      returndatasize\n      not(0x1f)\n      0x1f\n      dup3\n      add\n      and\n      dup3\n      add\n      dup1\n      0x40\n      mstore\n      pop\n      dup2\n      add\n      swap1\n      tag_118\n      swap2\n      swap1\n      tag_119\n      jump\t// in\n    tag_118:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":10659:10733  uint256 _stakeBalance = gaugeController.getUserGaugeBalance(_gauge, _user) */\n      swap1\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":10743:10782  _claimAll(_gauge, _user, _stakeBalance) */\n      tag_120\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":10753:10759  _gauge */\n      dup4\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":10761:10766  _user */\n      dup4\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":10768:10781  _stakeBalance */\n      dup4\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":10743:10752  _claimAll */\n      tag_111\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":10743:10782  _claimAll(_gauge, _user, _stakeBalance) */\n      jump\t// in\n    tag_120:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":10649:10789  {... */\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":10591:10789  function claimAll(address _gauge, address _user) external {... */\n      pop\n      pop\n      jump\t// out\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":2341:2399  mapping(address => RewardToken[]) public gaugeRewardTokens */\n    tag_45:\n      mstore(0x20, 0x04)\n      dup2\n      0x00\n      mstore\n      keccak256(0x00, 0x40)\n      dup2\n      dup2\n      sload\n      dup2\n      lt\n      tag_121\n      jumpi\n      0x00\n      dup1\n      revert\n    tag_121:\n      swap1\n      0x00\n      mstore\n      keccak256(0x00, 0x20)\n      add\n      0x00\n      swap2\n      pop\n      swap2\n      pop\n      pop\n      dup1\n      0x00\n      add\n      0x00\n      swap1\n      sload\n      swap1\n      0x0100\n      exp\n      swap1\n      div\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      swap1\n      dup1\n      0x00\n      add\n      0x14\n      swap1\n      sload\n      swap1\n      0x0100\n      exp\n      swap1\n      div\n      0xffffffffffffffff\n      and\n      swap1\n      pop\n      dup3\n      jump\t// out\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6703:6841  function currentRewardToken(address _gauge) external view returns (RewardToken memory) {... */\n    tag_51:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6770:6788  RewardToken memory */\n      tag_123\n      tag_124\n      jump\t// in\n    tag_123:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6807:6834  _currentRewardToken(_gauge) */\n      tag_126\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6827:6833  _gauge */\n      dup3\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6807:6826  _currentRewardToken */\n      tag_127\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6807:6834  _currentRewardToken(_gauge) */\n      jump\t// in\n    tag_126:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6800:6834  return _currentRewardToken(_gauge) */\n      swap1\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":6703:6841  function currentRewardToken(address _gauge) external view returns (RewardToken memory) {... */\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":1582:1705  mapping(address => mapping(address => mapping(address => uint256)))... */\n    tag_57:\n      mstore(0x20, 0x02)\n      dup3\n      0x00\n      mstore\n      mstore(0x20, keccak256(0x00, 0x40))\n      dup2\n      0x00\n      mstore\n      mstore(0x20, keccak256(0x00, 0x40))\n      dup1\n      0x00\n      mstore\n      keccak256(0x00, 0x40)\n      0x00\n      swap3\n      pop\n      swap3\n      pop\n      pop\n      pop\n      sload\n      dup2\n      jump\t// out\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9379:9591  function afterIncreaseGauge(... */\n    tag_61:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":19394:19409  gaugeController */\n      0x05\n      0x00\n      swap1\n      sload\n      swap1\n      0x0100\n      exp\n      swap1\n      div\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":19372:19410  msg.sender == address(gaugeController) */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":19372:19382  msg.sender */\n      caller\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":19372:19410  msg.sender == address(gaugeController) */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      eq\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":19364:19443  require(msg.sender == address(gaugeController), \"GReward/only-GaugeController\") */\n      tag_129\n      jumpi\n      mload(0x40)\n      0x08c379a000000000000000000000000000000000000000000000000000000000\n      dup2\n      mstore\n      0x04\n      add\n      tag_130\n      swap1\n      tag_108\n      jump\t// in\n    tag_130:\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      revert\n    tag_129:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9542:9584  _claimAll(_gauge, _user, _oldStakeBalance) */\n      tag_132\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9552:9558  _gauge */\n      dup4\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9560:9565  _user */\n      dup4\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9567:9583  _oldStakeBalance */\n      dup4\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9542:9551  _claimAll */\n      tag_111\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9542:9584  _claimAll(_gauge, _user, _oldStakeBalance) */\n      jump\t// in\n    tag_132:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9379:9591  function afterIncreaseGauge(... */\n      pop\n      pop\n      pop\n      jump\t// out\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":2455:2494  IGaugeController public gaugeController */\n    tag_63:\n      0x05\n      0x00\n      swap1\n      sload\n      swap1\n      0x0100\n      exp\n      swap1\n      div\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      dup2\n      jump\t// out\n        /* \"@openzeppelin/contracts/utils/Multicall.sol\":407:715  function multicall(bytes[] calldata data) external virtual returns (bytes[] memory results) {... */\n    tag_69:\n        /* \"@openzeppelin/contracts/utils/Multicall.sol\":475:497  bytes[] memory results */\n      0x60\n        /* \"@openzeppelin/contracts/utils/Multicall.sol\":531:535  data */\n      dup3\n      dup3\n        /* \"@openzeppelin/contracts/utils/Multicall.sol\":531:542  data.length */\n      swap1\n      pop\n        /* \"@openzeppelin/contracts/utils/Multicall.sol\":519:543  new bytes[](data.length) */\n      0xffffffffffffffff\n      dup2\n      gt\n      iszero\n      tag_134\n      jumpi\n      tag_135\n      tag_136\n      jump\t// in\n    tag_135:\n    tag_134:\n      mload(0x40)\n      swap1\n      dup1\n      dup3\n      mstore\n      dup1\n      0x20\n      mul\n      0x20\n      add\n      dup3\n      add\n      0x40\n      mstore\n      dup1\n      iszero\n      tag_137\n      jumpi\n      dup2\n      0x20\n      add\n    tag_138:\n      0x60\n      dup2\n      mstore\n      0x20\n      add\n      swap1\n      0x01\n      swap1\n      sub\n      swap1\n      dup2\n      tag_138\n      jumpi\n      swap1\n      pop\n    tag_137:\n      pop\n        /* \"@openzeppelin/contracts/utils/Multicall.sol\":509:543  results = new bytes[](data.length) */\n      swap1\n      pop\n        /* \"@openzeppelin/contracts/utils/Multicall.sol\":558:567  uint256 i */\n      0x00\n        /* \"@openzeppelin/contracts/utils/Multicall.sol\":553:685  for (uint256 i = 0; i < data.length; i++) {... */\n    tag_139:\n        /* \"@openzeppelin/contracts/utils/Multicall.sol\":577:581  data */\n      dup4\n      dup4\n        /* \"@openzeppelin/contracts/utils/Multicall.sol\":577:588  data.length */\n      swap1\n      pop\n        /* \"@openzeppelin/contracts/utils/Multicall.sol\":573:574  i */\n      dup2\n        /* \"@openzeppelin/contracts/utils/Multicall.sol\":573:588  i < data.length */\n      lt\n        /* \"@openzeppelin/contracts/utils/Multicall.sol\":553:685  for (uint256 i = 0; i < data.length; i++) {... */\n      iszero\n      tag_140\n      jumpi\n        /* \"@openzeppelin/contracts/utils/Multicall.sol\":622:674  Address.functionDelegateCall(address(this), data[i]) */\n      tag_142\n        /* \"@openzeppelin/contracts/utils/Multicall.sol\":659:663  this */\n      address\n        /* \"@openzeppelin/contracts/utils/Multicall.sol\":666:670  data */\n      dup6\n      dup6\n        /* \"@openzeppelin/contracts/utils/Multicall.sol\":671:672  i */\n      dup5\n        /* \"@openzeppelin/contracts/utils/Multicall.sol\":666:673  data[i] */\n      dup2\n      dup2\n      lt\n      tag_143\n      jumpi\n      tag_144\n      tag_145\n      jump\t// in\n    tag_144:\n    tag_143:\n      swap1\n      pop\n      0x20\n      mul\n      dup2\n      add\n      swap1\n      tag_146\n      swap2\n      swap1\n      tag_147\n      jump\t// in\n    tag_146:\n        /* \"@openzeppelin/contracts/utils/Multicall.sol\":622:674  Address.functionDelegateCall(address(this), data[i]) */\n      dup1\n      dup1\n      0x1f\n      add\n      0x20\n      dup1\n      swap2\n      div\n      mul\n      0x20\n      add\n      mload(0x40)\n      swap1\n      dup2\n      add\n      0x40\n      mstore\n      dup1\n      swap4\n      swap3\n      swap2\n      swap1\n      dup2\n      dup2\n      mstore\n      0x20\n      add\n      dup4\n      dup4\n      dup1\n      dup3\n      dup5\n      calldatacopy\n      0x00\n      dup2\n      dup5\n      add\n      mstore\n      not(0x1f)\n      0x1f\n      dup3\n      add\n      and\n      swap1\n      pop\n      dup1\n      dup4\n      add\n      swap3\n      pop\n      pop\n      pop\n      pop\n      pop\n      pop\n      pop\n        /* \"@openzeppelin/contracts/utils/Multicall.sol\":622:650  Address.functionDelegateCall */\n      tag_148\n        /* \"@openzeppelin/contracts/utils/Multicall.sol\":622:674  Address.functionDelegateCall(address(this), data[i]) */\n      jump\t// in\n    tag_142:\n        /* \"@openzeppelin/contracts/utils/Multicall.sol\":609:616  results */\n      dup3\n        /* \"@openzeppelin/contracts/utils/Multicall.sol\":617:618  i */\n      dup3\n        /* \"@openzeppelin/contracts/utils/Multicall.sol\":609:619  results[i] */\n      dup2\n      mload\n      dup2\n      lt\n      tag_149\n      jumpi\n      tag_150\n      tag_145\n      jump\t// in\n    tag_150:\n    tag_149:\n      0x20\n      mul\n      0x20\n      add\n      add\n        /* \"@openzeppelin/contracts/utils/Multicall.sol\":609:674  results[i] = Address.functionDelegateCall(address(this), data[i]) */\n      dup2\n      swap1\n      mstore\n      pop\n        /* \"@openzeppelin/contracts/utils/Multicall.sol\":590:593  i++ */\n      dup1\n      dup1\n      tag_151\n      swap1\n      tag_152\n      jump\t// in\n    tag_151:\n      swap2\n      pop\n      pop\n        /* \"@openzeppelin/contracts/utils/Multicall.sol\":553:685  for (uint256 i = 0; i < data.length; i++) {... */\n      jump(tag_139)\n    tag_140:\n      pop\n        /* \"@openzeppelin/contracts/utils/Multicall.sol\":407:715  function multicall(bytes[] calldata data) external virtual returns (bytes[] memory results) {... */\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":2778:2801  uint32 public stakerCut */\n    tag_73:\n      0x07\n      0x14\n      swap1\n      sload\n      swap1\n      0x0100\n      exp\n      swap1\n      div\n      0xffffffff\n      and\n      dup2\n      jump\t// out\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11090:11441  function redeem(address _user, IERC20 _token) external returns (uint256) {... */\n    tag_78:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11154:11161  uint256 */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11173:11189  uint256 _rewards */\n      dup1\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11192:11215  userRewardTokenBalances */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11192:11222  userRewardTokenBalances[_user] */\n      dup1\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11216:11221  _user */\n      dup6\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11192:11222  userRewardTokenBalances[_user] */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      dup2\n      mstore\n      0x20\n      add\n      swap1\n      dup2\n      mstore\n      0x20\n      add\n      0x00\n      keccak256\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11192:11230  userRewardTokenBalances[_user][_token] */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11223:11229  _token */\n      dup5\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11192:11230  userRewardTokenBalances[_user][_token] */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      dup2\n      mstore\n      0x20\n      add\n      swap1\n      dup2\n      mstore\n      0x20\n      add\n      0x00\n      keccak256\n      sload\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11173:11230  uint256 _rewards = userRewardTokenBalances[_user][_token] */\n      swap1\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11282:11283  0 */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11241:11264  userRewardTokenBalances */\n      dup1\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11241:11271  userRewardTokenBalances[_user] */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11265:11270  _user */\n      dup7\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11241:11271  userRewardTokenBalances[_user] */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      dup2\n      mstore\n      0x20\n      add\n      swap1\n      dup2\n      mstore\n      0x20\n      add\n      0x00\n      keccak256\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11241:11279  userRewardTokenBalances[_user][_token] */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11272:11278  _token */\n      dup6\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11241:11279  userRewardTokenBalances[_user][_token] */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      dup2\n      mstore\n      0x20\n      add\n      swap1\n      dup2\n      mstore\n      0x20\n      add\n      0x00\n      keccak256\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11241:11283  userRewardTokenBalances[_user][_token] = 0 */\n      dup2\n      swap1\n      sstore\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11293:11340  _token.safeTransferFrom(vault, _user, _rewards) */\n      tag_154\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11317:11322  vault */\n      0x06\n      0x00\n      swap1\n      sload\n      swap1\n      0x0100\n      exp\n      swap1\n      div\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11324:11329  _user */\n      dup6\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11331:11339  _rewards */\n      dup4\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11293:11299  _token */\n      dup7\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11293:11316  _token.safeTransferFrom */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      tag_155\n      swap1\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11293:11340  _token.safeTransferFrom(vault, _user, _rewards) */\n      swap4\n      swap3\n      swap2\n      swap1\n      0xffffffff\n      and\n      jump\t// in\n    tag_154:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11391:11397  _token */\n      dup3\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11356:11408  RewardsRedeemed(msg.sender, _user, _token, _rewards) */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11384:11389  _user */\n      dup5\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11356:11408  RewardsRedeemed(msg.sender, _user, _token, _rewards) */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11372:11382  msg.sender */\n      caller\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11356:11408  RewardsRedeemed(msg.sender, _user, _token, _rewards) */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0x8ea6014d5675f425737c93493b7ab355a73eb41cf878f7315ac58f7753bcd7da\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11399:11407  _rewards */\n      dup5\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11356:11408  RewardsRedeemed(msg.sender, _user, _token, _rewards) */\n      mload(0x40)\n      tag_156\n      swap2\n      swap1\n      tag_29\n      jump\t// in\n    tag_156:\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      log4\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11426:11434  _rewards */\n      dup1\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11419:11434  return _rewards */\n      swap2\n      pop\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11090:11441  function redeem(address _user, IERC20 _token) external returns (uint256) {... */\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":1285:1419  mapping(address => mapping(address => mapping(IERC20 => mapping(uint64 => uint256))))... */\n    tag_83:\n      mstore(0x20, 0x01)\n      dup4\n      0x00\n      mstore\n      mstore(0x20, keccak256(0x00, 0x40))\n      dup3\n      0x00\n      mstore\n      mstore(0x20, keccak256(0x00, 0x40))\n      dup2\n      0x00\n      mstore\n      mstore(0x20, keccak256(0x00, 0x40))\n      dup1\n      0x00\n      mstore\n      keccak256(0x00, 0x40)\n      0x00\n      swap4\n      pop\n      swap4\n      pop\n      pop\n      pop\n      pop\n      sload\n      dup2\n      jump\t// out\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":7166:7517  function getRewards(... */\n    tag_88:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":7303:7310  uint256 */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":7322:7343  uint256 _stakeBalance */\n      dup1\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":7346:7361  gaugeController */\n      0x05\n      0x00\n      swap1\n      sload\n      swap1\n      0x0100\n      exp\n      swap1\n      div\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":7346:7381  gaugeController.getUserGaugeBalance */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0x78fa672e\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":7382:7388  _gauge */\n      dup7\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":7390:7395  _user */\n      dup6\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":7346:7396  gaugeController.getUserGaugeBalance(_gauge, _user) */\n      mload(0x40)\n      dup4\n      0xffffffff\n      and\n      0xe0\n      shl\n      dup2\n      mstore\n      0x04\n      add\n      tag_158\n      swap3\n      swap2\n      swap1\n      tag_114\n      jump\t// in\n    tag_158:\n      0x20\n      mload(0x40)\n      dup1\n      dup4\n      sub\n      dup2\n      dup7\n      dup1\n      extcodesize\n      iszero\n      dup1\n      iszero\n      tag_159\n      jumpi\n      0x00\n      dup1\n      revert\n    tag_159:\n      pop\n      gas\n      staticcall\n      iszero\n      dup1\n      iszero\n      tag_161\n      jumpi\n      returndatasize\n      0x00\n      dup1\n      returndatacopy\n      revert(0x00, returndatasize)\n    tag_161:\n      pop\n      pop\n      pop\n      pop\n      mload(0x40)\n      returndatasize\n      not(0x1f)\n      0x1f\n      dup3\n      add\n      and\n      dup3\n      add\n      dup1\n      0x40\n      mstore\n      pop\n      dup2\n      add\n      swap1\n      tag_162\n      swap2\n      swap1\n      tag_119\n      jump\t// in\n    tag_162:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":7322:7396  uint256 _stakeBalance = gaugeController.getUserGaugeBalance(_gauge, _user) */\n      swap1\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":7407:7423  uint256 _rewards */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":7429:7484  _getRewards(_gauge, _rewardToken, _user, _stakeBalance) */\n      tag_163\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":7441:7447  _gauge */\n      dup7\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":7449:7461  _rewardToken */\n      dup7\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":7463:7468  _user */\n      dup7\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":7470:7483  _stakeBalance */\n      dup6\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":7429:7440  _getRewards */\n      tag_164\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":7429:7484  _getRewards(_gauge, _rewardToken, _user, _stakeBalance) */\n      jump\t// in\n    tag_163:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":7406:7484  (uint256 _rewards, ) = _getRewards(_gauge, _rewardToken, _user, _stakeBalance) */\n      pop\n      swap1\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":7502:7510  _rewards */\n      dup1\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":7495:7510  return _rewards */\n      swap3\n      pop\n      pop\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":7166:7517  function getRewards(... */\n      swap4\n      swap3\n      pop\n      pop\n      pop\n      jump\t// out\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":1873:1983  mapping(address => mapping(IERC20 => mapping(uint64 => uint256)))... */\n    tag_93:\n      mstore(0x20, 0x03)\n      dup3\n      0x00\n      mstore\n      mstore(0x20, keccak256(0x00, 0x40))\n      dup2\n      0x00\n      mstore\n      mstore(0x20, keccak256(0x00, 0x40))\n      dup1\n      0x00\n      mstore\n      keccak256(0x00, 0x40)\n      0x00\n      swap3\n      pop\n      swap3\n      pop\n      pop\n      pop\n      sload\n      dup2\n      jump\t// out\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":10119:10388  function claim(... */\n    tag_97:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":10247:10268  uint256 _stakeBalance */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":10271:10286  gaugeController */\n      0x05\n      0x00\n      swap1\n      sload\n      swap1\n      0x0100\n      exp\n      swap1\n      div\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":10271:10306  gaugeController.getUserGaugeBalance */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0x78fa672e\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":10307:10313  _gauge */\n      dup6\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":10315:10320  _user */\n      dup5\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":10271:10321  gaugeController.getUserGaugeBalance(_gauge, _user) */\n      mload(0x40)\n      dup4\n      0xffffffff\n      and\n      0xe0\n      shl\n      dup2\n      mstore\n      0x04\n      add\n      tag_166\n      swap3\n      swap2\n      swap1\n      tag_114\n      jump\t// in\n    tag_166:\n      0x20\n      mload(0x40)\n      dup1\n      dup4\n      sub\n      dup2\n      dup7\n      dup1\n      extcodesize\n      iszero\n      dup1\n      iszero\n      tag_167\n      jumpi\n      0x00\n      dup1\n      revert\n    tag_167:\n      pop\n      gas\n      staticcall\n      iszero\n      dup1\n      iszero\n      tag_169\n      jumpi\n      returndatasize\n      0x00\n      dup1\n      returndatacopy\n      revert(0x00, returndatasize)\n    tag_169:\n      pop\n      pop\n      pop\n      pop\n      mload(0x40)\n      returndatasize\n      not(0x1f)\n      0x1f\n      dup3\n      add\n      and\n      dup3\n      add\n      dup1\n      0x40\n      mstore\n      pop\n      dup2\n      add\n      swap1\n      tag_170\n      swap2\n      swap1\n      tag_119\n      jump\t// in\n    tag_170:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":10247:10321  uint256 _stakeBalance = gaugeController.getUserGaugeBalance(_gauge, _user) */\n      swap1\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":10331:10381  _claim(_gauge, _rewardToken, _user, _stakeBalance) */\n      tag_171\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":10338:10344  _gauge */\n      dup5\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":10346:10358  _rewardToken */\n      dup5\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":10360:10365  _user */\n      dup5\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":10367:10380  _stakeBalance */\n      dup5\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":10331:10337  _claim */\n      tag_172\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":10331:10381  _claim(_gauge, _rewardToken, _user, _stakeBalance) */\n      jump\t// in\n    tag_171:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":10237:10388  {... */\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":10119:10388  function claim(... */\n      pop\n      pop\n      pop\n      jump\t// out\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":2540:2560  address public vault */\n    tag_99:\n      0x06\n      0x00\n      swap1\n      sload\n      swap1\n      0x0100\n      exp\n      swap1\n      div\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      dup2\n      jump\t// out\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8011:9340  function afterSwap(... */\n    tag_104:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8201:8211  liquidator */\n      0x07\n      0x00\n      swap1\n      sload\n      swap1\n      0x0100\n      exp\n      swap1\n      div\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8187:8211  msg.sender == liquidator */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8187:8197  msg.sender */\n      caller\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8187:8211  msg.sender == liquidator */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      eq\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8179:8239  require(msg.sender == liquidator, \"GReward/only-liquidator\") */\n      tag_174\n      jumpi\n      mload(0x40)\n      0x08c379a000000000000000000000000000000000000000000000000000000000\n      dup2\n      mstore\n      0x04\n      add\n      tag_175\n      swap1\n      tag_176\n      jump\t// in\n    tag_175:\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      revert\n    tag_174:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8250:8264  address _gauge */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8275:8282  _ticket */\n      dup5\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8250:8283  address _gauge = address(_ticket) */\n      swap1\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8294:8325  RewardToken memory _rewardToken */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8328:8355  _currentRewardToken(_gauge) */\n      tag_177\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8348:8354  _gauge */\n      dup3\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8328:8347  _currentRewardToken */\n      tag_127\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8328:8355  _currentRewardToken(_gauge) */\n      jump\t// in\n    tag_177:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8294:8355  RewardToken memory _rewardToken = _currentRewardToken(_gauge) */\n      swap1\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8380:8392  _rewardToken */\n      dup1\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8380:8398  _rewardToken.token */\n      0x00\n      add\n      mload\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8370:8398  _token != _rewardToken.token */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8370:8376  _token */\n      dup5\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8370:8398  _token != _rewardToken.token */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      eq\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8366:8811  if (_token != _rewardToken.token) {... */\n      tag_178\n      jumpi\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8414:8439  uint256 _currentTimestamp */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8442:8457  block.timestamp */\n      timestamp\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8414:8457  uint256 _currentTimestamp = block.timestamp */\n      swap1\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8472:8506  RewardToken memory _newRewardToken */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8509:8621  RewardToken({... */\n      mload(0x40)\n      dup1\n      0x40\n      add\n      0x40\n      mstore\n      dup1\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8546:8552  _token */\n      dup8\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8509:8621  RewardToken({... */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      dup2\n      mstore\n      0x20\n      add\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8588:8605  _currentTimestamp */\n      dup4\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8509:8621  RewardToken({... */\n      0xffffffffffffffff\n      and\n      dup2\n      mstore\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8472:8621  RewardToken memory _newRewardToken = RewardToken({... */\n      swap1\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8636:8653  gaugeRewardTokens */\n      0x04\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8636:8661  gaugeRewardTokens[_gauge] */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8654:8660  _gauge */\n      dup6\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8636:8661  gaugeRewardTokens[_gauge] */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      dup2\n      mstore\n      0x20\n      add\n      swap1\n      dup2\n      mstore\n      0x20\n      add\n      0x00\n      keccak256\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8667:8682  _newRewardToken */\n      dup2\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8636:8683  gaugeRewardTokens[_gauge].push(_newRewardToken) */\n      swap1\n      dup1\n      0x01\n      dup2\n      sload\n      add\n      dup1\n      dup3\n      sstore\n      dup1\n      swap2\n      pop\n      pop\n      0x01\n      swap1\n      sub\n      swap1\n      0x00\n      mstore\n      keccak256(0x00, 0x20)\n      add\n      0x00\n      swap1\n      swap2\n      swap1\n      swap2\n      swap1\n      swap2\n      pop\n      0x00\n      dup3\n      add\n      mload\n      dup2\n      0x00\n      add\n      exp(0x0100, 0x00)\n      dup2\n      sload\n      dup2\n      0xffffffffffffffffffffffffffffffffffffffff\n      mul\n      not\n      and\n      swap1\n      dup4\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      mul\n      or\n      swap1\n      sstore\n      pop\n      0x20\n      dup3\n      add\n      mload\n      dup2\n      0x00\n      add\n      exp(0x0100, 0x14)\n      dup2\n      sload\n      dup2\n      0xffffffffffffffff\n      mul\n      not\n      and\n      swap1\n      dup4\n      0xffffffffffffffff\n      and\n      mul\n      or\n      swap1\n      sstore\n      pop\n      pop\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8729:8735  _token */\n      dup6\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8703:8755  RewardTokenPushed(_gauge, _token, _currentTimestamp) */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8721:8727  _gauge */\n      dup5\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8703:8755  RewardTokenPushed(_gauge, _token, _currentTimestamp) */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0xd38aa1c6709087859dfa9ca795d9441a64c1fa0b1bf23d8ad02c1853b971e33c\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8737:8754  _currentTimestamp */\n      dup5\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8703:8755  RewardTokenPushed(_gauge, _token, _currentTimestamp) */\n      mload(0x40)\n      tag_180\n      swap2\n      swap1\n      tag_29\n      jump\t// in\n    tag_180:\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      log3\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8785:8800  _newRewardToken */\n      dup1\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8770:8800  _rewardToken = _newRewardToken */\n      swap3\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8400:8811  {... */\n      pop\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8366:8811  if (_token != _rewardToken.token) {... */\n    tag_178:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8821:8842  uint256 _gaugeRewards */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8874:8877  1e9 */\n      0x3b9aca00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8861:8870  stakerCut */\n      0x07\n      0x14\n      swap1\n      sload\n      swap1\n      0x0100\n      exp\n      swap1\n      div\n      0xffffffff\n      and\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8846:8870  _tokenAmount * stakerCut */\n      0xffffffff\n      and\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8846:8858  _tokenAmount */\n      dup6\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8846:8870  _tokenAmount * stakerCut */\n      tag_181\n      swap2\n      swap1\n      tag_182\n      jump\t// in\n    tag_181:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8845:8877  (_tokenAmount * stakerCut) / 1e9 */\n      tag_183\n      swap2\n      swap1\n      tag_184\n      jump\t// in\n    tag_183:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8821:8877  uint256 _gaugeRewards = (_tokenAmount * stakerCut) / 1e9 */\n      swap1\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8887:8908  uint256 _gaugeBalance */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8911:8926  gaugeController */\n      0x05\n      0x00\n      swap1\n      sload\n      swap1\n      0x0100\n      exp\n      swap1\n      div\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8911:8942  gaugeController.getGaugeBalance */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0x117d37e6\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8943:8949  _gauge */\n      dup6\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8911:8950  gaugeController.getGaugeBalance(_gauge) */\n      mload(0x40)\n      dup3\n      0xffffffff\n      and\n      0xe0\n      shl\n      dup2\n      mstore\n      0x04\n      add\n      tag_185\n      swap2\n      swap1\n      tag_37\n      jump\t// in\n    tag_185:\n      0x20\n      mload(0x40)\n      dup1\n      dup4\n      sub\n      dup2\n      dup7\n      dup1\n      extcodesize\n      iszero\n      dup1\n      iszero\n      tag_186\n      jumpi\n      0x00\n      dup1\n      revert\n    tag_186:\n      pop\n      gas\n      staticcall\n      iszero\n      dup1\n      iszero\n      tag_188\n      jumpi\n      returndatasize\n      0x00\n      dup1\n      returndatacopy\n      revert(0x00, returndatasize)\n    tag_188:\n      pop\n      pop\n      pop\n      pop\n      mload(0x40)\n      returndatasize\n      not(0x1f)\n      0x1f\n      dup3\n      add\n      and\n      dup3\n      add\n      dup1\n      0x40\n      mstore\n      pop\n      dup2\n      add\n      swap1\n      tag_189\n      swap2\n      swap1\n      tag_119\n      jump\t// in\n    tag_189:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8887:8950  uint256 _gaugeBalance = gaugeController.getGaugeBalance(_gauge) */\n      swap1\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9028:9049  uint256 _exchangeRate */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9068:9069  0 */\n      dup1\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9052:9065  _gaugeBalance */\n      dup3\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9052:9069  _gaugeBalance > 0 */\n      gt\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9052:9114  _gaugeBalance > 0 ? (_gaugeRewards * 1e18) / _gaugeBalance : 0 */\n      tag_190\n      jumpi\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9113:9114  0 */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9052:9114  _gaugeBalance > 0 ? (_gaugeRewards * 1e18) / _gaugeBalance : 0 */\n      jump(tag_191)\n    tag_190:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9097:9110  _gaugeBalance */\n      dup2\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9089:9093  1e18 */\n      0x0de0b6b3a7640000\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9073:9086  _gaugeRewards */\n      dup5\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9073:9093  _gaugeRewards * 1e18 */\n      tag_192\n      swap2\n      swap1\n      tag_182\n      jump\t// in\n    tag_192:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9072:9110  (_gaugeRewards * 1e18) / _gaugeBalance */\n      tag_193\n      swap2\n      swap1\n      tag_184\n      jump\t// in\n    tag_193:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9052:9114  _gaugeBalance > 0 ? (_gaugeRewards * 1e18) / _gaugeBalance : 0 */\n    tag_191:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9028:9114  uint256 _exchangeRate = _gaugeBalance > 0 ? (_gaugeRewards * 1e18) / _gaugeBalance : 0 */\n      swap1\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9232:9245  _exchangeRate */\n      dup1\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9125:9154  gaugeRewardTokenExchangeRates */\n      0x03\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9125:9162  gaugeRewardTokenExchangeRates[_gauge] */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9155:9161  _gauge */\n      dup8\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9125:9162  gaugeRewardTokenExchangeRates[_gauge] */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      dup2\n      mstore\n      0x20\n      add\n      swap1\n      dup2\n      mstore\n      0x20\n      add\n      0x00\n      keccak256\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9125:9182  gaugeRewardTokenExchangeRates[_gauge][_rewardToken.token] */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9163:9175  _rewardToken */\n      dup7\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9163:9181  _rewardToken.token */\n      0x00\n      add\n      mload\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9125:9182  gaugeRewardTokenExchangeRates[_gauge][_rewardToken.token] */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      dup2\n      mstore\n      0x20\n      add\n      swap1\n      dup2\n      mstore\n      0x20\n      add\n      0x00\n      keccak256\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9125:9228  gaugeRewardTokenExchangeRates[_gauge][_rewardToken.token][... */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9196:9208  _rewardToken */\n      dup7\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9196:9218  _rewardToken.timestamp */\n      0x20\n      add\n      mload\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9125:9228  gaugeRewardTokenExchangeRates[_gauge][_rewardToken.token][... */\n      0xffffffffffffffff\n      and\n      0xffffffffffffffff\n      and\n      dup2\n      mstore\n      0x20\n      add\n      swap1\n      dup2\n      mstore\n      0x20\n      add\n      0x00\n      keccak256\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9125:9245  gaugeRewardTokenExchangeRates[_gauge][_rewardToken.token][... */\n      dup3\n      dup3\n      sload\n      tag_194\n      swap2\n      swap1\n      tag_195\n      jump\t// in\n    tag_194:\n      swap3\n      pop\n      pop\n      dup2\n      swap1\n      sstore\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9282:9288  _token */\n      dup7\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9261:9333  RewardsAdded(_gauge, _token, _tokenAmount, _gaugeRewards, _exchangeRate) */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9274:9280  _gauge */\n      dup6\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9261:9333  RewardsAdded(_gauge, _token, _tokenAmount, _gaugeRewards, _exchangeRate) */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0x1b0006daff5bb99d1383ffc4326984a27347192b77ddb40fe18ec9720d0929a8\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9290:9302  _tokenAmount */\n      dup9\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9304:9317  _gaugeRewards */\n      dup7\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9319:9332  _exchangeRate */\n      dup6\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":9261:9333  RewardsAdded(_gauge, _token, _tokenAmount, _gaugeRewards, _exchangeRate) */\n      mload(0x40)\n      tag_196\n      swap4\n      swap3\n      swap2\n      swap1\n      tag_197\n      jump\t// in\n    tag_196:\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      log3\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8169:9340  {... */\n      pop\n      pop\n      pop\n      pop\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":8011:9340  function afterSwap(... */\n      pop\n      pop\n      pop\n      pop\n      pop\n      jump\t// out\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18281:19211  function _claimAll(... */\n    tag_111:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18403:18435  uint256 _gaugeRewardTokensLength */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18438:18455  gaugeRewardTokens */\n      0x04\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18438:18463  gaugeRewardTokens[_gauge] */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18456:18462  _gauge */\n      dup6\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18438:18463  gaugeRewardTokens[_gauge] */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      dup2\n      mstore\n      0x20\n      add\n      swap1\n      dup2\n      mstore\n      0x20\n      add\n      0x00\n      keccak256\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18438:18470  gaugeRewardTokens[_gauge].length */\n      dup1\n      sload\n      swap1\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18403:18470  uint256 _gaugeRewardTokensLength = gaugeRewardTokens[_gauge].length */\n      swap1\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18481:18512  RewardToken memory _rewardToken */\n      tag_199\n      tag_124\n      jump\t// in\n    tag_199:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18554:18555  0 */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18527:18551  _gaugeRewardTokensLength */\n      dup3\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18527:18555  _gaugeRewardTokensLength > 0 */\n      gt\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18523:19205  if (_gaugeRewardTokensLength > 0) {... */\n      iszero\n      tag_200\n      jumpi\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18571:18580  uint256 i */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18583:18607  _gaugeRewardTokensLength */\n      dup3\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18571:18607  uint256 i = _gaugeRewardTokensLength */\n      swap1\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18622:18998  while (i > 0) {... */\n    tag_201:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18633:18634  0 */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18629:18630  i */\n      dup2\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18629:18634  i > 0 */\n      gt\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18622:18998  while (i > 0) {... */\n      iszero\n      tag_202\n      jumpi\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18662:18663  1 */\n      0x01\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18658:18659  i */\n      dup2\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18658:18663  i - 1 */\n      tag_203\n      swap2\n      swap1\n      tag_204\n      jump\t// in\n    tag_203:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18654:18663  i = i - 1 */\n      swap1\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18696:18713  gaugeRewardTokens */\n      0x04\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18696:18721  gaugeRewardTokens[_gauge] */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18714:18720  _gauge */\n      dup8\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18696:18721  gaugeRewardTokens[_gauge] */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      dup2\n      mstore\n      0x20\n      add\n      swap1\n      dup2\n      mstore\n      0x20\n      add\n      0x00\n      keccak256\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18722:18723  i */\n      dup2\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18696:18724  gaugeRewardTokens[_gauge][i] */\n      dup2\n      sload\n      dup2\n      lt\n      tag_205\n      jumpi\n      tag_206\n      tag_145\n      jump\t// in\n    tag_206:\n    tag_205:\n      swap1\n      0x00\n      mstore\n      keccak256(0x00, 0x20)\n      add\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18681:18724  _rewardToken = gaugeRewardTokens[_gauge][i] */\n      mload(0x40)\n      dup1\n      0x40\n      add\n      0x40\n      mstore\n      swap1\n      dup2\n      0x00\n      dup3\n      add\n      0x00\n      swap1\n      sload\n      swap1\n      0x0100\n      exp\n      swap1\n      div\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      dup2\n      mstore\n      0x20\n      add\n      0x00\n      dup3\n      add\n      0x14\n      swap1\n      sload\n      swap1\n      0x0100\n      exp\n      swap1\n      div\n      0xffffffffffffffff\n      and\n      0xffffffffffffffff\n      and\n      0xffffffffffffffff\n      and\n      dup2\n      mstore\n      pop\n      pop\n      swap2\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18742:18799  _claimRewards(_gauge, _rewardToken, _user, _stakeBalance) */\n      tag_208\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18756:18762  _gauge */\n      dup7\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18764:18776  _rewardToken */\n      dup4\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18778:18783  _user */\n      dup8\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18785:18798  _stakeBalance */\n      dup8\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18742:18755  _claimRewards */\n      tag_209\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18742:18799  _claimRewards(_gauge, _rewardToken, _user, _stakeBalance) */\n      jump\t// in\n    tag_208:\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18817:18983  _setUserGaugeRewardTokenLastClaimedTimestamp(... */\n      tag_210\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18883:18888  _user */\n      dup6\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18910:18916  _gauge */\n      dup8\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18946:18958  _rewardToken */\n      dup5\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18946:18964  _rewardToken.token */\n      0x00\n      add\n      mload\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18817:18861  _setUserGaugeRewardTokenLastClaimedTimestamp */\n      tag_211\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18817:18983  _setUserGaugeRewardTokenLastClaimedTimestamp(... */\n      jump\t// in\n    tag_210:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18622:18998  while (i > 0) {... */\n      jump(tag_201)\n    tag_202:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18557:19008  {... */\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18523:19205  if (_gaugeRewardTokensLength > 0) {... */\n      jump(tag_212)\n    tag_200:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":19123:19194  _setUserGaugeRewardTokenLastClaimedTimestamp(_user, _gauge, address(0)) */\n      tag_213\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":19168:19173  _user */\n      dup5\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":19175:19181  _gauge */\n      dup7\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":19191:19192  0 */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":19123:19167  _setUserGaugeRewardTokenLastClaimedTimestamp */\n      tag_211\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":19123:19194  _setUserGaugeRewardTokenLastClaimedTimestamp(_user, _gauge, address(0)) */\n      jump\t// in\n    tag_213:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18523:19205  if (_gaugeRewardTokensLength > 0) {... */\n    tag_212:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18393:19211  {... */\n      pop\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":18281:19211  function _claimAll(... */\n      pop\n      pop\n      pop\n      jump\t// out\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11716:12154  function _currentRewardToken(address _gauge) internal view returns (RewardToken memory) {... */\n    tag_127:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11784:11802  RewardToken memory */\n      tag_214\n      tag_124\n      jump\t// in\n    tag_214:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11814:11853  RewardToken[] memory _gaugeRewardTokens */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11856:11873  gaugeRewardTokens */\n      0x04\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11856:11881  gaugeRewardTokens[_gauge] */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11874:11880  _gauge */\n      dup5\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11856:11881  gaugeRewardTokens[_gauge] */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      dup2\n      mstore\n      0x20\n      add\n      swap1\n      dup2\n      mstore\n      0x20\n      add\n      0x00\n      keccak256\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11814:11881  RewardToken[] memory _gaugeRewardTokens = gaugeRewardTokens[_gauge] */\n      dup1\n      sload\n      dup1\n      0x20\n      mul\n      0x20\n      add\n      mload(0x40)\n      swap1\n      dup2\n      add\n      0x40\n      mstore\n      dup1\n      swap3\n      swap2\n      swap1\n      dup2\n      dup2\n      mstore\n      0x20\n      add\n      0x00\n      swap1\n    tag_216:\n      dup3\n      dup3\n      lt\n      iszero\n      tag_217\n      jumpi\n      dup4\n      dup3\n      swap1\n      0x00\n      mstore\n      keccak256(0x00, 0x20)\n      add\n      mload(0x40)\n      dup1\n      0x40\n      add\n      0x40\n      mstore\n      swap1\n      dup2\n      0x00\n      dup3\n      add\n      0x00\n      swap1\n      sload\n      swap1\n      0x0100\n      exp\n      swap1\n      div\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      dup2\n      mstore\n      0x20\n      add\n      0x00\n      dup3\n      add\n      0x14\n      swap1\n      sload\n      swap1\n      0x0100\n      exp\n      swap1\n      div\n      0xffffffffffffffff\n      and\n      0xffffffffffffffff\n      and\n      0xffffffffffffffff\n      and\n      dup2\n      mstore\n      pop\n      pop\n      dup2\n      mstore\n      0x20\n      add\n      swap1\n      0x01\n      add\n      swap1\n      jump(tag_216)\n    tag_217:\n      pop\n      pop\n      pop\n      pop\n      swap1\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11891:11923  uint256 _gaugeRewardTokensLength */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11926:11944  _gaugeRewardTokens */\n      dup2\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11926:11951  _gaugeRewardTokens.length */\n      mload\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11891:11951  uint256 _gaugeRewardTokensLength = _gaugeRewardTokens.length */\n      swap1\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11993:11994  0 */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11966:11990  _gaugeRewardTokensLength */\n      dup2\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11966:11994  _gaugeRewardTokensLength > 0 */\n      gt\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11962:12148  if (_gaugeRewardTokensLength > 0) {... */\n      iszero\n      tag_219\n      jumpi\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":12017:12035  _gaugeRewardTokens */\n      dup2\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":12063:12064  1 */\n      0x01\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":12036:12060  _gaugeRewardTokensLength */\n      dup3\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":12036:12064  _gaugeRewardTokensLength - 1 */\n      tag_220\n      swap2\n      swap1\n      tag_204\n      jump\t// in\n    tag_220:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":12017:12065  _gaugeRewardTokens[_gaugeRewardTokensLength - 1] */\n      dup2\n      mload\n      dup2\n      lt\n      tag_221\n      jumpi\n      tag_222\n      tag_145\n      jump\t// in\n    tag_222:\n    tag_221:\n      0x20\n      mul\n      0x20\n      add\n      add\n      mload\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":12010:12065  return _gaugeRewardTokens[_gaugeRewardTokensLength - 1] */\n      swap3\n      pop\n      pop\n      pop\n      jump(tag_215)\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11962:12148  if (_gaugeRewardTokensLength > 0) {... */\n    tag_219:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":12103:12137  RewardToken(IERC20(address(0)), 0) */\n      mload(0x40)\n      dup1\n      0x40\n      add\n      0x40\n      mstore\n      dup1\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":12130:12131  0 */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":12103:12137  RewardToken(IERC20(address(0)), 0) */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      dup2\n      mstore\n      0x20\n      add\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":12135:12136  0 */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":12103:12137  RewardToken(IERC20(address(0)), 0) */\n      0xffffffffffffffff\n      and\n      dup2\n      mstore\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":12096:12137  return RewardToken(IERC20(address(0)), 0) */\n      swap3\n      pop\n      pop\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":11716:12154  function _currentRewardToken(address _gauge) internal view returns (RewardToken memory) {... */\n    tag_215:\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"@openzeppelin/contracts/utils/Address.sol\":6570:6768  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {... */\n    tag_148:\n        /* \"@openzeppelin/contracts/utils/Address.sol\":6653:6665  bytes memory */\n      0x60\n        /* \"@openzeppelin/contracts/utils/Address.sol\":6684:6761  functionDelegateCall(target, data, \"Address: low-level delegate call failed\") */\n      tag_225\n        /* \"@openzeppelin/contracts/utils/Address.sol\":6705:6711  target */\n      dup4\n        /* \"@openzeppelin/contracts/utils/Address.sol\":6713:6717  data */\n      dup4\n        /* \"@openzeppelin/contracts/utils/Address.sol\":6684:6761  functionDelegateCall(target, data, \"Address: low-level delegate call failed\") */\n      mload(0x40)\n      dup1\n      0x60\n      add\n      0x40\n      mstore\n      dup1\n      0x27\n      dup2\n      mstore\n      0x20\n      add\n      data_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398\n      0x27\n      swap2\n      codecopy\n        /* \"@openzeppelin/contracts/utils/Address.sol\":6684:6704  functionDelegateCall */\n      tag_226\n        /* \"@openzeppelin/contracts/utils/Address.sol\":6684:6761  functionDelegateCall(target, data, \"Address: low-level delegate call failed\") */\n      jump\t// in\n    tag_225:\n        /* \"@openzeppelin/contracts/utils/Address.sol\":6677:6761  return functionDelegateCall(target, data, \"Address: low-level delegate call failed\") */\n      swap1\n      pop\n        /* \"@openzeppelin/contracts/utils/Address.sol\":6570:6768  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {... */\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":974:1215  function safeTransferFrom(... */\n    tag_155:\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":1112:1208  _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)) */\n      tag_228\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":1132:1137  token */\n      dup5\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":1162:1189  token.transferFrom.selector */\n      shl(0xe0, 0x23b872dd)\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":1191:1195  from */\n      dup6\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":1197:1199  to */\n      dup6\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":1201:1206  value */\n      dup6\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":1139:1207  abi.encodeWithSelector(token.transferFrom.selector, from, to, value) */\n      add(0x24, mload(0x40))\n      tag_229\n      swap4\n      swap3\n      swap2\n      swap1\n      tag_230\n      jump\t// in\n    tag_229:\n      mload(0x40)\n      0x20\n      dup2\n      dup4\n      sub\n      sub\n      dup2\n      mstore\n      swap1\n      0x40\n      mstore\n      swap1\n      not(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n      and\n      0x20\n      dup3\n      add\n      dup1\n      mload\n      0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n      dup4\n      dup2\n      dup4\n      and\n      or\n      dup4\n      mstore\n      pop\n      pop\n      pop\n      pop\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":1112:1131  _callOptionalReturn */\n      tag_231\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":1112:1208  _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)) */\n      jump\t// in\n    tag_228:\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":974:1215  function safeTransferFrom(... */\n      pop\n      pop\n      pop\n      pop\n      jump\t// out\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":13961:16269  function _getRewards(... */\n    tag_164:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14130:14146  uint256 _rewards */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14148:14169  uint256 _exchangeRate */\n      dup1\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14181:14210  uint256 _previousExchangeRate */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14213:14246  userGaugeRewardTokenExchangeRates */\n      0x01\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14213:14253  userGaugeRewardTokenExchangeRates[_user] */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14247:14252  _user */\n      dup7\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14213:14253  userGaugeRewardTokenExchangeRates[_user] */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      dup2\n      mstore\n      0x20\n      add\n      swap1\n      dup2\n      mstore\n      0x20\n      add\n      0x00\n      keccak256\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14213:14261  userGaugeRewardTokenExchangeRates[_user][_gauge] */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14254:14260  _gauge */\n      dup9\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14213:14261  userGaugeRewardTokenExchangeRates[_user][_gauge] */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      dup2\n      mstore\n      0x20\n      add\n      swap1\n      dup2\n      mstore\n      0x20\n      add\n      0x00\n      keccak256\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14213:14303  userGaugeRewardTokenExchangeRates[_user][_gauge][... */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14275:14287  _rewardToken */\n      dup8\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14275:14293  _rewardToken.token */\n      0x00\n      add\n      mload\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14213:14303  userGaugeRewardTokenExchangeRates[_user][_gauge][... */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      dup2\n      mstore\n      0x20\n      add\n      swap1\n      dup2\n      mstore\n      0x20\n      add\n      0x00\n      keccak256\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14213:14327  userGaugeRewardTokenExchangeRates[_user][_gauge][... */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14304:14316  _rewardToken */\n      dup8\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14304:14326  _rewardToken.timestamp */\n      0x20\n      add\n      mload\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14213:14327  userGaugeRewardTokenExchangeRates[_user][_gauge][... */\n      0xffffffffffffffff\n      and\n      0xffffffffffffffff\n      and\n      dup2\n      mstore\n      0x20\n      add\n      swap1\n      dup2\n      mstore\n      0x20\n      add\n      0x00\n      keccak256\n      sload\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14181:14327  uint256 _previousExchangeRate = userGaugeRewardTokenExchangeRates[_user][_gauge][... */\n      swap1\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14338:14366  uint256 _currentExchangeRate */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14369:14398  gaugeRewardTokenExchangeRates */\n      0x03\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14369:14406  gaugeRewardTokenExchangeRates[_gauge] */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14399:14405  _gauge */\n      dup10\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14369:14406  gaugeRewardTokenExchangeRates[_gauge] */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      dup2\n      mstore\n      0x20\n      add\n      swap1\n      dup2\n      mstore\n      0x20\n      add\n      0x00\n      keccak256\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14369:14426  gaugeRewardTokenExchangeRates[_gauge][_rewardToken.token] */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14407:14419  _rewardToken */\n      dup9\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14407:14425  _rewardToken.token */\n      0x00\n      add\n      mload\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14369:14426  gaugeRewardTokenExchangeRates[_gauge][_rewardToken.token] */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      dup2\n      mstore\n      0x20\n      add\n      swap1\n      dup2\n      mstore\n      0x20\n      add\n      0x00\n      keccak256\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14369:14472  gaugeRewardTokenExchangeRates[_gauge][_rewardToken.token][... */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14440:14452  _rewardToken */\n      dup9\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14440:14462  _rewardToken.timestamp */\n      0x20\n      add\n      mload\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14369:14472  gaugeRewardTokenExchangeRates[_gauge][_rewardToken.token][... */\n      0xffffffffffffffff\n      and\n      0xffffffffffffffff\n      and\n      dup2\n      mstore\n      0x20\n      add\n      swap1\n      dup2\n      mstore\n      0x20\n      add\n      0x00\n      keccak256\n      sload\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14338:14472  uint256 _currentExchangeRate = gaugeRewardTokenExchangeRates[_gauge][_rewardToken.token][... */\n      swap1\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14483:14516  uint256 _userLastClaimedTimestamp */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14519:14653  _getUserGaugeRewardTokenLastClaimedTimestamp(... */\n      tag_233\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14577:14582  _user */\n      dup8\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14596:14602  _gauge */\n      dup11\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14624:14636  _rewardToken */\n      dup11\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14624:14642  _rewardToken.token */\n      0x00\n      add\n      mload\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14519:14563  _getUserGaugeRewardTokenLastClaimedTimestamp */\n      tag_234\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14519:14653  _getUserGaugeRewardTokenLastClaimedTimestamp(... */\n      jump\t// in\n    tag_233:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14483:14653  uint256 _userLastClaimedTimestamp = _getUserGaugeRewardTokenLastClaimedTimestamp(... */\n      swap1\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14697:14698  0 */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14668:14693  _userLastClaimedTimestamp */\n      dup2\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14668:14698  _userLastClaimedTimestamp == 0 */\n      eq\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14664:15725  if (_userLastClaimedTimestamp == 0) {... */\n      iszero\n      tag_235\n      jumpi\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14714:14753  RewardToken[] memory _gaugeRewardTokens */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14756:14773  gaugeRewardTokens */\n      0x04\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14756:14781  gaugeRewardTokens[_gauge] */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14774:14780  _gauge */\n      dup12\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14756:14781  gaugeRewardTokens[_gauge] */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      dup2\n      mstore\n      0x20\n      add\n      swap1\n      dup2\n      mstore\n      0x20\n      add\n      0x00\n      keccak256\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14714:14781  RewardToken[] memory _gaugeRewardTokens = gaugeRewardTokens[_gauge] */\n      dup1\n      sload\n      dup1\n      0x20\n      mul\n      0x20\n      add\n      mload(0x40)\n      swap1\n      dup2\n      add\n      0x40\n      mstore\n      dup1\n      swap3\n      swap2\n      swap1\n      dup2\n      dup2\n      mstore\n      0x20\n      add\n      0x00\n      swap1\n    tag_236:\n      dup3\n      dup3\n      lt\n      iszero\n      tag_237\n      jumpi\n      dup4\n      dup3\n      swap1\n      0x00\n      mstore\n      keccak256(0x00, 0x20)\n      add\n      mload(0x40)\n      dup1\n      0x40\n      add\n      0x40\n      mstore\n      swap1\n      dup2\n      0x00\n      dup3\n      add\n      0x00\n      swap1\n      sload\n      swap1\n      0x0100\n      exp\n      swap1\n      div\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      dup2\n      mstore\n      0x20\n      add\n      0x00\n      dup3\n      add\n      0x14\n      swap1\n      sload\n      swap1\n      0x0100\n      exp\n      swap1\n      div\n      0xffffffffffffffff\n      and\n      0xffffffffffffffff\n      and\n      0xffffffffffffffff\n      and\n      dup2\n      mstore\n      pop\n      pop\n      dup2\n      mstore\n      0x20\n      add\n      swap1\n      0x01\n      add\n      swap1\n      jump(tag_236)\n    tag_237:\n      pop\n      pop\n      pop\n      pop\n      swap1\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14795:14827  uint256 _gaugeRewardTokensLength */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14830:14848  _gaugeRewardTokens */\n      dup2\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14830:14855  _gaugeRewardTokens.length */\n      mload\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14795:14855  uint256 _gaugeRewardTokensLength = _gaugeRewardTokens.length */\n      swap1\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14901:14902  1 */\n      0x01\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14874:14898  _gaugeRewardTokensLength */\n      dup2\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14874:14902  _gaugeRewardTokensLength > 1 */\n      gt\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14870:15365  if (_gaugeRewardTokensLength > 1) {... */\n      iszero\n      tag_239\n      jumpi\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14922:14961  RewardToken memory _previousRewardToken */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14964:14982  _gaugeRewardTokens */\n      dup3\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15031:15032  1 */\n      0x01\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15004:15028  _gaugeRewardTokensLength */\n      dup4\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15004:15032  _gaugeRewardTokensLength - 1 */\n      tag_240\n      swap2\n      swap1\n      tag_204\n      jump\t// in\n    tag_240:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14964:15050  _gaugeRewardTokens[... */\n      dup2\n      mload\n      dup2\n      lt\n      tag_241\n      jumpi\n      tag_242\n      tag_145\n      jump\t// in\n    tag_242:\n    tag_241:\n      0x20\n      mul\n      0x20\n      add\n      add\n      mload\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14922:15050  RewardToken memory _previousRewardToken = _gaugeRewardTokens[... */\n      swap1\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15176:15350  _getUserGaugeRewardTokenLastClaimedTimestamp(... */\n      tag_243\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15242:15247  _user */\n      dup11\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15269:15275  _gauge */\n      dup14\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15305:15325  _previousRewardToken */\n      dup4\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15305:15331  _previousRewardToken.token */\n      0x00\n      add\n      mload\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15176:15220  _getUserGaugeRewardTokenLastClaimedTimestamp */\n      tag_234\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15176:15350  _getUserGaugeRewardTokenLastClaimedTimestamp(... */\n      jump\t// in\n    tag_243:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15148:15350  _userLastClaimedTimestamp = _getUserGaugeRewardTokenLastClaimedTimestamp(... */\n      swap4\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14904:15365  {... */\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14870:15365  if (_gaugeRewardTokensLength > 1) {... */\n    tag_239:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15412:15413  0 */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15383:15408  _userLastClaimedTimestamp */\n      dup4\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15383:15413  _userLastClaimedTimestamp == 0 */\n      eq\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15379:15715  if (_userLastClaimedTimestamp == 0) {... */\n      iszero\n      tag_244\n      jumpi\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15551:15700  _getUserGaugeRewardTokenLastClaimedTimestamp(... */\n      tag_245\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15617:15622  _user */\n      dup10\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15644:15650  _gauge */\n      dup13\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15680:15681  0 */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15551:15595  _getUserGaugeRewardTokenLastClaimedTimestamp */\n      tag_234\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15551:15700  _getUserGaugeRewardTokenLastClaimedTimestamp(... */\n      jump\t// in\n    tag_245:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15523:15700  _userLastClaimedTimestamp = _getUserGaugeRewardTokenLastClaimedTimestamp(... */\n      swap3\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15379:15715  if (_userLastClaimedTimestamp == 0) {... */\n    tag_244:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14700:15725  {... */\n      pop\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":14664:15725  if (_userLastClaimedTimestamp == 0) {... */\n    tag_235:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15735:15765  bool _isEligibleForPastRewards */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15796:15797  0 */\n      dup1\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15768:15793  _userLastClaimedTimestamp */\n      dup3\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15768:15797  _userLastClaimedTimestamp > 0 */\n      gt\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15768:15863  _userLastClaimedTimestamp > 0 &&... */\n      dup1\n      iszero\n      tag_246\n      jumpi\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15838:15863  _userLastClaimedTimestamp */\n      dup2\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15813:15825  _rewardToken */\n      dup10\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15813:15835  _rewardToken.timestamp */\n      0x20\n      add\n      mload\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15813:15863  _rewardToken.timestamp > _userLastClaimedTimestamp */\n      0xffffffffffffffff\n      and\n      gt\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15768:15863  _userLastClaimedTimestamp > 0 &&... */\n    tag_246:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15735:15863  bool _isEligibleForPastRewards = _userLastClaimedTimestamp > 0 &&... */\n      swap1\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15944:15969  _isEligibleForPastRewards */\n      dup1\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15943:15969  !_isEligibleForPastRewards */\n      iszero\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15943:15999  !_isEligibleForPastRewards && _previousExchangeRate == 0 */\n      dup1\n      iszero\n      tag_247\n      jumpi\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15998:15999  0 */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15973:15994  _previousExchangeRate */\n      dup5\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15973:15999  _previousExchangeRate == 0 */\n      eq\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15943:15999  !_isEligibleForPastRewards && _previousExchangeRate == 0 */\n    tag_247:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15939:16058  if (!_isEligibleForPastRewards && _previousExchangeRate == 0) {... */\n      iszero\n      tag_248\n      jumpi\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16023:16024  0 */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16026:16046  _currentExchangeRate */\n      dup4\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16015:16047  return (0, _currentExchangeRate) */\n      swap6\n      pop\n      swap6\n      pop\n      pop\n      pop\n      pop\n      pop\n      jump(tag_232)\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":15939:16058  if (!_isEligibleForPastRewards && _previousExchangeRate == 0) {... */\n    tag_248:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16214:16218  1e18 */\n      0x0de0b6b3a7640000\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16197:16210  _stakeBalance */\n      dup8\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16172:16193  _previousExchangeRate */\n      dup6\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16149:16169  _currentExchangeRate */\n      dup6\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16149:16193  _currentExchangeRate - _previousExchangeRate */\n      tag_249\n      swap2\n      swap1\n      tag_204\n      jump\t// in\n    tag_249:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16148:16210  (_currentExchangeRate - _previousExchangeRate) * _stakeBalance */\n      tag_250\n      swap2\n      swap1\n      tag_182\n      jump\t// in\n    tag_250:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16147:16218  ((_currentExchangeRate - _previousExchangeRate) * _stakeBalance) / 1e18 */\n      tag_251\n      swap2\n      swap1\n      tag_184\n      jump\t// in\n    tag_251:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16232:16252  _currentExchangeRate */\n      dup4\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16068:16262  return (... */\n      swap6\n      pop\n      swap6\n      pop\n      pop\n      pop\n      pop\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":13961:16269  function _getRewards(... */\n    tag_232:\n      swap5\n      pop\n      swap5\n      swap3\n      pop\n      pop\n      pop\n      jump\t// out\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17625:17947  function _claim(... */\n    tag_172:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17785:17842  _claimRewards(_gauge, _rewardToken, _user, _stakeBalance) */\n      tag_253\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17799:17805  _gauge */\n      dup5\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17807:17819  _rewardToken */\n      dup5\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17821:17826  _user */\n      dup5\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17828:17841  _stakeBalance */\n      dup5\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17785:17798  _claimRewards */\n      tag_209\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17785:17842  _claimRewards(_gauge, _rewardToken, _user, _stakeBalance) */\n      jump\t// in\n    tag_253:\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17852:17940  _setUserGaugeRewardTokenLastClaimedTimestamp(_user, _gauge, address(_rewardToken.token)) */\n      tag_254\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17897:17902  _user */\n      dup3\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17904:17910  _gauge */\n      dup6\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17920:17932  _rewardToken */\n      dup6\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17920:17938  _rewardToken.token */\n      0x00\n      add\n      mload\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17852:17896  _setUserGaugeRewardTokenLastClaimedTimestamp */\n      tag_211\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17852:17940  _setUserGaugeRewardTokenLastClaimedTimestamp(_user, _gauge, address(_rewardToken.token)) */\n      jump\t// in\n    tag_254:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17625:17947  function _claim(... */\n      pop\n      pop\n      pop\n      pop\n      jump\t// out\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16584:17308  function _claimRewards(... */\n    tag_209:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16750:16757  uint256 */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16770:16786  uint256 _rewards */\n      dup1\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16788:16809  uint256 _exchangeRate */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16813:16926  _getRewards(... */\n      tag_256\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16838:16844  _gauge */\n      dup8\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16858:16870  _rewardToken */\n      dup8\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16884:16889  _user */\n      dup8\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16903:16916  _stakeBalance */\n      dup8\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16813:16824  _getRewards */\n      tag_164\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16813:16926  _getRewards(... */\n      jump\t// in\n    tag_256:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16769:16926  (uint256 _rewards, uint256 _exchangeRate) = _getRewards(... */\n      swap2\n      pop\n      swap2\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17054:17067  _exchangeRate */\n      dup1\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16937:16970  userGaugeRewardTokenExchangeRates */\n      0x01\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16937:16977  userGaugeRewardTokenExchangeRates[_user] */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16971:16976  _user */\n      dup8\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16937:16977  userGaugeRewardTokenExchangeRates[_user] */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      dup2\n      mstore\n      0x20\n      add\n      swap1\n      dup2\n      mstore\n      0x20\n      add\n      0x00\n      keccak256\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16937:16985  userGaugeRewardTokenExchangeRates[_user][_gauge] */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16978:16984  _gauge */\n      dup10\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16937:16985  userGaugeRewardTokenExchangeRates[_user][_gauge] */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      dup2\n      mstore\n      0x20\n      add\n      swap1\n      dup2\n      mstore\n      0x20\n      add\n      0x00\n      keccak256\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16937:17005  userGaugeRewardTokenExchangeRates[_user][_gauge][_rewardToken.token] */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16986:16998  _rewardToken */\n      dup9\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16986:17004  _rewardToken.token */\n      0x00\n      add\n      mload\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16937:17005  userGaugeRewardTokenExchangeRates[_user][_gauge][_rewardToken.token] */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      dup2\n      mstore\n      0x20\n      add\n      swap1\n      dup2\n      mstore\n      0x20\n      add\n      0x00\n      keccak256\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16937:17051  userGaugeRewardTokenExchangeRates[_user][_gauge][_rewardToken.token][... */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17019:17031  _rewardToken */\n      dup9\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17019:17041  _rewardToken.timestamp */\n      0x20\n      add\n      mload\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16937:17051  userGaugeRewardTokenExchangeRates[_user][_gauge][_rewardToken.token][... */\n      0xffffffffffffffff\n      and\n      0xffffffffffffffff\n      and\n      dup2\n      mstore\n      0x20\n      add\n      swap1\n      dup2\n      mstore\n      0x20\n      add\n      0x00\n      keccak256\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16937:17067  userGaugeRewardTokenExchangeRates[_user][_gauge][_rewardToken.token][... */\n      dup2\n      swap1\n      sstore\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17093:17094  0 */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17082:17090  _rewards */\n      dup3\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17082:17094  _rewards > 0 */\n      gt\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17078:17276  if (_rewards > 0) {... */\n      iszero\n      tag_257\n      jumpi\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17164:17172  _rewards */\n      dup2\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17110:17133  userRewardTokenBalances */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17110:17140  userRewardTokenBalances[_user] */\n      dup1\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17134:17139  _user */\n      dup8\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17110:17140  userRewardTokenBalances[_user] */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      dup2\n      mstore\n      0x20\n      add\n      swap1\n      dup2\n      mstore\n      0x20\n      add\n      0x00\n      keccak256\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17110:17160  userRewardTokenBalances[_user][_rewardToken.token] */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17141:17153  _rewardToken */\n      dup9\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17141:17159  _rewardToken.token */\n      0x00\n      add\n      mload\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17110:17160  userRewardTokenBalances[_user][_rewardToken.token] */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      dup2\n      mstore\n      0x20\n      add\n      swap1\n      dup2\n      mstore\n      0x20\n      add\n      0x00\n      keccak256\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17110:17172  userRewardTokenBalances[_user][_rewardToken.token] += _rewards */\n      dup3\n      dup3\n      sload\n      tag_258\n      swap2\n      swap1\n      tag_195\n      jump\t// in\n    tag_258:\n      swap3\n      pop\n      pop\n      dup2\n      swap1\n      sstore\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17234:17239  _user */\n      dup5\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17191:17265  RewardsClaimed(_gauge, _rewardToken.token, _user, _rewards, _exchangeRate) */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17214:17226  _rewardToken */\n      dup7\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17214:17232  _rewardToken.token */\n      0x00\n      add\n      mload\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17191:17265  RewardsClaimed(_gauge, _rewardToken.token, _user, _rewards, _exchangeRate) */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17206:17212  _gauge */\n      dup9\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17191:17265  RewardsClaimed(_gauge, _rewardToken.token, _user, _rewards, _exchangeRate) */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0x7e27222c50a5510dfc61468d936b48c880bfbd05c1eb59c5be79b06e582369dd\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17241:17249  _rewards */\n      dup6\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17251:17264  _exchangeRate */\n      dup6\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17191:17265  RewardsClaimed(_gauge, _rewardToken.token, _user, _rewards, _exchangeRate) */\n      mload(0x40)\n      tag_259\n      swap3\n      swap2\n      swap1\n      tag_260\n      jump\t// in\n    tag_259:\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      log4\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17078:17276  if (_rewards > 0) {... */\n    tag_257:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17293:17301  _rewards */\n      dup2\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":17286:17301  return _rewards */\n      swap3\n      pop\n      pop\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":16584:17308  function _claimRewards(... */\n      swap5\n      swap4\n      pop\n      pop\n      pop\n      pop\n      jump\t// out\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":13205:13499  function _setUserGaugeRewardTokenLastClaimedTimestamp(... */\n    tag_211:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":13467:13482  block.timestamp */\n      timestamp\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":13368:13492  userGaugeRewardTokenLastClaimedTimestamp[_user][_gauge][_rewardTokenAddress] = uint64(... */\n      0xffffffffffffffff\n      and\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":13368:13408  userGaugeRewardTokenLastClaimedTimestamp */\n      0x02\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":13368:13415  userGaugeRewardTokenLastClaimedTimestamp[_user] */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":13409:13414  _user */\n      dup6\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":13368:13415  userGaugeRewardTokenLastClaimedTimestamp[_user] */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      dup2\n      mstore\n      0x20\n      add\n      swap1\n      dup2\n      mstore\n      0x20\n      add\n      0x00\n      keccak256\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":13368:13423  userGaugeRewardTokenLastClaimedTimestamp[_user][_gauge] */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":13416:13422  _gauge */\n      dup5\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":13368:13423  userGaugeRewardTokenLastClaimedTimestamp[_user][_gauge] */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      dup2\n      mstore\n      0x20\n      add\n      swap1\n      dup2\n      mstore\n      0x20\n      add\n      0x00\n      keccak256\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":13368:13444  userGaugeRewardTokenLastClaimedTimestamp[_user][_gauge][_rewardTokenAddress] */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":13424:13443  _rewardTokenAddress */\n      dup4\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":13368:13444  userGaugeRewardTokenLastClaimedTimestamp[_user][_gauge][_rewardTokenAddress] */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      dup2\n      mstore\n      0x20\n      add\n      swap1\n      dup2\n      mstore\n      0x20\n      add\n      0x00\n      keccak256\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":13368:13492  userGaugeRewardTokenLastClaimedTimestamp[_user][_gauge][_rewardTokenAddress] = uint64(... */\n      dup2\n      swap1\n      sstore\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":13205:13499  function _setUserGaugeRewardTokenLastClaimedTimestamp(... */\n      pop\n      pop\n      pop\n      jump\t// out\n        /* \"@openzeppelin/contracts/utils/Address.sol\":6954:7341  function functionDelegateCall(... */\n    tag_226:\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7095:7107  bytes memory */\n      0x60\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7127:7145  isContract(target) */\n      tag_263\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7138:7144  target */\n      dup5\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7127:7137  isContract */\n      tag_264\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7127:7145  isContract(target) */\n      jump\t// in\n    tag_263:\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7119:7188  require(isContract(target), \"Address: delegate call to non-contract\") */\n      tag_265\n      jumpi\n      mload(0x40)\n      0x08c379a000000000000000000000000000000000000000000000000000000000\n      dup2\n      mstore\n      0x04\n      add\n      tag_266\n      swap1\n      tag_267\n      jump\t// in\n    tag_266:\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      revert\n    tag_265:\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7200:7212  bool success */\n      0x00\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7214:7237  bytes memory returndata */\n      dup1\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7241:7247  target */\n      dup6\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7241:7260  target.delegatecall */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7261:7265  data */\n      dup6\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7241:7266  target.delegatecall(data) */\n      mload(0x40)\n      tag_268\n      swap2\n      swap1\n      tag_269\n      jump\t// in\n    tag_268:\n      0x00\n      mload(0x40)\n      dup1\n      dup4\n      sub\n      dup2\n      dup6\n      gas\n      delegatecall\n      swap2\n      pop\n      pop\n      returndatasize\n      dup1\n      0x00\n      dup2\n      eq\n      tag_272\n      jumpi\n      mload(0x40)\n      swap2\n      pop\n      and(add(returndatasize, 0x3f), not(0x1f))\n      dup3\n      add\n      0x40\n      mstore\n      returndatasize\n      dup3\n      mstore\n      returndatasize\n      0x00\n      0x20\n      dup5\n      add\n      returndatacopy\n      jump(tag_271)\n    tag_272:\n      0x60\n      swap2\n      pop\n    tag_271:\n      pop\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7199:7266  (bool success, bytes memory returndata) = target.delegatecall(data) */\n      swap2\n      pop\n      swap2\n      pop\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7283:7334  verifyCallResult(success, returndata, errorMessage) */\n      tag_273\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7300:7307  success */\n      dup3\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7309:7319  returndata */\n      dup3\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7321:7333  errorMessage */\n      dup7\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7283:7299  verifyCallResult */\n      tag_274\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7283:7334  verifyCallResult(success, returndata, errorMessage) */\n      jump\t// in\n    tag_273:\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7276:7334  return verifyCallResult(success, returndata, errorMessage) */\n      swap3\n      pop\n      pop\n      pop\n        /* \"@openzeppelin/contracts/utils/Address.sol\":6954:7341  function functionDelegateCall(... */\n      swap4\n      swap3\n      pop\n      pop\n      pop\n      jump\t// out\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":3747:4453  function _callOptionalReturn(IERC20 token, bytes memory data) private {... */\n    tag_231:\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4166:4189  bytes memory returndata */\n      0x00\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4192:4261  address(token).functionCall(data, \"SafeERC20: low-level call failed\") */\n      tag_276\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4220:4224  data */\n      dup3\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4192:4261  address(token).functionCall(data, \"SafeERC20: low-level call failed\") */\n      mload(0x40)\n      dup1\n      0x40\n      add\n      0x40\n      mstore\n      dup1\n      0x20\n      dup2\n      mstore\n      0x20\n      add\n      0x5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564\n      dup2\n      mstore\n      pop\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4200:4205  token */\n      dup6\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4192:4219  address(token).functionCall */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      tag_277\n      swap1\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4192:4261  address(token).functionCall(data, \"SafeERC20: low-level call failed\") */\n      swap3\n      swap2\n      swap1\n      0xffffffff\n      and\n      jump\t// in\n    tag_276:\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4166:4261  bytes memory returndata = address(token).functionCall(data, \"SafeERC20: low-level call failed\") */\n      swap1\n      pop\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4295:4296  0 */\n      0x00\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4275:4285  returndata */\n      dup2\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4275:4292  returndata.length */\n      mload\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4275:4296  returndata.length > 0 */\n      gt\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4271:4447  if (returndata.length > 0) {... */\n      iszero\n      tag_278\n      jumpi\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4370:4380  returndata */\n      dup1\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4359:4389  abi.decode(returndata, (bool)) */\n      dup1\n      0x20\n      add\n      swap1\n      mload\n      dup2\n      add\n      swap1\n      tag_279\n      swap2\n      swap1\n      tag_280\n      jump\t// in\n    tag_279:\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4351:4436  require(abi.decode(returndata, (bool)), \"SafeERC20: ERC20 operation did not succeed\") */\n      tag_281\n      jumpi\n      mload(0x40)\n      0x08c379a000000000000000000000000000000000000000000000000000000000\n      dup2\n      mstore\n      0x04\n      add\n      tag_282\n      swap1\n      tag_283\n      jump\t// in\n    tag_282:\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      revert\n    tag_281:\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4271:4447  if (returndata.length > 0) {... */\n    tag_278:\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":3817:4453  {... */\n      pop\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":3747:4453  function _callOptionalReturn(IERC20 token, bytes memory data) private {... */\n      pop\n      pop\n      jump\t// out\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":12579:12855  function _getUserGaugeRewardTokenLastClaimedTimestamp(... */\n    tag_234:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":12746:12753  uint256 */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":12772:12812  userGaugeRewardTokenLastClaimedTimestamp */\n      0x02\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":12772:12819  userGaugeRewardTokenLastClaimedTimestamp[_user] */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":12813:12818  _user */\n      dup6\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":12772:12819  userGaugeRewardTokenLastClaimedTimestamp[_user] */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      dup2\n      mstore\n      0x20\n      add\n      swap1\n      dup2\n      mstore\n      0x20\n      add\n      0x00\n      keccak256\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":12772:12827  userGaugeRewardTokenLastClaimedTimestamp[_user][_gauge] */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":12820:12826  _gauge */\n      dup5\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":12772:12827  userGaugeRewardTokenLastClaimedTimestamp[_user][_gauge] */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      dup2\n      mstore\n      0x20\n      add\n      swap1\n      dup2\n      mstore\n      0x20\n      add\n      0x00\n      keccak256\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":12772:12848  userGaugeRewardTokenLastClaimedTimestamp[_user][_gauge][_rewardTokenAddress] */\n      0x00\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":12828:12847  _rewardTokenAddress */\n      dup4\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":12772:12848  userGaugeRewardTokenLastClaimedTimestamp[_user][_gauge][_rewardTokenAddress] */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      dup2\n      mstore\n      0x20\n      add\n      swap1\n      dup2\n      mstore\n      0x20\n      add\n      0x00\n      keccak256\n      sload\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":12765:12848  return userGaugeRewardTokenLastClaimedTimestamp[_user][_gauge][_rewardTokenAddress] */\n      swap1\n      pop\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":12579:12855  function _getUserGaugeRewardTokenLastClaimedTimestamp(... */\n      swap4\n      swap3\n      pop\n      pop\n      pop\n      jump\t// out\n        /* \"@openzeppelin/contracts/utils/Address.sol\":1175:1495  function isContract(address account) internal view returns (bool) {... */\n    tag_264:\n        /* \"@openzeppelin/contracts/utils/Address.sol\":1235:1239  bool */\n      0x00\n        /* \"@openzeppelin/contracts/utils/Address.sol\":1487:1488  0 */\n      dup1\n        /* \"@openzeppelin/contracts/utils/Address.sol\":1465:1472  account */\n      dup3\n        /* \"@openzeppelin/contracts/utils/Address.sol\":1465:1484  account.code.length */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n      extcodesize\n        /* \"@openzeppelin/contracts/utils/Address.sol\":1465:1488  account.code.length > 0 */\n      gt\n        /* \"@openzeppelin/contracts/utils/Address.sol\":1458:1488  return account.code.length > 0 */\n      swap1\n      pop\n        /* \"@openzeppelin/contracts/utils/Address.sol\":1175:1495  function isContract(address account) internal view returns (bool) {... */\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7561:8303  function verifyCallResult(... */\n    tag_274:\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7707:7719  bytes memory */\n      0x60\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7735:7742  success */\n      dup4\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7731:8297  if (success) {... */\n      iszero\n      tag_287\n      jumpi\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7765:7775  returndata */\n      dup3\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7758:7775  return returndata */\n      swap1\n      pop\n      jump(tag_286)\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7731:8297  if (success) {... */\n    tag_287:\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7896:7897  0 */\n      0x00\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7876:7886  returndata */\n      dup4\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7876:7893  returndata.length */\n      mload\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7876:7897  returndata.length > 0 */\n      gt\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7872:8287  if (returndata.length > 0) {... */\n      iszero\n      tag_289\n      jumpi\n        /* \"@openzeppelin/contracts/utils/Address.sol\":8120:8130  returndata */\n      dup3\n        /* \"@openzeppelin/contracts/utils/Address.sol\":8114:8131  mload(returndata) */\n      mload\n        /* \"@openzeppelin/contracts/utils/Address.sol\":8180:8195  returndata_size */\n      dup1\n        /* \"@openzeppelin/contracts/utils/Address.sol\":8167:8177  returndata */\n      dup5\n        /* \"@openzeppelin/contracts/utils/Address.sol\":8163:8165  32 */\n      0x20\n        /* \"@openzeppelin/contracts/utils/Address.sol\":8159:8178  add(32, returndata) */\n      add\n        /* \"@openzeppelin/contracts/utils/Address.sol\":8152:8196  revert(add(32, returndata), returndata_size) */\n      revert\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7872:8287  if (returndata.length > 0) {... */\n    tag_289:\n        /* \"@openzeppelin/contracts/utils/Address.sol\":8259:8271  errorMessage */\n      dup2\n        /* \"@openzeppelin/contracts/utils/Address.sol\":8252:8272  revert(errorMessage) */\n      mload(0x40)\n      0x08c379a000000000000000000000000000000000000000000000000000000000\n      dup2\n      mstore\n      0x04\n      add\n      tag_291\n      swap2\n      swap1\n      tag_292\n      jump\t// in\n    tag_291:\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      revert\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7561:8303  function verifyCallResult(... */\n    tag_286:\n      swap4\n      swap3\n      pop\n      pop\n      pop\n      jump\t// out\n        /* \"@openzeppelin/contracts/utils/Address.sol\":3861:4084  function functionCall(... */\n    tag_277:\n        /* \"@openzeppelin/contracts/utils/Address.sol\":3994:4006  bytes memory */\n      0x60\n        /* \"@openzeppelin/contracts/utils/Address.sol\":4025:4077  functionCallWithValue(target, data, 0, errorMessage) */\n      tag_294\n        /* \"@openzeppelin/contracts/utils/Address.sol\":4047:4053  target */\n      dup5\n        /* \"@openzeppelin/contracts/utils/Address.sol\":4055:4059  data */\n      dup5\n        /* \"@openzeppelin/contracts/utils/Address.sol\":4061:4062  0 */\n      0x00\n        /* \"@openzeppelin/contracts/utils/Address.sol\":4064:4076  errorMessage */\n      dup6\n        /* \"@openzeppelin/contracts/utils/Address.sol\":4025:4046  functionCallWithValue */\n      tag_295\n        /* \"@openzeppelin/contracts/utils/Address.sol\":4025:4077  functionCallWithValue(target, data, 0, errorMessage) */\n      jump\t// in\n    tag_294:\n        /* \"@openzeppelin/contracts/utils/Address.sol\":4018:4077  return functionCallWithValue(target, data, 0, errorMessage) */\n      swap1\n      pop\n        /* \"@openzeppelin/contracts/utils/Address.sol\":3861:4084  function functionCall(... */\n      swap4\n      swap3\n      pop\n      pop\n      pop\n      jump\t// out\n        /* \"@openzeppelin/contracts/utils/Address.sol\":4948:5447  function functionCallWithValue(... */\n    tag_295:\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5113:5125  bytes memory */\n      0x60\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5170:5175  value */\n      dup3\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5145:5166  address(this).balance */\n      selfbalance\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5145:5175  address(this).balance >= value */\n      lt\n      iszero\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5137:5218  require(address(this).balance >= value, \"Address: insufficient balance for call\") */\n      tag_297\n      jumpi\n      mload(0x40)\n      0x08c379a000000000000000000000000000000000000000000000000000000000\n      dup2\n      mstore\n      0x04\n      add\n      tag_298\n      swap1\n      tag_299\n      jump\t// in\n    tag_298:\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      revert\n    tag_297:\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5236:5254  isContract(target) */\n      tag_300\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5247:5253  target */\n      dup6\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5236:5246  isContract */\n      tag_264\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5236:5254  isContract(target) */\n      jump\t// in\n    tag_300:\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5228:5288  require(isContract(target), \"Address: call to non-contract\") */\n      tag_301\n      jumpi\n      mload(0x40)\n      0x08c379a000000000000000000000000000000000000000000000000000000000\n      dup2\n      mstore\n      0x04\n      add\n      tag_302\n      swap1\n      tag_303\n      jump\t// in\n    tag_302:\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      revert\n    tag_301:\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5300:5312  bool success */\n      0x00\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5314:5337  bytes memory returndata */\n      dup1\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5341:5347  target */\n      dup7\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5341:5352  target.call */\n      0xffffffffffffffffffffffffffffffffffffffff\n      and\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5360:5365  value */\n      dup6\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5367:5371  data */\n      dup8\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5341:5372  target.call{value: value}(data) */\n      mload(0x40)\n      tag_304\n      swap2\n      swap1\n      tag_269\n      jump\t// in\n    tag_304:\n      0x00\n      mload(0x40)\n      dup1\n      dup4\n      sub\n      dup2\n      dup6\n      dup8\n      gas\n      call\n      swap3\n      pop\n      pop\n      pop\n      returndatasize\n      dup1\n      0x00\n      dup2\n      eq\n      tag_307\n      jumpi\n      mload(0x40)\n      swap2\n      pop\n      and(add(returndatasize, 0x3f), not(0x1f))\n      dup3\n      add\n      0x40\n      mstore\n      returndatasize\n      dup3\n      mstore\n      returndatasize\n      0x00\n      0x20\n      dup5\n      add\n      returndatacopy\n      jump(tag_306)\n    tag_307:\n      0x60\n      swap2\n      pop\n    tag_306:\n      pop\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5299:5372  (bool success, bytes memory returndata) = target.call{value: value}(data) */\n      swap2\n      pop\n      swap2\n      pop\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5389:5440  verifyCallResult(success, returndata, errorMessage) */\n      tag_308\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5406:5413  success */\n      dup3\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5415:5425  returndata */\n      dup3\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5427:5439  errorMessage */\n      dup7\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5389:5405  verifyCallResult */\n      tag_274\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5389:5440  verifyCallResult(success, returndata, errorMessage) */\n      jump\t// in\n    tag_308:\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5382:5440  return verifyCallResult(success, returndata, errorMessage) */\n      swap3\n      pop\n      pop\n      pop\n        /* \"@openzeppelin/contracts/utils/Address.sol\":4948:5447  function functionCallWithValue(... */\n      swap5\n      swap4\n      pop\n      pop\n      pop\n      pop\n      jump\t// out\n    tag_124:\n      mload(0x40)\n      dup1\n      0x40\n      add\n      0x40\n      mstore\n      dup1\n      and(0xffffffffffffffffffffffffffffffffffffffff, 0x00)\n      dup2\n      mstore\n      0x20\n      add\n      and(0xffffffffffffffff, 0x00)\n      dup2\n      mstore\n      pop\n      swap1\n      jump\t// out\n        /* \"#utility.yul\":7:146   */\n    tag_310:\n        /* \"#utility.yul\":53:58   */\n      0x00\n        /* \"#utility.yul\":91:97   */\n      dup2\n        /* \"#utility.yul\":78:98   */\n      calldataload\n        /* \"#utility.yul\":69:98   */\n      swap1\n      pop\n        /* \"#utility.yul\":107:140   */\n      tag_312\n        /* \"#utility.yul\":134:139   */\n      dup2\n        /* \"#utility.yul\":107:140   */\n      tag_313\n      jump\t// in\n    tag_312:\n        /* \"#utility.yul\":59:146   */\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":167:746   */\n    tag_314:\n        /* \"#utility.yul\":251:259   */\n      0x00\n        /* \"#utility.yul\":261:267   */\n      dup1\n        /* \"#utility.yul\":311:314   */\n      dup4\n        /* \"#utility.yul\":304:308   */\n      0x1f\n        /* \"#utility.yul\":296:302   */\n      dup5\n        /* \"#utility.yul\":292:309   */\n      add\n        /* \"#utility.yul\":288:315   */\n      slt\n        /* \"#utility.yul\":278:280   */\n      tag_316\n      jumpi\n        /* \"#utility.yul\":319:398   */\n      tag_317\n      tag_318\n      jump\t// in\n    tag_317:\n        /* \"#utility.yul\":278:280   */\n    tag_316:\n        /* \"#utility.yul\":432:438   */\n      dup3\n        /* \"#utility.yul\":419:439   */\n      calldataload\n        /* \"#utility.yul\":409:439   */\n      swap1\n      pop\n        /* \"#utility.yul\":462:480   */\n      0xffffffffffffffff\n        /* \"#utility.yul\":454:460   */\n      dup2\n        /* \"#utility.yul\":451:481   */\n      gt\n        /* \"#utility.yul\":448:450   */\n      iszero\n      tag_319\n      jumpi\n        /* \"#utility.yul\":484:563   */\n      tag_320\n      tag_321\n      jump\t// in\n    tag_320:\n        /* \"#utility.yul\":448:450   */\n    tag_319:\n        /* \"#utility.yul\":598:602   */\n      0x20\n        /* \"#utility.yul\":590:596   */\n      dup4\n        /* \"#utility.yul\":586:603   */\n      add\n        /* \"#utility.yul\":574:603   */\n      swap2\n      pop\n        /* \"#utility.yul\":652:655   */\n      dup4\n        /* \"#utility.yul\":644:648   */\n      0x20\n        /* \"#utility.yul\":636:642   */\n      dup3\n        /* \"#utility.yul\":632:649   */\n      mul\n        /* \"#utility.yul\":622:630   */\n      dup4\n        /* \"#utility.yul\":618:650   */\n      add\n        /* \"#utility.yul\":615:656   */\n      gt\n        /* \"#utility.yul\":612:614   */\n      iszero\n      tag_322\n      jumpi\n        /* \"#utility.yul\":659:738   */\n      tag_323\n      tag_324\n      jump\t// in\n    tag_323:\n        /* \"#utility.yul\":612:614   */\n    tag_322:\n        /* \"#utility.yul\":268:746   */\n      swap3\n      pop\n      swap3\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":752:889   */\n    tag_325:\n        /* \"#utility.yul\":806:811   */\n      0x00\n        /* \"#utility.yul\":837:843   */\n      dup2\n        /* \"#utility.yul\":831:844   */\n      mload\n        /* \"#utility.yul\":822:844   */\n      swap1\n      pop\n        /* \"#utility.yul\":853:883   */\n      tag_327\n        /* \"#utility.yul\":877:882   */\n      dup2\n        /* \"#utility.yul\":853:883   */\n      tag_328\n      jump\t// in\n    tag_327:\n        /* \"#utility.yul\":812:889   */\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":895:1060   */\n    tag_329:\n        /* \"#utility.yul\":954:959   */\n      0x00\n        /* \"#utility.yul\":992:998   */\n      dup2\n        /* \"#utility.yul\":979:999   */\n      calldataload\n        /* \"#utility.yul\":970:999   */\n      swap1\n      pop\n        /* \"#utility.yul\":1008:1054   */\n      tag_331\n        /* \"#utility.yul\":1048:1053   */\n      dup2\n        /* \"#utility.yul\":1008:1054   */\n      tag_332\n      jump\t// in\n    tag_331:\n        /* \"#utility.yul\":960:1060   */\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":1066:1243   */\n    tag_333:\n        /* \"#utility.yul\":1131:1136   */\n      0x00\n        /* \"#utility.yul\":1169:1175   */\n      dup2\n        /* \"#utility.yul\":1156:1176   */\n      calldataload\n        /* \"#utility.yul\":1147:1176   */\n      swap1\n      pop\n        /* \"#utility.yul\":1185:1237   */\n      tag_335\n        /* \"#utility.yul\":1231:1236   */\n      dup2\n        /* \"#utility.yul\":1185:1237   */\n      tag_336\n      jump\t// in\n    tag_335:\n        /* \"#utility.yul\":1137:1243   */\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":1249:1420   */\n    tag_337:\n        /* \"#utility.yul\":1311:1316   */\n      0x00\n        /* \"#utility.yul\":1349:1355   */\n      dup2\n        /* \"#utility.yul\":1336:1356   */\n      calldataload\n        /* \"#utility.yul\":1327:1356   */\n      swap1\n      pop\n        /* \"#utility.yul\":1365:1414   */\n      tag_339\n        /* \"#utility.yul\":1408:1413   */\n      dup2\n        /* \"#utility.yul\":1365:1414   */\n      tag_340\n      jump\t// in\n    tag_339:\n        /* \"#utility.yul\":1317:1420   */\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":1464:2060   */\n    tag_341:\n        /* \"#utility.yul\":1542:1547   */\n      0x00\n        /* \"#utility.yul\":1586:1590   */\n      0x40\n        /* \"#utility.yul\":1574:1583   */\n      dup3\n        /* \"#utility.yul\":1569:1572   */\n      dup5\n        /* \"#utility.yul\":1565:1584   */\n      sub\n        /* \"#utility.yul\":1561:1591   */\n      slt\n        /* \"#utility.yul\":1558:1560   */\n      iszero\n      tag_343\n      jumpi\n        /* \"#utility.yul\":1594:1673   */\n      tag_344\n      tag_345\n      jump\t// in\n    tag_344:\n        /* \"#utility.yul\":1558:1560   */\n    tag_343:\n        /* \"#utility.yul\":1693:1714   */\n      tag_346\n        /* \"#utility.yul\":1709:1713   */\n      0x40\n        /* \"#utility.yul\":1693:1714   */\n      tag_347\n      jump\t// in\n    tag_346:\n        /* \"#utility.yul\":1684:1714   */\n      swap1\n      pop\n        /* \"#utility.yul\":1774:1775   */\n      0x00\n        /* \"#utility.yul\":1814:1876   */\n      tag_348\n        /* \"#utility.yul\":1872:1875   */\n      dup5\n        /* \"#utility.yul\":1863:1869   */\n      dup3\n        /* \"#utility.yul\":1852:1861   */\n      dup6\n        /* \"#utility.yul\":1848:1870   */\n      add\n        /* \"#utility.yul\":1814:1876   */\n      tag_329\n      jump\t// in\n    tag_348:\n        /* \"#utility.yul\":1807:1811   */\n      0x00\n        /* \"#utility.yul\":1800:1805   */\n      dup4\n        /* \"#utility.yul\":1796:1812   */\n      add\n        /* \"#utility.yul\":1789:1877   */\n      mstore\n        /* \"#utility.yul\":1724:1888   */\n      pop\n        /* \"#utility.yul\":1952:1954   */\n      0x20\n        /* \"#utility.yul\":1993:2041   */\n      tag_349\n        /* \"#utility.yul\":2037:2040   */\n      dup5\n        /* \"#utility.yul\":2028:2034   */\n      dup3\n        /* \"#utility.yul\":2017:2026   */\n      dup6\n        /* \"#utility.yul\":2013:2035   */\n      add\n        /* \"#utility.yul\":1993:2041   */\n      tag_350\n      jump\t// in\n    tag_349:\n        /* \"#utility.yul\":1986:1990   */\n      0x20\n        /* \"#utility.yul\":1979:1984   */\n      dup4\n        /* \"#utility.yul\":1975:1991   */\n      add\n        /* \"#utility.yul\":1968:2042   */\n      mstore\n        /* \"#utility.yul\":1898:2053   */\n      pop\n        /* \"#utility.yul\":1548:2060   */\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":2066:2205   */\n    tag_351:\n        /* \"#utility.yul\":2112:2117   */\n      0x00\n        /* \"#utility.yul\":2150:2156   */\n      dup2\n        /* \"#utility.yul\":2137:2157   */\n      calldataload\n        /* \"#utility.yul\":2128:2157   */\n      swap1\n      pop\n        /* \"#utility.yul\":2166:2199   */\n      tag_353\n        /* \"#utility.yul\":2193:2198   */\n      dup2\n        /* \"#utility.yul\":2166:2199   */\n      tag_354\n      jump\t// in\n    tag_353:\n        /* \"#utility.yul\":2118:2205   */\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":2211:2354   */\n    tag_355:\n        /* \"#utility.yul\":2268:2273   */\n      0x00\n        /* \"#utility.yul\":2299:2305   */\n      dup2\n        /* \"#utility.yul\":2293:2306   */\n      mload\n        /* \"#utility.yul\":2284:2306   */\n      swap1\n      pop\n        /* \"#utility.yul\":2315:2348   */\n      tag_357\n        /* \"#utility.yul\":2342:2347   */\n      dup2\n        /* \"#utility.yul\":2315:2348   */\n      tag_354\n      jump\t// in\n    tag_357:\n        /* \"#utility.yul\":2274:2354   */\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":2360:2497   */\n    tag_350:\n        /* \"#utility.yul\":2405:2410   */\n      0x00\n        /* \"#utility.yul\":2443:2449   */\n      dup2\n        /* \"#utility.yul\":2430:2450   */\n      calldataload\n        /* \"#utility.yul\":2421:2450   */\n      swap1\n      pop\n        /* \"#utility.yul\":2459:2491   */\n      tag_359\n        /* \"#utility.yul\":2485:2490   */\n      dup2\n        /* \"#utility.yul\":2459:2491   */\n      tag_360\n      jump\t// in\n    tag_359:\n        /* \"#utility.yul\":2411:2497   */\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":2503:2832   */\n    tag_50:\n        /* \"#utility.yul\":2562:2568   */\n      0x00\n        /* \"#utility.yul\":2611:2613   */\n      0x20\n        /* \"#utility.yul\":2599:2608   */\n      dup3\n        /* \"#utility.yul\":2590:2597   */\n      dup5\n        /* \"#utility.yul\":2586:2609   */\n      sub\n        /* \"#utility.yul\":2582:2614   */\n      slt\n        /* \"#utility.yul\":2579:2581   */\n      iszero\n      tag_362\n      jumpi\n        /* \"#utility.yul\":2617:2696   */\n      tag_363\n      tag_364\n      jump\t// in\n    tag_363:\n        /* \"#utility.yul\":2579:2581   */\n    tag_362:\n        /* \"#utility.yul\":2737:2738   */\n      0x00\n        /* \"#utility.yul\":2762:2815   */\n      tag_365\n        /* \"#utility.yul\":2807:2814   */\n      dup5\n        /* \"#utility.yul\":2798:2804   */\n      dup3\n        /* \"#utility.yul\":2787:2796   */\n      dup6\n        /* \"#utility.yul\":2783:2805   */\n      add\n        /* \"#utility.yul\":2762:2815   */\n      tag_310\n      jump\t// in\n    tag_365:\n        /* \"#utility.yul\":2752:2815   */\n      swap2\n      pop\n        /* \"#utility.yul\":2708:2825   */\n      pop\n        /* \"#utility.yul\":2569:2832   */\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":2838:3312   */\n    tag_40:\n        /* \"#utility.yul\":2906:2912   */\n      0x00\n        /* \"#utility.yul\":2914:2920   */\n      dup1\n        /* \"#utility.yul\":2963:2965   */\n      0x40\n        /* \"#utility.yul\":2951:2960   */\n      dup4\n        /* \"#utility.yul\":2942:2949   */\n      dup6\n        /* \"#utility.yul\":2938:2961   */\n      sub\n        /* \"#utility.yul\":2934:2966   */\n      slt\n        /* \"#utility.yul\":2931:2933   */\n      iszero\n      tag_367\n      jumpi\n        /* \"#utility.yul\":2969:3048   */\n      tag_368\n      tag_364\n      jump\t// in\n    tag_368:\n        /* \"#utility.yul\":2931:2933   */\n    tag_367:\n        /* \"#utility.yul\":3089:3090   */\n      0x00\n        /* \"#utility.yul\":3114:3167   */\n      tag_369\n        /* \"#utility.yul\":3159:3166   */\n      dup6\n        /* \"#utility.yul\":3150:3156   */\n      dup3\n        /* \"#utility.yul\":3139:3148   */\n      dup7\n        /* \"#utility.yul\":3135:3157   */\n      add\n        /* \"#utility.yul\":3114:3167   */\n      tag_310\n      jump\t// in\n    tag_369:\n        /* \"#utility.yul\":3104:3167   */\n      swap3\n      pop\n        /* \"#utility.yul\":3060:3177   */\n      pop\n        /* \"#utility.yul\":3216:3218   */\n      0x20\n        /* \"#utility.yul\":3242:3295   */\n      tag_370\n        /* \"#utility.yul\":3287:3294   */\n      dup6\n        /* \"#utility.yul\":3278:3284   */\n      dup3\n        /* \"#utility.yul\":3267:3276   */\n      dup7\n        /* \"#utility.yul\":3263:3285   */\n      add\n        /* \"#utility.yul\":3242:3295   */\n      tag_310\n      jump\t// in\n    tag_370:\n        /* \"#utility.yul\":3232:3295   */\n      swap2\n      pop\n        /* \"#utility.yul\":3187:3305   */\n      pop\n        /* \"#utility.yul\":2921:3312   */\n      swap3\n      pop\n      swap3\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":3318:3937   */\n    tag_56:\n        /* \"#utility.yul\":3395:3401   */\n      0x00\n        /* \"#utility.yul\":3403:3409   */\n      dup1\n        /* \"#utility.yul\":3411:3417   */\n      0x00\n        /* \"#utility.yul\":3460:3462   */\n      0x60\n        /* \"#utility.yul\":3448:3457   */\n      dup5\n        /* \"#utility.yul\":3439:3446   */\n      dup7\n        /* \"#utility.yul\":3435:3458   */\n      sub\n        /* \"#utility.yul\":3431:3463   */\n      slt\n        /* \"#utility.yul\":3428:3430   */\n      iszero\n      tag_372\n      jumpi\n        /* \"#utility.yul\":3466:3545   */\n      tag_373\n      tag_364\n      jump\t// in\n    tag_373:\n        /* \"#utility.yul\":3428:3430   */\n    tag_372:\n        /* \"#utility.yul\":3586:3587   */\n      0x00\n        /* \"#utility.yul\":3611:3664   */\n      tag_374\n        /* \"#utility.yul\":3656:3663   */\n      dup7\n        /* \"#utility.yul\":3647:3653   */\n      dup3\n        /* \"#utility.yul\":3636:3645   */\n      dup8\n        /* \"#utility.yul\":3632:3654   */\n      add\n        /* \"#utility.yul\":3611:3664   */\n      tag_310\n      jump\t// in\n    tag_374:\n        /* \"#utility.yul\":3601:3664   */\n      swap4\n      pop\n        /* \"#utility.yul\":3557:3674   */\n      pop\n        /* \"#utility.yul\":3713:3715   */\n      0x20\n        /* \"#utility.yul\":3739:3792   */\n      tag_375\n        /* \"#utility.yul\":3784:3791   */\n      dup7\n        /* \"#utility.yul\":3775:3781   */\n      dup3\n        /* \"#utility.yul\":3764:3773   */\n      dup8\n        /* \"#utility.yul\":3760:3782   */\n      add\n        /* \"#utility.yul\":3739:3792   */\n      tag_310\n      jump\t// in\n    tag_375:\n        /* \"#utility.yul\":3729:3792   */\n      swap3\n      pop\n        /* \"#utility.yul\":3684:3802   */\n      pop\n        /* \"#utility.yul\":3841:3843   */\n      0x40\n        /* \"#utility.yul\":3867:3920   */\n      tag_376\n        /* \"#utility.yul\":3912:3919   */\n      dup7\n        /* \"#utility.yul\":3903:3909   */\n      dup3\n        /* \"#utility.yul\":3892:3901   */\n      dup8\n        /* \"#utility.yul\":3888:3910   */\n      add\n        /* \"#utility.yul\":3867:3920   */\n      tag_310\n      jump\t// in\n    tag_376:\n        /* \"#utility.yul\":3857:3920   */\n      swap2\n      pop\n        /* \"#utility.yul\":3812:3930   */\n      pop\n        /* \"#utility.yul\":3418:3937   */\n      swap3\n      pop\n      swap3\n      pop\n      swap3\n      jump\t// out\n        /* \"#utility.yul\":3943:4732   */\n    tag_82:\n        /* \"#utility.yul\":4041:4047   */\n      0x00\n        /* \"#utility.yul\":4049:4055   */\n      dup1\n        /* \"#utility.yul\":4057:4063   */\n      0x00\n        /* \"#utility.yul\":4065:4071   */\n      dup1\n        /* \"#utility.yul\":4114:4117   */\n      0x80\n        /* \"#utility.yul\":4102:4111   */\n      dup6\n        /* \"#utility.yul\":4093:4100   */\n      dup8\n        /* \"#utility.yul\":4089:4112   */\n      sub\n        /* \"#utility.yul\":4085:4118   */\n      slt\n        /* \"#utility.yul\":4082:4084   */\n      iszero\n      tag_378\n      jumpi\n        /* \"#utility.yul\":4121:4200   */\n      tag_379\n      tag_364\n      jump\t// in\n    tag_379:\n        /* \"#utility.yul\":4082:4084   */\n    tag_378:\n        /* \"#utility.yul\":4241:4242   */\n      0x00\n        /* \"#utility.yul\":4266:4319   */\n      tag_380\n        /* \"#utility.yul\":4311:4318   */\n      dup8\n        /* \"#utility.yul\":4302:4308   */\n      dup3\n        /* \"#utility.yul\":4291:4300   */\n      dup9\n        /* \"#utility.yul\":4287:4309   */\n      add\n        /* \"#utility.yul\":4266:4319   */\n      tag_310\n      jump\t// in\n    tag_380:\n        /* \"#utility.yul\":4256:4319   */\n      swap5\n      pop\n        /* \"#utility.yul\":4212:4329   */\n      pop\n        /* \"#utility.yul\":4368:4370   */\n      0x20\n        /* \"#utility.yul\":4394:4447   */\n      tag_381\n        /* \"#utility.yul\":4439:4446   */\n      dup8\n        /* \"#utility.yul\":4430:4436   */\n      dup3\n        /* \"#utility.yul\":4419:4428   */\n      dup9\n        /* \"#utility.yul\":4415:4437   */\n      add\n        /* \"#utility.yul\":4394:4447   */\n      tag_310\n      jump\t// in\n    tag_381:\n        /* \"#utility.yul\":4384:4447   */\n      swap4\n      pop\n        /* \"#utility.yul\":4339:4457   */\n      pop\n        /* \"#utility.yul\":4496:4498   */\n      0x40\n        /* \"#utility.yul\":4522:4588   */\n      tag_382\n        /* \"#utility.yul\":4580:4587   */\n      dup8\n        /* \"#utility.yul\":4571:4577   */\n      dup3\n        /* \"#utility.yul\":4560:4569   */\n      dup9\n        /* \"#utility.yul\":4556:4578   */\n      add\n        /* \"#utility.yul\":4522:4588   */\n      tag_329\n      jump\t// in\n    tag_382:\n        /* \"#utility.yul\":4512:4588   */\n      swap3\n      pop\n        /* \"#utility.yul\":4467:4598   */\n      pop\n        /* \"#utility.yul\":4637:4639   */\n      0x60\n        /* \"#utility.yul\":4663:4715   */\n      tag_383\n        /* \"#utility.yul\":4707:4714   */\n      dup8\n        /* \"#utility.yul\":4698:4704   */\n      dup3\n        /* \"#utility.yul\":4687:4696   */\n      dup9\n        /* \"#utility.yul\":4683:4705   */\n      add\n        /* \"#utility.yul\":4663:4715   */\n      tag_350\n      jump\t// in\n    tag_383:\n        /* \"#utility.yul\":4653:4715   */\n      swap2\n      pop\n        /* \"#utility.yul\":4608:4725   */\n      pop\n        /* \"#utility.yul\":4072:4732   */\n      swap3\n      swap6\n      swap2\n      swap5\n      pop\n      swap3\n      pop\n      jump\t// out\n        /* \"#utility.yul\":4738:5357   */\n    tag_32:\n        /* \"#utility.yul\":4815:4821   */\n      0x00\n        /* \"#utility.yul\":4823:4829   */\n      dup1\n        /* \"#utility.yul\":4831:4837   */\n      0x00\n        /* \"#utility.yul\":4880:4882   */\n      0x60\n        /* \"#utility.yul\":4868:4877   */\n      dup5\n        /* \"#utility.yul\":4859:4866   */\n      dup7\n        /* \"#utility.yul\":4855:4878   */\n      sub\n        /* \"#utility.yul\":4851:4883   */\n      slt\n        /* \"#utility.yul\":4848:4850   */\n      iszero\n      tag_385\n      jumpi\n        /* \"#utility.yul\":4886:4965   */\n      tag_386\n      tag_364\n      jump\t// in\n    tag_386:\n        /* \"#utility.yul\":4848:4850   */\n    tag_385:\n        /* \"#utility.yul\":5006:5007   */\n      0x00\n        /* \"#utility.yul\":5031:5084   */\n      tag_387\n        /* \"#utility.yul\":5076:5083   */\n      dup7\n        /* \"#utility.yul\":5067:5073   */\n      dup3\n        /* \"#utility.yul\":5056:5065   */\n      dup8\n        /* \"#utility.yul\":5052:5074   */\n      add\n        /* \"#utility.yul\":5031:5084   */\n      tag_310\n      jump\t// in\n    tag_387:\n        /* \"#utility.yul\":5021:5084   */\n      swap4\n      pop\n        /* \"#utility.yul\":4977:5094   */\n      pop\n        /* \"#utility.yul\":5133:5135   */\n      0x20\n        /* \"#utility.yul\":5159:5212   */\n      tag_388\n        /* \"#utility.yul\":5204:5211   */\n      dup7\n        /* \"#utility.yul\":5195:5201   */\n      dup3\n        /* \"#utility.yul\":5184:5193   */\n      dup8\n        /* \"#utility.yul\":5180:5202   */\n      add\n        /* \"#utility.yul\":5159:5212   */\n      tag_310\n      jump\t// in\n    tag_388:\n        /* \"#utility.yul\":5149:5212   */\n      swap3\n      pop\n        /* \"#utility.yul\":5104:5222   */\n      pop\n        /* \"#utility.yul\":5261:5263   */\n      0x40\n        /* \"#utility.yul\":5287:5340   */\n      tag_389\n        /* \"#utility.yul\":5332:5339   */\n      dup7\n        /* \"#utility.yul\":5323:5329   */\n      dup3\n        /* \"#utility.yul\":5312:5321   */\n      dup8\n        /* \"#utility.yul\":5308:5330   */\n      add\n        /* \"#utility.yul\":5287:5340   */\n      tag_351\n      jump\t// in\n    tag_389:\n        /* \"#utility.yul\":5277:5340   */\n      swap2\n      pop\n        /* \"#utility.yul\":5232:5350   */\n      pop\n        /* \"#utility.yul\":4838:5357   */\n      swap3\n      pop\n      swap3\n      pop\n      swap3\n      jump\t// out\n        /* \"#utility.yul\":5363:5863   */\n    tag_26:\n        /* \"#utility.yul\":5444:5450   */\n      0x00\n        /* \"#utility.yul\":5452:5458   */\n      dup1\n        /* \"#utility.yul\":5501:5503   */\n      0x40\n        /* \"#utility.yul\":5489:5498   */\n      dup4\n        /* \"#utility.yul\":5480:5487   */\n      dup6\n        /* \"#utility.yul\":5476:5499   */\n      sub\n        /* \"#utility.yul\":5472:5504   */\n      slt\n        /* \"#utility.yul\":5469:5471   */\n      iszero\n      tag_391\n      jumpi\n        /* \"#utility.yul\":5507:5586   */\n      tag_392\n      tag_364\n      jump\t// in\n    tag_392:\n        /* \"#utility.yul\":5469:5471   */\n    tag_391:\n        /* \"#utility.yul\":5627:5628   */\n      0x00\n        /* \"#utility.yul\":5652:5705   */\n      tag_393\n        /* \"#utility.yul\":5697:5704   */\n      dup6\n        /* \"#utility.yul\":5688:5694   */\n      dup3\n        /* \"#utility.yul\":5677:5686   */\n      dup7\n        /* \"#utility.yul\":5673:5695   */\n      add\n        /* \"#utility.yul\":5652:5705   */\n      tag_310\n      jump\t// in\n    tag_393:\n        /* \"#utility.yul\":5642:5705   */\n      swap3\n      pop\n        /* \"#utility.yul\":5598:5715   */\n      pop\n        /* \"#utility.yul\":5754:5756   */\n      0x20\n        /* \"#utility.yul\":5780:5846   */\n      tag_394\n        /* \"#utility.yul\":5838:5845   */\n      dup6\n        /* \"#utility.yul\":5829:5835   */\n      dup3\n        /* \"#utility.yul\":5818:5827   */\n      dup7\n        /* \"#utility.yul\":5814:5836   */\n      add\n        /* \"#utility.yul\":5780:5846   */\n      tag_329\n      jump\t// in\n    tag_394:\n        /* \"#utility.yul\":5770:5846   */\n      swap2\n      pop\n        /* \"#utility.yul\":5725:5856   */\n      pop\n        /* \"#utility.yul\":5459:5863   */\n      swap3\n      pop\n      swap3\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":5869:6512   */\n    tag_92:\n        /* \"#utility.yul\":5958:5964   */\n      0x00\n        /* \"#utility.yul\":5966:5972   */\n      dup1\n        /* \"#utility.yul\":5974:5980   */\n      0x00\n        /* \"#utility.yul\":6023:6025   */\n      0x60\n        /* \"#utility.yul\":6011:6020   */\n      dup5\n        /* \"#utility.yul\":6002:6009   */\n      dup7\n        /* \"#utility.yul\":5998:6021   */\n      sub\n        /* \"#utility.yul\":5994:6026   */\n      slt\n        /* \"#utility.yul\":5991:5993   */\n      iszero\n      tag_396\n      jumpi\n        /* \"#utility.yul\":6029:6108   */\n      tag_397\n      tag_364\n      jump\t// in\n    tag_397:\n        /* \"#utility.yul\":5991:5993   */\n    tag_396:\n        /* \"#utility.yul\":6149:6150   */\n      0x00\n        /* \"#utility.yul\":6174:6227   */\n      tag_398\n        /* \"#utility.yul\":6219:6226   */\n      dup7\n        /* \"#utility.yul\":6210:6216   */\n      dup3\n        /* \"#utility.yul\":6199:6208   */\n      dup8\n        /* \"#utility.yul\":6195:6217   */\n      add\n        /* \"#utility.yul\":6174:6227   */\n      tag_310\n      jump\t// in\n    tag_398:\n        /* \"#utility.yul\":6164:6227   */\n      swap4\n      pop\n        /* \"#utility.yul\":6120:6237   */\n      pop\n        /* \"#utility.yul\":6276:6278   */\n      0x20\n        /* \"#utility.yul\":6302:6368   */\n      tag_399\n        /* \"#utility.yul\":6360:6367   */\n      dup7\n        /* \"#utility.yul\":6351:6357   */\n      dup3\n        /* \"#utility.yul\":6340:6349   */\n      dup8\n        /* \"#utility.yul\":6336:6358   */\n      add\n        /* \"#utility.yul\":6302:6368   */\n      tag_329\n      jump\t// in\n    tag_399:\n        /* \"#utility.yul\":6292:6368   */\n      swap3\n      pop\n        /* \"#utility.yul\":6247:6378   */\n      pop\n        /* \"#utility.yul\":6417:6419   */\n      0x40\n        /* \"#utility.yul\":6443:6495   */\n      tag_400\n        /* \"#utility.yul\":6487:6494   */\n      dup7\n        /* \"#utility.yul\":6478:6484   */\n      dup3\n        /* \"#utility.yul\":6467:6476   */\n      dup8\n        /* \"#utility.yul\":6463:6485   */\n      add\n        /* \"#utility.yul\":6443:6495   */\n      tag_350\n      jump\t// in\n    tag_400:\n        /* \"#utility.yul\":6433:6495   */\n      swap2\n      pop\n        /* \"#utility.yul\":6388:6505   */\n      pop\n        /* \"#utility.yul\":5981:6512   */\n      swap3\n      pop\n      swap3\n      pop\n      swap3\n      jump\t// out\n        /* \"#utility.yul\":6518:7196   */\n    tag_87:\n        /* \"#utility.yul\":6624:6630   */\n      0x00\n        /* \"#utility.yul\":6632:6638   */\n      dup1\n        /* \"#utility.yul\":6640:6646   */\n      0x00\n        /* \"#utility.yul\":6689:6692   */\n      0x80\n        /* \"#utility.yul\":6677:6686   */\n      dup5\n        /* \"#utility.yul\":6668:6675   */\n      dup7\n        /* \"#utility.yul\":6664:6687   */\n      sub\n        /* \"#utility.yul\":6660:6693   */\n      slt\n        /* \"#utility.yul\":6657:6659   */\n      iszero\n      tag_402\n      jumpi\n        /* \"#utility.yul\":6696:6775   */\n      tag_403\n      tag_364\n      jump\t// in\n    tag_403:\n        /* \"#utility.yul\":6657:6659   */\n    tag_402:\n        /* \"#utility.yul\":6816:6817   */\n      0x00\n        /* \"#utility.yul\":6841:6894   */\n      tag_404\n        /* \"#utility.yul\":6886:6893   */\n      dup7\n        /* \"#utility.yul\":6877:6883   */\n      dup3\n        /* \"#utility.yul\":6866:6875   */\n      dup8\n        /* \"#utility.yul\":6862:6884   */\n      add\n        /* \"#utility.yul\":6841:6894   */\n      tag_310\n      jump\t// in\n    tag_404:\n        /* \"#utility.yul\":6831:6894   */\n      swap4\n      pop\n        /* \"#utility.yul\":6787:6904   */\n      pop\n        /* \"#utility.yul\":6943:6945   */\n      0x20\n        /* \"#utility.yul\":6969:7051   */\n      tag_405\n        /* \"#utility.yul\":7043:7050   */\n      dup7\n        /* \"#utility.yul\":7034:7040   */\n      dup3\n        /* \"#utility.yul\":7023:7032   */\n      dup8\n        /* \"#utility.yul\":7019:7041   */\n      add\n        /* \"#utility.yul\":6969:7051   */\n      tag_341\n      jump\t// in\n    tag_405:\n        /* \"#utility.yul\":6959:7051   */\n      swap3\n      pop\n        /* \"#utility.yul\":6914:7061   */\n      pop\n        /* \"#utility.yul\":7100:7102   */\n      0x60\n        /* \"#utility.yul\":7126:7179   */\n      tag_406\n        /* \"#utility.yul\":7171:7178   */\n      dup7\n        /* \"#utility.yul\":7162:7168   */\n      dup3\n        /* \"#utility.yul\":7151:7160   */\n      dup8\n        /* \"#utility.yul\":7147:7169   */\n      add\n        /* \"#utility.yul\":7126:7179   */\n      tag_310\n      jump\t// in\n    tag_406:\n        /* \"#utility.yul\":7116:7179   */\n      swap2\n      pop\n        /* \"#utility.yul\":7071:7189   */\n      pop\n        /* \"#utility.yul\":6647:7196   */\n      swap3\n      pop\n      swap3\n      pop\n      swap3\n      jump\t// out\n        /* \"#utility.yul\":7202:7676   */\n    tag_44:\n        /* \"#utility.yul\":7270:7276   */\n      0x00\n        /* \"#utility.yul\":7278:7284   */\n      dup1\n        /* \"#utility.yul\":7327:7329   */\n      0x40\n        /* \"#utility.yul\":7315:7324   */\n      dup4\n        /* \"#utility.yul\":7306:7313   */\n      dup6\n        /* \"#utility.yul\":7302:7325   */\n      sub\n        /* \"#utility.yul\":7298:7330   */\n      slt\n        /* \"#utility.yul\":7295:7297   */\n      iszero\n      tag_408\n      jumpi\n        /* \"#utility.yul\":7333:7412   */\n      tag_409\n      tag_364\n      jump\t// in\n    tag_409:\n        /* \"#utility.yul\":7295:7297   */\n    tag_408:\n        /* \"#utility.yul\":7453:7454   */\n      0x00\n        /* \"#utility.yul\":7478:7531   */\n      tag_410\n        /* \"#utility.yul\":7523:7530   */\n      dup6\n        /* \"#utility.yul\":7514:7520   */\n      dup3\n        /* \"#utility.yul\":7503:7512   */\n      dup7\n        /* \"#utility.yul\":7499:7521   */\n      add\n        /* \"#utility.yul\":7478:7531   */\n      tag_310\n      jump\t// in\n    tag_410:\n        /* \"#utility.yul\":7468:7531   */\n      swap3\n      pop\n        /* \"#utility.yul\":7424:7541   */\n      pop\n        /* \"#utility.yul\":7580:7582   */\n      0x20\n        /* \"#utility.yul\":7606:7659   */\n      tag_411\n        /* \"#utility.yul\":7651:7658   */\n      dup6\n        /* \"#utility.yul\":7642:7648   */\n      dup3\n        /* \"#utility.yul\":7631:7640   */\n      dup7\n        /* \"#utility.yul\":7627:7649   */\n      add\n        /* \"#utility.yul\":7606:7659   */\n      tag_351\n      jump\t// in\n    tag_411:\n        /* \"#utility.yul\":7596:7659   */\n      swap2\n      pop\n        /* \"#utility.yul\":7551:7669   */\n      pop\n        /* \"#utility.yul\":7285:7676   */\n      swap3\n      pop\n      swap3\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":7682:8263   */\n    tag_68:\n        /* \"#utility.yul\":7779:7785   */\n      0x00\n        /* \"#utility.yul\":7787:7793   */\n      dup1\n        /* \"#utility.yul\":7836:7838   */\n      0x20\n        /* \"#utility.yul\":7824:7833   */\n      dup4\n        /* \"#utility.yul\":7815:7822   */\n      dup6\n        /* \"#utility.yul\":7811:7834   */\n      sub\n        /* \"#utility.yul\":7807:7839   */\n      slt\n        /* \"#utility.yul\":7804:7806   */\n      iszero\n      tag_413\n      jumpi\n        /* \"#utility.yul\":7842:7921   */\n      tag_414\n      tag_364\n      jump\t// in\n    tag_414:\n        /* \"#utility.yul\":7804:7806   */\n    tag_413:\n        /* \"#utility.yul\":7990:7991   */\n      0x00\n        /* \"#utility.yul\":7979:7988   */\n      dup4\n        /* \"#utility.yul\":7975:7992   */\n      add\n        /* \"#utility.yul\":7962:7993   */\n      calldataload\n        /* \"#utility.yul\":8020:8038   */\n      0xffffffffffffffff\n        /* \"#utility.yul\":8012:8018   */\n      dup2\n        /* \"#utility.yul\":8009:8039   */\n      gt\n        /* \"#utility.yul\":8006:8008   */\n      iszero\n      tag_415\n      jumpi\n        /* \"#utility.yul\":8042:8121   */\n      tag_416\n      tag_417\n      jump\t// in\n    tag_416:\n        /* \"#utility.yul\":8006:8008   */\n    tag_415:\n        /* \"#utility.yul\":8155:8246   */\n      tag_418\n        /* \"#utility.yul\":8238:8245   */\n      dup6\n        /* \"#utility.yul\":8229:8235   */\n      dup3\n        /* \"#utility.yul\":8218:8227   */\n      dup7\n        /* \"#utility.yul\":8214:8236   */\n      add\n        /* \"#utility.yul\":8155:8246   */\n      tag_314\n      jump\t// in\n    tag_418:\n        /* \"#utility.yul\":8137:8246   */\n      swap3\n      pop\n      swap3\n      pop\n        /* \"#utility.yul\":7933:8256   */\n      pop\n        /* \"#utility.yul\":7794:8263   */\n      swap3\n      pop\n      swap3\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":8269:8614   */\n    tag_280:\n        /* \"#utility.yul\":8336:8342   */\n      0x00\n        /* \"#utility.yul\":8385:8387   */\n      0x20\n        /* \"#utility.yul\":8373:8382   */\n      dup3\n        /* \"#utility.yul\":8364:8371   */\n      dup5\n        /* \"#utility.yul\":8360:8383   */\n      sub\n        /* \"#utility.yul\":8356:8388   */\n      slt\n        /* \"#utility.yul\":8353:8355   */\n      iszero\n      tag_420\n      jumpi\n        /* \"#utility.yul\":8391:8470   */\n      tag_421\n      tag_364\n      jump\t// in\n    tag_421:\n        /* \"#utility.yul\":8353:8355   */\n    tag_420:\n        /* \"#utility.yul\":8511:8512   */\n      0x00\n        /* \"#utility.yul\":8536:8597   */\n      tag_422\n        /* \"#utility.yul\":8589:8596   */\n      dup5\n        /* \"#utility.yul\":8580:8586   */\n      dup3\n        /* \"#utility.yul\":8569:8578   */\n      dup6\n        /* \"#utility.yul\":8565:8587   */\n      add\n        /* \"#utility.yul\":8536:8597   */\n      tag_325\n      jump\t// in\n    tag_422:\n        /* \"#utility.yul\":8526:8597   */\n      swap2\n      pop\n        /* \"#utility.yul\":8482:8607   */\n      pop\n        /* \"#utility.yul\":8343:8614   */\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":8620:9627   */\n    tag_103:\n        /* \"#utility.yul\":8763:8769   */\n      0x00\n        /* \"#utility.yul\":8771:8777   */\n      dup1\n        /* \"#utility.yul\":8779:8785   */\n      0x00\n        /* \"#utility.yul\":8787:8793   */\n      dup1\n        /* \"#utility.yul\":8795:8801   */\n      0x00\n        /* \"#utility.yul\":8844:8847   */\n      0xa0\n        /* \"#utility.yul\":8832:8841   */\n      dup7\n        /* \"#utility.yul\":8823:8830   */\n      dup9\n        /* \"#utility.yul\":8819:8842   */\n      sub\n        /* \"#utility.yul\":8815:8848   */\n      slt\n        /* \"#utility.yul\":8812:8814   */\n      iszero\n      tag_424\n      jumpi\n        /* \"#utility.yul\":8851:8930   */\n      tag_425\n      tag_364\n      jump\t// in\n    tag_425:\n        /* \"#utility.yul\":8812:8814   */\n    tag_424:\n        /* \"#utility.yul\":8971:8972   */\n      0x00\n        /* \"#utility.yul\":8996:9068   */\n      tag_426\n        /* \"#utility.yul\":9060:9067   */\n      dup9\n        /* \"#utility.yul\":9051:9057   */\n      dup3\n        /* \"#utility.yul\":9040:9049   */\n      dup10\n        /* \"#utility.yul\":9036:9058   */\n      add\n        /* \"#utility.yul\":8996:9068   */\n      tag_333\n      jump\t// in\n    tag_426:\n        /* \"#utility.yul\":8986:9068   */\n      swap6\n      pop\n        /* \"#utility.yul\":8942:9078   */\n      pop\n        /* \"#utility.yul\":9117:9119   */\n      0x20\n        /* \"#utility.yul\":9143:9212   */\n      tag_427\n        /* \"#utility.yul\":9204:9211   */\n      dup9\n        /* \"#utility.yul\":9195:9201   */\n      dup3\n        /* \"#utility.yul\":9184:9193   */\n      dup10\n        /* \"#utility.yul\":9180:9202   */\n      add\n        /* \"#utility.yul\":9143:9212   */\n      tag_337\n      jump\t// in\n    tag_427:\n        /* \"#utility.yul\":9133:9212   */\n      swap5\n      pop\n        /* \"#utility.yul\":9088:9222   */\n      pop\n        /* \"#utility.yul\":9261:9263   */\n      0x40\n        /* \"#utility.yul\":9287:9340   */\n      tag_428\n        /* \"#utility.yul\":9332:9339   */\n      dup9\n        /* \"#utility.yul\":9323:9329   */\n      dup3\n        /* \"#utility.yul\":9312:9321   */\n      dup10\n        /* \"#utility.yul\":9308:9330   */\n      add\n        /* \"#utility.yul\":9287:9340   */\n      tag_351\n      jump\t// in\n    tag_428:\n        /* \"#utility.yul\":9277:9340   */\n      swap4\n      pop\n        /* \"#utility.yul\":9232:9350   */\n      pop\n        /* \"#utility.yul\":9389:9391   */\n      0x60\n        /* \"#utility.yul\":9415:9481   */\n      tag_429\n        /* \"#utility.yul\":9473:9480   */\n      dup9\n        /* \"#utility.yul\":9464:9470   */\n      dup3\n        /* \"#utility.yul\":9453:9462   */\n      dup10\n        /* \"#utility.yul\":9449:9471   */\n      add\n        /* \"#utility.yul\":9415:9481   */\n      tag_329\n      jump\t// in\n    tag_429:\n        /* \"#utility.yul\":9405:9481   */\n      swap3\n      pop\n        /* \"#utility.yul\":9360:9491   */\n      pop\n        /* \"#utility.yul\":9530:9533   */\n      0x80\n        /* \"#utility.yul\":9557:9610   */\n      tag_430\n        /* \"#utility.yul\":9602:9609   */\n      dup9\n        /* \"#utility.yul\":9593:9599   */\n      dup3\n        /* \"#utility.yul\":9582:9591   */\n      dup10\n        /* \"#utility.yul\":9578:9600   */\n      add\n        /* \"#utility.yul\":9557:9610   */\n      tag_351\n      jump\t// in\n    tag_430:\n        /* \"#utility.yul\":9547:9610   */\n      swap2\n      pop\n        /* \"#utility.yul\":9501:9620   */\n      pop\n        /* \"#utility.yul\":8802:9627   */\n      swap3\n      swap6\n      pop\n      swap3\n      swap6\n      swap1\n      swap4\n      pop\n      jump\t// out\n        /* \"#utility.yul\":9633:9984   */\n    tag_119:\n        /* \"#utility.yul\":9703:9709   */\n      0x00\n        /* \"#utility.yul\":9752:9754   */\n      0x20\n        /* \"#utility.yul\":9740:9749   */\n      dup3\n        /* \"#utility.yul\":9731:9738   */\n      dup5\n        /* \"#utility.yul\":9727:9750   */\n      sub\n        /* \"#utility.yul\":9723:9755   */\n      slt\n        /* \"#utility.yul\":9720:9722   */\n      iszero\n      tag_432\n      jumpi\n        /* \"#utility.yul\":9758:9837   */\n      tag_433\n      tag_364\n      jump\t// in\n    tag_433:\n        /* \"#utility.yul\":9720:9722   */\n    tag_432:\n        /* \"#utility.yul\":9878:9879   */\n      0x00\n        /* \"#utility.yul\":9903:9967   */\n      tag_434\n        /* \"#utility.yul\":9959:9966   */\n      dup5\n        /* \"#utility.yul\":9950:9956   */\n      dup3\n        /* \"#utility.yul\":9939:9948   */\n      dup6\n        /* \"#utility.yul\":9935:9957   */\n      add\n        /* \"#utility.yul\":9903:9967   */\n      tag_355\n      jump\t// in\n    tag_434:\n        /* \"#utility.yul\":9893:9967   */\n      swap2\n      pop\n        /* \"#utility.yul\":9849:9977   */\n      pop\n        /* \"#utility.yul\":9710:9984   */\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":9990:10182   */\n    tag_435:\n        /* \"#utility.yul\":10077:10087   */\n      0x00\n        /* \"#utility.yul\":10112:10176   */\n      tag_437\n        /* \"#utility.yul\":10172:10175   */\n      dup4\n        /* \"#utility.yul\":10164:10170   */\n      dup4\n        /* \"#utility.yul\":10112:10176   */\n      tag_438\n      jump\t// in\n    tag_437:\n        /* \"#utility.yul\":10098:10176   */\n      swap1\n      pop\n        /* \"#utility.yul\":10088:10182   */\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":10188:10306   */\n    tag_439:\n        /* \"#utility.yul\":10275:10299   */\n      tag_441\n        /* \"#utility.yul\":10293:10298   */\n      dup2\n        /* \"#utility.yul\":10275:10299   */\n      tag_442\n      jump\t// in\n    tag_441:\n        /* \"#utility.yul\":10270:10273   */\n      dup3\n        /* \"#utility.yul\":10263:10300   */\n      mstore\n        /* \"#utility.yul\":10253:10306   */\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":10338:11321   */\n    tag_443:\n        /* \"#utility.yul\":10475:10478   */\n      0x00\n        /* \"#utility.yul\":10504:10567   */\n      tag_445\n        /* \"#utility.yul\":10561:10566   */\n      dup3\n        /* \"#utility.yul\":10504:10567   */\n      tag_446\n      jump\t// in\n    tag_445:\n        /* \"#utility.yul\":10583:10678   */\n      tag_447\n        /* \"#utility.yul\":10671:10677   */\n      dup2\n        /* \"#utility.yul\":10666:10669   */\n      dup6\n        /* \"#utility.yul\":10583:10678   */\n      tag_448\n      jump\t// in\n    tag_447:\n        /* \"#utility.yul\":10576:10678   */\n      swap4\n      pop\n        /* \"#utility.yul\":10704:10707   */\n      dup4\n        /* \"#utility.yul\":10749:10753   */\n      0x20\n        /* \"#utility.yul\":10741:10747   */\n      dup3\n        /* \"#utility.yul\":10737:10754   */\n      mul\n        /* \"#utility.yul\":10732:10735   */\n      dup6\n        /* \"#utility.yul\":10728:10755   */\n      add\n        /* \"#utility.yul\":10779:10844   */\n      tag_449\n        /* \"#utility.yul\":10838:10843   */\n      dup6\n        /* \"#utility.yul\":10779:10844   */\n      tag_450\n      jump\t// in\n    tag_449:\n        /* \"#utility.yul\":10867:10874   */\n      dup1\n        /* \"#utility.yul\":10898:10899   */\n      0x00\n        /* \"#utility.yul\":10883:11276   */\n    tag_451:\n        /* \"#utility.yul\":10908:10914   */\n      dup6\n        /* \"#utility.yul\":10905:10906   */\n      dup2\n        /* \"#utility.yul\":10902:10915   */\n      lt\n        /* \"#utility.yul\":10883:11276   */\n      iszero\n      tag_453\n      jumpi\n        /* \"#utility.yul\":10979:10988   */\n      dup5\n        /* \"#utility.yul\":10973:10977   */\n      dup5\n        /* \"#utility.yul\":10969:10989   */\n      sub\n        /* \"#utility.yul\":10964:10967   */\n      dup10\n        /* \"#utility.yul\":10957:10990   */\n      mstore\n        /* \"#utility.yul\":11030:11036   */\n      dup2\n        /* \"#utility.yul\":11024:11037   */\n      mload\n        /* \"#utility.yul\":11058:11140   */\n      tag_454\n        /* \"#utility.yul\":11135:11139   */\n      dup6\n        /* \"#utility.yul\":11120:11133   */\n      dup3\n        /* \"#utility.yul\":11058:11140   */\n      tag_435\n      jump\t// in\n    tag_454:\n        /* \"#utility.yul\":11050:11140   */\n      swap5\n      pop\n        /* \"#utility.yul\":11163:11232   */\n      tag_455\n        /* \"#utility.yul\":11225:11231   */\n      dup4\n        /* \"#utility.yul\":11163:11232   */\n      tag_456\n      jump\t// in\n    tag_455:\n        /* \"#utility.yul\":11153:11232   */\n      swap3\n      pop\n        /* \"#utility.yul\":11261:11265   */\n      0x20\n        /* \"#utility.yul\":11256:11259   */\n      dup11\n        /* \"#utility.yul\":11252:11266   */\n      add\n        /* \"#utility.yul\":11245:11266   */\n      swap10\n      pop\n        /* \"#utility.yul\":10943:11276   */\n      pop\n        /* \"#utility.yul\":10930:10931   */\n      0x01\n        /* \"#utility.yul\":10927:10928   */\n      dup2\n        /* \"#utility.yul\":10923:10932   */\n      add\n        /* \"#utility.yul\":10918:10932   */\n      swap1\n      pop\n        /* \"#utility.yul\":10883:11276   */\n      jump(tag_451)\n    tag_453:\n        /* \"#utility.yul\":10887:10901   */\n      pop\n        /* \"#utility.yul\":11292:11296   */\n      dup3\n        /* \"#utility.yul\":11285:11296   */\n      swap8\n      pop\n        /* \"#utility.yul\":11312:11315   */\n      dup8\n        /* \"#utility.yul\":11305:11315   */\n      swap6\n      pop\n        /* \"#utility.yul\":10480:11321   */\n      pop\n      pop\n      pop\n      pop\n      pop\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":11327:11667   */\n    tag_438:\n        /* \"#utility.yul\":11403:11406   */\n      0x00\n        /* \"#utility.yul\":11431:11469   */\n      tag_458\n        /* \"#utility.yul\":11463:11468   */\n      dup3\n        /* \"#utility.yul\":11431:11469   */\n      tag_459\n      jump\t// in\n    tag_458:\n        /* \"#utility.yul\":11485:11545   */\n      tag_460\n        /* \"#utility.yul\":11538:11544   */\n      dup2\n        /* \"#utility.yul\":11533:11536   */\n      dup6\n        /* \"#utility.yul\":11485:11545   */\n      tag_461\n      jump\t// in\n    tag_460:\n        /* \"#utility.yul\":11478:11545   */\n      swap4\n      pop\n        /* \"#utility.yul\":11554:11606   */\n      tag_462\n        /* \"#utility.yul\":11599:11605   */\n      dup2\n        /* \"#utility.yul\":11594:11597   */\n      dup6\n        /* \"#utility.yul\":11587:11591   */\n      0x20\n        /* \"#utility.yul\":11580:11585   */\n      dup7\n        /* \"#utility.yul\":11576:11592   */\n      add\n        /* \"#utility.yul\":11554:11606   */\n      tag_463\n      jump\t// in\n    tag_462:\n        /* \"#utility.yul\":11631:11660   */\n      tag_464\n        /* \"#utility.yul\":11653:11659   */\n      dup2\n        /* \"#utility.yul\":11631:11660   */\n      tag_465\n      jump\t// in\n    tag_464:\n        /* \"#utility.yul\":11626:11629   */\n      dup5\n        /* \"#utility.yul\":11622:11661   */\n      add\n        /* \"#utility.yul\":11615:11661   */\n      swap2\n      pop\n        /* \"#utility.yul\":11407:11667   */\n      pop\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":11673:12046   */\n    tag_466:\n        /* \"#utility.yul\":11777:11780   */\n      0x00\n        /* \"#utility.yul\":11805:11843   */\n      tag_468\n        /* \"#utility.yul\":11837:11842   */\n      dup3\n        /* \"#utility.yul\":11805:11843   */\n      tag_459\n      jump\t// in\n    tag_468:\n        /* \"#utility.yul\":11859:11947   */\n      tag_469\n        /* \"#utility.yul\":11940:11946   */\n      dup2\n        /* \"#utility.yul\":11935:11938   */\n      dup6\n        /* \"#utility.yul\":11859:11947   */\n      tag_470\n      jump\t// in\n    tag_469:\n        /* \"#utility.yul\":11852:11947   */\n      swap4\n      pop\n        /* \"#utility.yul\":11956:12008   */\n      tag_471\n        /* \"#utility.yul\":12001:12007   */\n      dup2\n        /* \"#utility.yul\":11996:11999   */\n      dup6\n        /* \"#utility.yul\":11989:11993   */\n      0x20\n        /* \"#utility.yul\":11982:11987   */\n      dup7\n        /* \"#utility.yul\":11978:11994   */\n      add\n        /* \"#utility.yul\":11956:12008   */\n      tag_463\n      jump\t// in\n    tag_471:\n        /* \"#utility.yul\":12033:12039   */\n      dup1\n        /* \"#utility.yul\":12028:12031   */\n      dup5\n        /* \"#utility.yul\":12024:12040   */\n      add\n        /* \"#utility.yul\":12017:12040   */\n      swap2\n      pop\n        /* \"#utility.yul\":11781:12046   */\n      pop\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":12052:12199   */\n    tag_472:\n        /* \"#utility.yul\":12142:12192   */\n      tag_474\n        /* \"#utility.yul\":12186:12191   */\n      dup2\n        /* \"#utility.yul\":12142:12192   */\n      tag_475\n      jump\t// in\n    tag_474:\n        /* \"#utility.yul\":12137:12140   */\n      dup3\n        /* \"#utility.yul\":12130:12193   */\n      mstore\n        /* \"#utility.yul\":12120:12199   */\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":12205:12362   */\n    tag_476:\n        /* \"#utility.yul\":12305:12355   */\n      tag_478\n        /* \"#utility.yul\":12349:12354   */\n      dup2\n        /* \"#utility.yul\":12305:12355   */\n      tag_475\n      jump\t// in\n    tag_478:\n        /* \"#utility.yul\":12300:12303   */\n      dup3\n        /* \"#utility.yul\":12293:12356   */\n      mstore\n        /* \"#utility.yul\":12283:12362   */\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":12368:12549   */\n    tag_479:\n        /* \"#utility.yul\":12480:12542   */\n      tag_481\n        /* \"#utility.yul\":12536:12541   */\n      dup2\n        /* \"#utility.yul\":12480:12542   */\n      tag_482\n      jump\t// in\n    tag_481:\n        /* \"#utility.yul\":12475:12478   */\n      dup3\n        /* \"#utility.yul\":12468:12543   */\n      mstore\n        /* \"#utility.yul\":12458:12549   */\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":12555:12919   */\n    tag_483:\n        /* \"#utility.yul\":12643:12646   */\n      0x00\n        /* \"#utility.yul\":12671:12710   */\n      tag_485\n        /* \"#utility.yul\":12704:12709   */\n      dup3\n        /* \"#utility.yul\":12671:12710   */\n      tag_486\n      jump\t// in\n    tag_485:\n        /* \"#utility.yul\":12726:12797   */\n      tag_487\n        /* \"#utility.yul\":12790:12796   */\n      dup2\n        /* \"#utility.yul\":12785:12788   */\n      dup6\n        /* \"#utility.yul\":12726:12797   */\n      tag_488\n      jump\t// in\n    tag_487:\n        /* \"#utility.yul\":12719:12797   */\n      swap4\n      pop\n        /* \"#utility.yul\":12806:12858   */\n      tag_489\n        /* \"#utility.yul\":12851:12857   */\n      dup2\n        /* \"#utility.yul\":12846:12849   */\n      dup6\n        /* \"#utility.yul\":12839:12843   */\n      0x20\n        /* \"#utility.yul\":12832:12837   */\n      dup7\n        /* \"#utility.yul\":12828:12844   */\n      add\n        /* \"#utility.yul\":12806:12858   */\n      tag_463\n      jump\t// in\n    tag_489:\n        /* \"#utility.yul\":12883:12912   */\n      tag_490\n        /* \"#utility.yul\":12905:12911   */\n      dup2\n        /* \"#utility.yul\":12883:12912   */\n      tag_465\n      jump\t// in\n    tag_490:\n        /* \"#utility.yul\":12878:12881   */\n      dup5\n        /* \"#utility.yul\":12874:12913   */\n      add\n        /* \"#utility.yul\":12867:12913   */\n      swap2\n      pop\n        /* \"#utility.yul\":12647:12919   */\n      pop\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":12925:13291   */\n    tag_491:\n        /* \"#utility.yul\":13067:13070   */\n      0x00\n        /* \"#utility.yul\":13088:13155   */\n      tag_493\n        /* \"#utility.yul\":13152:13154   */\n      0x17\n        /* \"#utility.yul\":13147:13150   */\n      dup4\n        /* \"#utility.yul\":13088:13155   */\n      tag_488\n      jump\t// in\n    tag_493:\n        /* \"#utility.yul\":13081:13155   */\n      swap2\n      pop\n        /* \"#utility.yul\":13164:13257   */\n      tag_494\n        /* \"#utility.yul\":13253:13256   */\n      dup3\n        /* \"#utility.yul\":13164:13257   */\n      tag_495\n      jump\t// in\n    tag_494:\n        /* \"#utility.yul\":13282:13284   */\n      0x20\n        /* \"#utility.yul\":13277:13280   */\n      dup3\n        /* \"#utility.yul\":13273:13285   */\n      add\n        /* \"#utility.yul\":13266:13285   */\n      swap1\n      pop\n        /* \"#utility.yul\":13071:13291   */\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":13297:13663   */\n    tag_496:\n        /* \"#utility.yul\":13439:13442   */\n      0x00\n        /* \"#utility.yul\":13460:13527   */\n      tag_498\n        /* \"#utility.yul\":13524:13526   */\n      0x26\n        /* \"#utility.yul\":13519:13522   */\n      dup4\n        /* \"#utility.yul\":13460:13527   */\n      tag_488\n      jump\t// in\n    tag_498:\n        /* \"#utility.yul\":13453:13527   */\n      swap2\n      pop\n        /* \"#utility.yul\":13536:13629   */\n      tag_499\n        /* \"#utility.yul\":13625:13628   */\n      dup3\n        /* \"#utility.yul\":13536:13629   */\n      tag_500\n      jump\t// in\n    tag_499:\n        /* \"#utility.yul\":13654:13656   */\n      0x40\n        /* \"#utility.yul\":13649:13652   */\n      dup3\n        /* \"#utility.yul\":13645:13657   */\n      add\n        /* \"#utility.yul\":13638:13657   */\n      swap1\n      pop\n        /* \"#utility.yul\":13443:13663   */\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":13669:14035   */\n    tag_501:\n        /* \"#utility.yul\":13811:13814   */\n      0x00\n        /* \"#utility.yul\":13832:13899   */\n      tag_503\n        /* \"#utility.yul\":13896:13898   */\n      0x26\n        /* \"#utility.yul\":13891:13894   */\n      dup4\n        /* \"#utility.yul\":13832:13899   */\n      tag_488\n      jump\t// in\n    tag_503:\n        /* \"#utility.yul\":13825:13899   */\n      swap2\n      pop\n        /* \"#utility.yul\":13908:14001   */\n      tag_504\n        /* \"#utility.yul\":13997:14000   */\n      dup3\n        /* \"#utility.yul\":13908:14001   */\n      tag_505\n      jump\t// in\n    tag_504:\n        /* \"#utility.yul\":14026:14028   */\n      0x40\n        /* \"#utility.yul\":14021:14024   */\n      dup3\n        /* \"#utility.yul\":14017:14029   */\n      add\n        /* \"#utility.yul\":14010:14029   */\n      swap1\n      pop\n        /* \"#utility.yul\":13815:14035   */\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":14041:14407   */\n    tag_506:\n        /* \"#utility.yul\":14183:14186   */\n      0x00\n        /* \"#utility.yul\":14204:14271   */\n      tag_508\n        /* \"#utility.yul\":14268:14270   */\n      0x1d\n        /* \"#utility.yul\":14263:14266   */\n      dup4\n        /* \"#utility.yul\":14204:14271   */\n      tag_488\n      jump\t// in\n    tag_508:\n        /* \"#utility.yul\":14197:14271   */\n      swap2\n      pop\n        /* \"#utility.yul\":14280:14373   */\n      tag_509\n        /* \"#utility.yul\":14369:14372   */\n      dup3\n        /* \"#utility.yul\":14280:14373   */\n      tag_510\n      jump\t// in\n    tag_509:\n        /* \"#utility.yul\":14398:14400   */\n      0x20\n        /* \"#utility.yul\":14393:14396   */\n      dup3\n        /* \"#utility.yul\":14389:14401   */\n      add\n        /* \"#utility.yul\":14382:14401   */\n      swap1\n      pop\n        /* \"#utility.yul\":14187:14407   */\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":14413:14779   */\n    tag_511:\n        /* \"#utility.yul\":14555:14558   */\n      0x00\n        /* \"#utility.yul\":14576:14643   */\n      tag_513\n        /* \"#utility.yul\":14640:14642   */\n      0x2a\n        /* \"#utility.yul\":14635:14638   */\n      dup4\n        /* \"#utility.yul\":14576:14643   */\n      tag_488\n      jump\t// in\n    tag_513:\n        /* \"#utility.yul\":14569:14643   */\n      swap2\n      pop\n        /* \"#utility.yul\":14652:14745   */\n      tag_514\n        /* \"#utility.yul\":14741:14744   */\n      dup3\n        /* \"#utility.yul\":14652:14745   */\n      tag_515\n      jump\t// in\n    tag_514:\n        /* \"#utility.yul\":14770:14772   */\n      0x40\n        /* \"#utility.yul\":14765:14768   */\n      dup3\n        /* \"#utility.yul\":14761:14773   */\n      add\n        /* \"#utility.yul\":14754:14773   */\n      swap1\n      pop\n        /* \"#utility.yul\":14559:14779   */\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":14785:15151   */\n    tag_516:\n        /* \"#utility.yul\":14927:14930   */\n      0x00\n        /* \"#utility.yul\":14948:15015   */\n      tag_518\n        /* \"#utility.yul\":15012:15014   */\n      0x1c\n        /* \"#utility.yul\":15007:15010   */\n      dup4\n        /* \"#utility.yul\":14948:15015   */\n      tag_488\n      jump\t// in\n    tag_518:\n        /* \"#utility.yul\":14941:15015   */\n      swap2\n      pop\n        /* \"#utility.yul\":15024:15117   */\n      tag_519\n        /* \"#utility.yul\":15113:15116   */\n      dup3\n        /* \"#utility.yul\":15024:15117   */\n      tag_520\n      jump\t// in\n    tag_519:\n        /* \"#utility.yul\":15142:15144   */\n      0x20\n        /* \"#utility.yul\":15137:15140   */\n      dup3\n        /* \"#utility.yul\":15133:15145   */\n      add\n        /* \"#utility.yul\":15126:15145   */\n      swap1\n      pop\n        /* \"#utility.yul\":14931:15151   */\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":15229:15761   */\n    tag_521:\n        /* \"#utility.yul\":15384:15388   */\n      0x40\n        /* \"#utility.yul\":15379:15382   */\n      dup3\n        /* \"#utility.yul\":15375:15389   */\n      add\n        /* \"#utility.yul\":15472:15476   */\n      0x00\n        /* \"#utility.yul\":15465:15470   */\n      dup3\n        /* \"#utility.yul\":15461:15477   */\n      add\n        /* \"#utility.yul\":15455:15478   */\n      mload\n        /* \"#utility.yul\":15491:15567   */\n      tag_523\n        /* \"#utility.yul\":15561:15565   */\n      0x00\n        /* \"#utility.yul\":15556:15559   */\n      dup6\n        /* \"#utility.yul\":15552:15566   */\n      add\n        /* \"#utility.yul\":15538:15550   */\n      dup3\n        /* \"#utility.yul\":15491:15567   */\n      tag_472\n      jump\t// in\n    tag_523:\n        /* \"#utility.yul\":15399:15577   */\n      pop\n        /* \"#utility.yul\":15664:15668   */\n      0x20\n        /* \"#utility.yul\":15657:15662   */\n      dup3\n        /* \"#utility.yul\":15653:15669   */\n      add\n        /* \"#utility.yul\":15647:15670   */\n      mload\n        /* \"#utility.yul\":15683:15744   */\n      tag_524\n        /* \"#utility.yul\":15738:15742   */\n      0x20\n        /* \"#utility.yul\":15733:15736   */\n      dup6\n        /* \"#utility.yul\":15729:15743   */\n      add\n        /* \"#utility.yul\":15715:15727   */\n      dup3\n        /* \"#utility.yul\":15683:15744   */\n      tag_525\n      jump\t// in\n    tag_524:\n        /* \"#utility.yul\":15587:15754   */\n      pop\n        /* \"#utility.yul\":15353:15761   */\n      pop\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":15767:15885   */\n    tag_526:\n        /* \"#utility.yul\":15854:15878   */\n      tag_528\n        /* \"#utility.yul\":15872:15877   */\n      dup2\n        /* \"#utility.yul\":15854:15878   */\n      tag_529\n      jump\t// in\n    tag_528:\n        /* \"#utility.yul\":15849:15852   */\n      dup3\n        /* \"#utility.yul\":15842:15879   */\n      mstore\n        /* \"#utility.yul\":15832:15885   */\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":15891:16006   */\n    tag_530:\n        /* \"#utility.yul\":15976:15999   */\n      tag_532\n        /* \"#utility.yul\":15993:15998   */\n      dup2\n        /* \"#utility.yul\":15976:15999   */\n      tag_533\n      jump\t// in\n    tag_532:\n        /* \"#utility.yul\":15971:15974   */\n      dup3\n        /* \"#utility.yul\":15964:16000   */\n      mstore\n        /* \"#utility.yul\":15954:16006   */\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":16012:16117   */\n    tag_525:\n        /* \"#utility.yul\":16087:16110   */\n      tag_535\n        /* \"#utility.yul\":16104:16109   */\n      dup2\n        /* \"#utility.yul\":16087:16110   */\n      tag_536\n      jump\t// in\n    tag_535:\n        /* \"#utility.yul\":16082:16085   */\n      dup3\n        /* \"#utility.yul\":16075:16111   */\n      mstore\n        /* \"#utility.yul\":16065:16117   */\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":16123:16238   */\n    tag_537:\n        /* \"#utility.yul\":16208:16231   */\n      tag_539\n        /* \"#utility.yul\":16225:16230   */\n      dup2\n        /* \"#utility.yul\":16208:16231   */\n      tag_536\n      jump\t// in\n    tag_539:\n        /* \"#utility.yul\":16203:16206   */\n      dup3\n        /* \"#utility.yul\":16196:16232   */\n      mstore\n        /* \"#utility.yul\":16186:16238   */\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":16244:16515   */\n    tag_269:\n        /* \"#utility.yul\":16374:16377   */\n      0x00\n        /* \"#utility.yul\":16396:16489   */\n      tag_541\n        /* \"#utility.yul\":16485:16488   */\n      dup3\n        /* \"#utility.yul\":16476:16482   */\n      dup5\n        /* \"#utility.yul\":16396:16489   */\n      tag_466\n      jump\t// in\n    tag_541:\n        /* \"#utility.yul\":16389:16489   */\n      swap2\n      pop\n        /* \"#utility.yul\":16506:16509   */\n      dup2\n        /* \"#utility.yul\":16499:16509   */\n      swap1\n      pop\n        /* \"#utility.yul\":16378:16515   */\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":16521:16743   */\n    tag_37:\n        /* \"#utility.yul\":16614:16618   */\n      0x00\n        /* \"#utility.yul\":16652:16654   */\n      0x20\n        /* \"#utility.yul\":16641:16650   */\n      dup3\n        /* \"#utility.yul\":16637:16655   */\n      add\n        /* \"#utility.yul\":16629:16655   */\n      swap1\n      pop\n        /* \"#utility.yul\":16665:16736   */\n      tag_543\n        /* \"#utility.yul\":16733:16734   */\n      0x00\n        /* \"#utility.yul\":16722:16731   */\n      dup4\n        /* \"#utility.yul\":16718:16735   */\n      add\n        /* \"#utility.yul\":16709:16715   */\n      dup5\n        /* \"#utility.yul\":16665:16736   */\n      tag_439\n      jump\t// in\n    tag_543:\n        /* \"#utility.yul\":16619:16743   */\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":16749:17081   */\n    tag_114:\n        /* \"#utility.yul\":16870:16874   */\n      0x00\n        /* \"#utility.yul\":16908:16910   */\n      0x40\n        /* \"#utility.yul\":16897:16906   */\n      dup3\n        /* \"#utility.yul\":16893:16911   */\n      add\n        /* \"#utility.yul\":16885:16911   */\n      swap1\n      pop\n        /* \"#utility.yul\":16921:16992   */\n      tag_545\n        /* \"#utility.yul\":16989:16990   */\n      0x00\n        /* \"#utility.yul\":16978:16987   */\n      dup4\n        /* \"#utility.yul\":16974:16991   */\n      add\n        /* \"#utility.yul\":16965:16971   */\n      dup6\n        /* \"#utility.yul\":16921:16992   */\n      tag_439\n      jump\t// in\n    tag_545:\n        /* \"#utility.yul\":17002:17074   */\n      tag_546\n        /* \"#utility.yul\":17070:17072   */\n      0x20\n        /* \"#utility.yul\":17059:17068   */\n      dup4\n        /* \"#utility.yul\":17055:17073   */\n      add\n        /* \"#utility.yul\":17046:17052   */\n      dup5\n        /* \"#utility.yul\":17002:17074   */\n      tag_439\n      jump\t// in\n    tag_546:\n        /* \"#utility.yul\":16875:17081   */\n      swap4\n      swap3\n      pop\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":17087:17529   */\n    tag_230:\n        /* \"#utility.yul\":17236:17240   */\n      0x00\n        /* \"#utility.yul\":17274:17276   */\n      0x60\n        /* \"#utility.yul\":17263:17272   */\n      dup3\n        /* \"#utility.yul\":17259:17277   */\n      add\n        /* \"#utility.yul\":17251:17277   */\n      swap1\n      pop\n        /* \"#utility.yul\":17287:17358   */\n      tag_548\n        /* \"#utility.yul\":17355:17356   */\n      0x00\n        /* \"#utility.yul\":17344:17353   */\n      dup4\n        /* \"#utility.yul\":17340:17357   */\n      add\n        /* \"#utility.yul\":17331:17337   */\n      dup7\n        /* \"#utility.yul\":17287:17358   */\n      tag_439\n      jump\t// in\n    tag_548:\n        /* \"#utility.yul\":17368:17440   */\n      tag_549\n        /* \"#utility.yul\":17436:17438   */\n      0x20\n        /* \"#utility.yul\":17425:17434   */\n      dup4\n        /* \"#utility.yul\":17421:17439   */\n      add\n        /* \"#utility.yul\":17412:17418   */\n      dup6\n        /* \"#utility.yul\":17368:17440   */\n      tag_439\n      jump\t// in\n    tag_549:\n        /* \"#utility.yul\":17450:17522   */\n      tag_550\n        /* \"#utility.yul\":17518:17520   */\n      0x40\n        /* \"#utility.yul\":17507:17516   */\n      dup4\n        /* \"#utility.yul\":17503:17521   */\n      add\n        /* \"#utility.yul\":17494:17500   */\n      dup5\n        /* \"#utility.yul\":17450:17522   */\n      tag_526\n      jump\t// in\n    tag_550:\n        /* \"#utility.yul\":17241:17529   */\n      swap5\n      swap4\n      pop\n      pop\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":17535:17944   */\n    tag_71:\n        /* \"#utility.yul\":17696:17700   */\n      0x00\n        /* \"#utility.yul\":17734:17736   */\n      0x20\n        /* \"#utility.yul\":17723:17732   */\n      dup3\n        /* \"#utility.yul\":17719:17737   */\n      add\n        /* \"#utility.yul\":17711:17737   */\n      swap1\n      pop\n        /* \"#utility.yul\":17783:17792   */\n      dup2\n        /* \"#utility.yul\":17777:17781   */\n      dup2\n        /* \"#utility.yul\":17773:17793   */\n      sub\n        /* \"#utility.yul\":17769:17770   */\n      0x00\n        /* \"#utility.yul\":17758:17767   */\n      dup4\n        /* \"#utility.yul\":17754:17771   */\n      add\n        /* \"#utility.yul\":17747:17794   */\n      mstore\n        /* \"#utility.yul\":17811:17937   */\n      tag_552\n        /* \"#utility.yul\":17932:17936   */\n      dup2\n        /* \"#utility.yul\":17923:17929   */\n      dup5\n        /* \"#utility.yul\":17811:17937   */\n      tag_443\n      jump\t// in\n    tag_552:\n        /* \"#utility.yul\":17803:17937   */\n      swap1\n      pop\n        /* \"#utility.yul\":17701:17944   */\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":17950:18304   */\n    tag_47:\n        /* \"#utility.yul\":18082:18086   */\n      0x00\n        /* \"#utility.yul\":18120:18122   */\n      0x40\n        /* \"#utility.yul\":18109:18118   */\n      dup3\n        /* \"#utility.yul\":18105:18123   */\n      add\n        /* \"#utility.yul\":18097:18123   */\n      swap1\n      pop\n        /* \"#utility.yul\":18133:18217   */\n      tag_554\n        /* \"#utility.yul\":18214:18215   */\n      0x00\n        /* \"#utility.yul\":18203:18212   */\n      dup4\n        /* \"#utility.yul\":18199:18216   */\n      add\n        /* \"#utility.yul\":18190:18196   */\n      dup6\n        /* \"#utility.yul\":18133:18217   */\n      tag_476\n      jump\t// in\n    tag_554:\n        /* \"#utility.yul\":18227:18297   */\n      tag_555\n        /* \"#utility.yul\":18293:18295   */\n      0x20\n        /* \"#utility.yul\":18282:18291   */\n      dup4\n        /* \"#utility.yul\":18278:18296   */\n      add\n        /* \"#utility.yul\":18269:18275   */\n      dup5\n        /* \"#utility.yul\":18227:18297   */\n      tag_537\n      jump\t// in\n    tag_555:\n        /* \"#utility.yul\":18087:18304   */\n      swap4\n      swap3\n      pop\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":18310:18582   */\n    tag_65:\n        /* \"#utility.yul\":18428:18432   */\n      0x00\n        /* \"#utility.yul\":18466:18468   */\n      0x20\n        /* \"#utility.yul\":18455:18464   */\n      dup3\n        /* \"#utility.yul\":18451:18469   */\n      add\n        /* \"#utility.yul\":18443:18469   */\n      swap1\n      pop\n        /* \"#utility.yul\":18479:18575   */\n      tag_557\n        /* \"#utility.yul\":18572:18573   */\n      0x00\n        /* \"#utility.yul\":18561:18570   */\n      dup4\n        /* \"#utility.yul\":18557:18574   */\n      add\n        /* \"#utility.yul\":18548:18554   */\n      dup5\n        /* \"#utility.yul\":18479:18575   */\n      tag_479\n      jump\t// in\n    tag_557:\n        /* \"#utility.yul\":18433:18582   */\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":18588:18901   */\n    tag_292:\n        /* \"#utility.yul\":18701:18705   */\n      0x00\n        /* \"#utility.yul\":18739:18741   */\n      0x20\n        /* \"#utility.yul\":18728:18737   */\n      dup3\n        /* \"#utility.yul\":18724:18742   */\n      add\n        /* \"#utility.yul\":18716:18742   */\n      swap1\n      pop\n        /* \"#utility.yul\":18788:18797   */\n      dup2\n        /* \"#utility.yul\":18782:18786   */\n      dup2\n        /* \"#utility.yul\":18778:18798   */\n      sub\n        /* \"#utility.yul\":18774:18775   */\n      0x00\n        /* \"#utility.yul\":18763:18772   */\n      dup4\n        /* \"#utility.yul\":18759:18776   */\n      add\n        /* \"#utility.yul\":18752:18799   */\n      mstore\n        /* \"#utility.yul\":18816:18894   */\n      tag_559\n        /* \"#utility.yul\":18889:18893   */\n      dup2\n        /* \"#utility.yul\":18880:18886   */\n      dup5\n        /* \"#utility.yul\":18816:18894   */\n      tag_483\n      jump\t// in\n    tag_559:\n        /* \"#utility.yul\":18808:18894   */\n      swap1\n      pop\n        /* \"#utility.yul\":18706:18901   */\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":18907:19326   */\n    tag_176:\n        /* \"#utility.yul\":19073:19077   */\n      0x00\n        /* \"#utility.yul\":19111:19113   */\n      0x20\n        /* \"#utility.yul\":19100:19109   */\n      dup3\n        /* \"#utility.yul\":19096:19114   */\n      add\n        /* \"#utility.yul\":19088:19114   */\n      swap1\n      pop\n        /* \"#utility.yul\":19160:19169   */\n      dup2\n        /* \"#utility.yul\":19154:19158   */\n      dup2\n        /* \"#utility.yul\":19150:19170   */\n      sub\n        /* \"#utility.yul\":19146:19147   */\n      0x00\n        /* \"#utility.yul\":19135:19144   */\n      dup4\n        /* \"#utility.yul\":19131:19148   */\n      add\n        /* \"#utility.yul\":19124:19171   */\n      mstore\n        /* \"#utility.yul\":19188:19319   */\n      tag_561\n        /* \"#utility.yul\":19314:19318   */\n      dup2\n        /* \"#utility.yul\":19188:19319   */\n      tag_491\n      jump\t// in\n    tag_561:\n        /* \"#utility.yul\":19180:19319   */\n      swap1\n      pop\n        /* \"#utility.yul\":19078:19326   */\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":19332:19751   */\n    tag_299:\n        /* \"#utility.yul\":19498:19502   */\n      0x00\n        /* \"#utility.yul\":19536:19538   */\n      0x20\n        /* \"#utility.yul\":19525:19534   */\n      dup3\n        /* \"#utility.yul\":19521:19539   */\n      add\n        /* \"#utility.yul\":19513:19539   */\n      swap1\n      pop\n        /* \"#utility.yul\":19585:19594   */\n      dup2\n        /* \"#utility.yul\":19579:19583   */\n      dup2\n        /* \"#utility.yul\":19575:19595   */\n      sub\n        /* \"#utility.yul\":19571:19572   */\n      0x00\n        /* \"#utility.yul\":19560:19569   */\n      dup4\n        /* \"#utility.yul\":19556:19573   */\n      add\n        /* \"#utility.yul\":19549:19596   */\n      mstore\n        /* \"#utility.yul\":19613:19744   */\n      tag_563\n        /* \"#utility.yul\":19739:19743   */\n      dup2\n        /* \"#utility.yul\":19613:19744   */\n      tag_496\n      jump\t// in\n    tag_563:\n        /* \"#utility.yul\":19605:19744   */\n      swap1\n      pop\n        /* \"#utility.yul\":19503:19751   */\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":19757:20176   */\n    tag_267:\n        /* \"#utility.yul\":19923:19927   */\n      0x00\n        /* \"#utility.yul\":19961:19963   */\n      0x20\n        /* \"#utility.yul\":19950:19959   */\n      dup3\n        /* \"#utility.yul\":19946:19964   */\n      add\n        /* \"#utility.yul\":19938:19964   */\n      swap1\n      pop\n        /* \"#utility.yul\":20010:20019   */\n      dup2\n        /* \"#utility.yul\":20004:20008   */\n      dup2\n        /* \"#utility.yul\":20000:20020   */\n      sub\n        /* \"#utility.yul\":19996:19997   */\n      0x00\n        /* \"#utility.yul\":19985:19994   */\n      dup4\n        /* \"#utility.yul\":19981:19998   */\n      add\n        /* \"#utility.yul\":19974:20021   */\n      mstore\n        /* \"#utility.yul\":20038:20169   */\n      tag_565\n        /* \"#utility.yul\":20164:20168   */\n      dup2\n        /* \"#utility.yul\":20038:20169   */\n      tag_501\n      jump\t// in\n    tag_565:\n        /* \"#utility.yul\":20030:20169   */\n      swap1\n      pop\n        /* \"#utility.yul\":19928:20176   */\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":20182:20601   */\n    tag_303:\n        /* \"#utility.yul\":20348:20352   */\n      0x00\n        /* \"#utility.yul\":20386:20388   */\n      0x20\n        /* \"#utility.yul\":20375:20384   */\n      dup3\n        /* \"#utility.yul\":20371:20389   */\n      add\n        /* \"#utility.yul\":20363:20389   */\n      swap1\n      pop\n        /* \"#utility.yul\":20435:20444   */\n      dup2\n        /* \"#utility.yul\":20429:20433   */\n      dup2\n        /* \"#utility.yul\":20425:20445   */\n      sub\n        /* \"#utility.yul\":20421:20422   */\n      0x00\n        /* \"#utility.yul\":20410:20419   */\n      dup4\n        /* \"#utility.yul\":20406:20423   */\n      add\n        /* \"#utility.yul\":20399:20446   */\n      mstore\n        /* \"#utility.yul\":20463:20594   */\n      tag_567\n        /* \"#utility.yul\":20589:20593   */\n      dup2\n        /* \"#utility.yul\":20463:20594   */\n      tag_506\n      jump\t// in\n    tag_567:\n        /* \"#utility.yul\":20455:20594   */\n      swap1\n      pop\n        /* \"#utility.yul\":20353:20601   */\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":20607:21026   */\n    tag_283:\n        /* \"#utility.yul\":20773:20777   */\n      0x00\n        /* \"#utility.yul\":20811:20813   */\n      0x20\n        /* \"#utility.yul\":20800:20809   */\n      dup3\n        /* \"#utility.yul\":20796:20814   */\n      add\n        /* \"#utility.yul\":20788:20814   */\n      swap1\n      pop\n        /* \"#utility.yul\":20860:20869   */\n      dup2\n        /* \"#utility.yul\":20854:20858   */\n      dup2\n        /* \"#utility.yul\":20850:20870   */\n      sub\n        /* \"#utility.yul\":20846:20847   */\n      0x00\n        /* \"#utility.yul\":20835:20844   */\n      dup4\n        /* \"#utility.yul\":20831:20848   */\n      add\n        /* \"#utility.yul\":20824:20871   */\n      mstore\n        /* \"#utility.yul\":20888:21019   */\n      tag_569\n        /* \"#utility.yul\":21014:21018   */\n      dup2\n        /* \"#utility.yul\":20888:21019   */\n      tag_511\n      jump\t// in\n    tag_569:\n        /* \"#utility.yul\":20880:21019   */\n      swap1\n      pop\n        /* \"#utility.yul\":20778:21026   */\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":21032:21451   */\n    tag_108:\n        /* \"#utility.yul\":21198:21202   */\n      0x00\n        /* \"#utility.yul\":21236:21238   */\n      0x20\n        /* \"#utility.yul\":21225:21234   */\n      dup3\n        /* \"#utility.yul\":21221:21239   */\n      add\n        /* \"#utility.yul\":21213:21239   */\n      swap1\n      pop\n        /* \"#utility.yul\":21285:21294   */\n      dup2\n        /* \"#utility.yul\":21279:21283   */\n      dup2\n        /* \"#utility.yul\":21275:21295   */\n      sub\n        /* \"#utility.yul\":21271:21272   */\n      0x00\n        /* \"#utility.yul\":21260:21269   */\n      dup4\n        /* \"#utility.yul\":21256:21273   */\n      add\n        /* \"#utility.yul\":21249:21296   */\n      mstore\n        /* \"#utility.yul\":21313:21444   */\n      tag_571\n        /* \"#utility.yul\":21439:21443   */\n      dup2\n        /* \"#utility.yul\":21313:21444   */\n      tag_516\n      jump\t// in\n    tag_571:\n        /* \"#utility.yul\":21305:21444   */\n      swap1\n      pop\n        /* \"#utility.yul\":21203:21451   */\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":21457:21795   */\n    tag_53:\n        /* \"#utility.yul\":21608:21612   */\n      0x00\n        /* \"#utility.yul\":21646:21648   */\n      0x40\n        /* \"#utility.yul\":21635:21644   */\n      dup3\n        /* \"#utility.yul\":21631:21649   */\n      add\n        /* \"#utility.yul\":21623:21649   */\n      swap1\n      pop\n        /* \"#utility.yul\":21659:21788   */\n      tag_573\n        /* \"#utility.yul\":21785:21786   */\n      0x00\n        /* \"#utility.yul\":21774:21783   */\n      dup4\n        /* \"#utility.yul\":21770:21787   */\n      add\n        /* \"#utility.yul\":21761:21767   */\n      dup5\n        /* \"#utility.yul\":21659:21788   */\n      tag_521\n      jump\t// in\n    tag_573:\n        /* \"#utility.yul\":21613:21795   */\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":21801:22023   */\n    tag_29:\n        /* \"#utility.yul\":21894:21898   */\n      0x00\n        /* \"#utility.yul\":21932:21934   */\n      0x20\n        /* \"#utility.yul\":21921:21930   */\n      dup3\n        /* \"#utility.yul\":21917:21935   */\n      add\n        /* \"#utility.yul\":21909:21935   */\n      swap1\n      pop\n        /* \"#utility.yul\":21945:22016   */\n      tag_575\n        /* \"#utility.yul\":22013:22014   */\n      0x00\n        /* \"#utility.yul\":22002:22011   */\n      dup4\n        /* \"#utility.yul\":21998:22015   */\n      add\n        /* \"#utility.yul\":21989:21995   */\n      dup5\n        /* \"#utility.yul\":21945:22016   */\n      tag_526\n      jump\t// in\n    tag_575:\n        /* \"#utility.yul\":21899:22023   */\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":22029:22361   */\n    tag_260:\n        /* \"#utility.yul\":22150:22154   */\n      0x00\n        /* \"#utility.yul\":22188:22190   */\n      0x40\n        /* \"#utility.yul\":22177:22186   */\n      dup3\n        /* \"#utility.yul\":22173:22191   */\n      add\n        /* \"#utility.yul\":22165:22191   */\n      swap1\n      pop\n        /* \"#utility.yul\":22201:22272   */\n      tag_577\n        /* \"#utility.yul\":22269:22270   */\n      0x00\n        /* \"#utility.yul\":22258:22267   */\n      dup4\n        /* \"#utility.yul\":22254:22271   */\n      add\n        /* \"#utility.yul\":22245:22251   */\n      dup6\n        /* \"#utility.yul\":22201:22272   */\n      tag_526\n      jump\t// in\n    tag_577:\n        /* \"#utility.yul\":22282:22354   */\n      tag_578\n        /* \"#utility.yul\":22350:22352   */\n      0x20\n        /* \"#utility.yul\":22339:22348   */\n      dup4\n        /* \"#utility.yul\":22335:22353   */\n      add\n        /* \"#utility.yul\":22326:22332   */\n      dup5\n        /* \"#utility.yul\":22282:22354   */\n      tag_526\n      jump\t// in\n    tag_578:\n        /* \"#utility.yul\":22155:22361   */\n      swap4\n      swap3\n      pop\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":22367:22809   */\n    tag_197:\n        /* \"#utility.yul\":22516:22520   */\n      0x00\n        /* \"#utility.yul\":22554:22556   */\n      0x60\n        /* \"#utility.yul\":22543:22552   */\n      dup3\n        /* \"#utility.yul\":22539:22557   */\n      add\n        /* \"#utility.yul\":22531:22557   */\n      swap1\n      pop\n        /* \"#utility.yul\":22567:22638   */\n      tag_580\n        /* \"#utility.yul\":22635:22636   */\n      0x00\n        /* \"#utility.yul\":22624:22633   */\n      dup4\n        /* \"#utility.yul\":22620:22637   */\n      add\n        /* \"#utility.yul\":22611:22617   */\n      dup7\n        /* \"#utility.yul\":22567:22638   */\n      tag_526\n      jump\t// in\n    tag_580:\n        /* \"#utility.yul\":22648:22720   */\n      tag_581\n        /* \"#utility.yul\":22716:22718   */\n      0x20\n        /* \"#utility.yul\":22705:22714   */\n      dup4\n        /* \"#utility.yul\":22701:22719   */\n      add\n        /* \"#utility.yul\":22692:22698   */\n      dup6\n        /* \"#utility.yul\":22648:22720   */\n      tag_526\n      jump\t// in\n    tag_581:\n        /* \"#utility.yul\":22730:22802   */\n      tag_582\n        /* \"#utility.yul\":22798:22800   */\n      0x40\n        /* \"#utility.yul\":22787:22796   */\n      dup4\n        /* \"#utility.yul\":22783:22801   */\n      add\n        /* \"#utility.yul\":22774:22780   */\n      dup5\n        /* \"#utility.yul\":22730:22802   */\n      tag_526\n      jump\t// in\n    tag_582:\n        /* \"#utility.yul\":22521:22809   */\n      swap5\n      swap4\n      pop\n      pop\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":22815:23033   */\n    tag_75:\n        /* \"#utility.yul\":22906:22910   */\n      0x00\n        /* \"#utility.yul\":22944:22946   */\n      0x20\n        /* \"#utility.yul\":22933:22942   */\n      dup3\n        /* \"#utility.yul\":22929:22947   */\n      add\n        /* \"#utility.yul\":22921:22947   */\n      swap1\n      pop\n        /* \"#utility.yul\":22957:23026   */\n      tag_584\n        /* \"#utility.yul\":23023:23024   */\n      0x00\n        /* \"#utility.yul\":23012:23021   */\n      dup4\n        /* \"#utility.yul\":23008:23025   */\n      add\n        /* \"#utility.yul\":22999:23005   */\n      dup5\n        /* \"#utility.yul\":22957:23026   */\n      tag_530\n      jump\t// in\n    tag_584:\n        /* \"#utility.yul\":22911:23033   */\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":23039:23763   */\n    tag_147:\n        /* \"#utility.yul\":23116:23120   */\n      0x00\n        /* \"#utility.yul\":23122:23128   */\n      dup1\n        /* \"#utility.yul\":23178:23189   */\n      dup4\n        /* \"#utility.yul\":23165:23190   */\n      calldataload\n        /* \"#utility.yul\":23278:23279   */\n      0x01\n        /* \"#utility.yul\":23272:23276   */\n      0x20\n        /* \"#utility.yul\":23268:23280   */\n      sub\n        /* \"#utility.yul\":23257:23265   */\n      dup5\n        /* \"#utility.yul\":23241:23255   */\n      calldatasize\n        /* \"#utility.yul\":23237:23266   */\n      sub\n        /* \"#utility.yul\":23233:23281   */\n      sub\n        /* \"#utility.yul\":23213:23231   */\n      dup2\n        /* \"#utility.yul\":23209:23282   */\n      slt\n        /* \"#utility.yul\":23199:23201   */\n      tag_586\n      jumpi\n        /* \"#utility.yul\":23286:23365   */\n      tag_587\n      tag_588\n      jump\t// in\n    tag_587:\n        /* \"#utility.yul\":23199:23201   */\n    tag_586:\n        /* \"#utility.yul\":23398:23416   */\n      dup1\n        /* \"#utility.yul\":23388:23396   */\n      dup5\n        /* \"#utility.yul\":23384:23417   */\n      add\n        /* \"#utility.yul\":23376:23417   */\n      swap3\n      pop\n        /* \"#utility.yul\":23450:23454   */\n      dup3\n        /* \"#utility.yul\":23437:23455   */\n      calldataload\n        /* \"#utility.yul\":23427:23455   */\n      swap2\n      pop\n        /* \"#utility.yul\":23478:23496   */\n      0xffffffffffffffff\n        /* \"#utility.yul\":23470:23476   */\n      dup3\n        /* \"#utility.yul\":23467:23497   */\n      gt\n        /* \"#utility.yul\":23464:23466   */\n      iszero\n      tag_589\n      jumpi\n        /* \"#utility.yul\":23500:23579   */\n      tag_590\n      tag_591\n      jump\t// in\n    tag_590:\n        /* \"#utility.yul\":23464:23466   */\n    tag_589:\n        /* \"#utility.yul\":23608:23610   */\n      0x20\n        /* \"#utility.yul\":23602:23606   */\n      dup4\n        /* \"#utility.yul\":23598:23611   */\n      add\n        /* \"#utility.yul\":23590:23611   */\n      swap3\n      pop\n        /* \"#utility.yul\":23665:23669   */\n      0x01\n        /* \"#utility.yul\":23657:23663   */\n      dup3\n        /* \"#utility.yul\":23653:23670   */\n      mul\n        /* \"#utility.yul\":23637:23651   */\n      calldatasize\n        /* \"#utility.yul\":23633:23671   */\n      sub\n        /* \"#utility.yul\":23627:23631   */\n      dup4\n        /* \"#utility.yul\":23623:23672   */\n      sgt\n        /* \"#utility.yul\":23620:23622   */\n      iszero\n      tag_592\n      jumpi\n        /* \"#utility.yul\":23675:23754   */\n      tag_593\n      tag_594\n      jump\t// in\n    tag_593:\n        /* \"#utility.yul\":23620:23622   */\n    tag_592:\n        /* \"#utility.yul\":23129:23763   */\n      pop\n      swap3\n      pop\n      swap3\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":23769:23898   */\n    tag_347:\n        /* \"#utility.yul\":23803:23809   */\n      0x00\n        /* \"#utility.yul\":23830:23850   */\n      tag_596\n      tag_597\n      jump\t// in\n    tag_596:\n        /* \"#utility.yul\":23820:23850   */\n      swap1\n      pop\n        /* \"#utility.yul\":23859:23892   */\n      tag_598\n        /* \"#utility.yul\":23887:23891   */\n      dup3\n        /* \"#utility.yul\":23879:23885   */\n      dup3\n        /* \"#utility.yul\":23859:23892   */\n      tag_599\n      jump\t// in\n    tag_598:\n        /* \"#utility.yul\":23810:23898   */\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":23904:23979   */\n    tag_597:\n        /* \"#utility.yul\":23937:23943   */\n      0x00\n        /* \"#utility.yul\":23970:23972   */\n      0x40\n        /* \"#utility.yul\":23964:23973   */\n      mload\n        /* \"#utility.yul\":23954:23973   */\n      swap1\n      pop\n        /* \"#utility.yul\":23944:23979   */\n      swap1\n      jump\t// out\n        /* \"#utility.yul\":23985:24126   */\n    tag_450:\n        /* \"#utility.yul\":24061:24065   */\n      0x00\n        /* \"#utility.yul\":24084:24087   */\n      dup2\n        /* \"#utility.yul\":24076:24087   */\n      swap1\n      pop\n        /* \"#utility.yul\":24114:24118   */\n      0x20\n        /* \"#utility.yul\":24109:24112   */\n      dup3\n        /* \"#utility.yul\":24105:24119   */\n      add\n        /* \"#utility.yul\":24097:24119   */\n      swap1\n      pop\n        /* \"#utility.yul\":24066:24126   */\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":24132:24255   */\n    tag_446:\n        /* \"#utility.yul\":24208:24214   */\n      0x00\n        /* \"#utility.yul\":24242:24247   */\n      dup2\n        /* \"#utility.yul\":24236:24248   */\n      mload\n        /* \"#utility.yul\":24226:24248   */\n      swap1\n      pop\n        /* \"#utility.yul\":24215:24255   */\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":24261:24359   */\n    tag_459:\n        /* \"#utility.yul\":24312:24318   */\n      0x00\n        /* \"#utility.yul\":24346:24351   */\n      dup2\n        /* \"#utility.yul\":24340:24352   */\n      mload\n        /* \"#utility.yul\":24330:24352   */\n      swap1\n      pop\n        /* \"#utility.yul\":24319:24359   */\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":24365:24464   */\n    tag_486:\n        /* \"#utility.yul\":24417:24423   */\n      0x00\n        /* \"#utility.yul\":24451:24456   */\n      dup2\n        /* \"#utility.yul\":24445:24457   */\n      mload\n        /* \"#utility.yul\":24435:24457   */\n      swap1\n      pop\n        /* \"#utility.yul\":24424:24464   */\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":24470:24592   */\n    tag_456:\n        /* \"#utility.yul\":24549:24553   */\n      0x00\n        /* \"#utility.yul\":24581:24585   */\n      0x20\n        /* \"#utility.yul\":24576:24579   */\n      dup3\n        /* \"#utility.yul\":24572:24586   */\n      add\n        /* \"#utility.yul\":24564:24586   */\n      swap1\n      pop\n        /* \"#utility.yul\":24554:24592   */\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":24598:24791   */\n    tag_448:\n        /* \"#utility.yul\":24706:24717   */\n      0x00\n        /* \"#utility.yul\":24740:24746   */\n      dup3\n        /* \"#utility.yul\":24735:24738   */\n      dup3\n        /* \"#utility.yul\":24728:24747   */\n      mstore\n        /* \"#utility.yul\":24780:24784   */\n      0x20\n        /* \"#utility.yul\":24775:24778   */\n      dup3\n        /* \"#utility.yul\":24771:24785   */\n      add\n        /* \"#utility.yul\":24756:24785   */\n      swap1\n      pop\n        /* \"#utility.yul\":24718:24791   */\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":24797:24955   */\n    tag_461:\n        /* \"#utility.yul\":24870:24881   */\n      0x00\n        /* \"#utility.yul\":24904:24910   */\n      dup3\n        /* \"#utility.yul\":24899:24902   */\n      dup3\n        /* \"#utility.yul\":24892:24911   */\n      mstore\n        /* \"#utility.yul\":24944:24948   */\n      0x20\n        /* \"#utility.yul\":24939:24942   */\n      dup3\n        /* \"#utility.yul\":24935:24949   */\n      add\n        /* \"#utility.yul\":24920:24949   */\n      swap1\n      pop\n        /* \"#utility.yul\":24882:24955   */\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":24961:25108   */\n    tag_470:\n        /* \"#utility.yul\":25062:25073   */\n      0x00\n        /* \"#utility.yul\":25099:25102   */\n      dup2\n        /* \"#utility.yul\":25084:25102   */\n      swap1\n      pop\n        /* \"#utility.yul\":25074:25108   */\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":25114:25283   */\n    tag_488:\n        /* \"#utility.yul\":25198:25209   */\n      0x00\n        /* \"#utility.yul\":25232:25238   */\n      dup3\n        /* \"#utility.yul\":25227:25230   */\n      dup3\n        /* \"#utility.yul\":25220:25239   */\n      mstore\n        /* \"#utility.yul\":25272:25276   */\n      0x20\n        /* \"#utility.yul\":25267:25270   */\n      dup3\n        /* \"#utility.yul\":25263:25277   */\n      add\n        /* \"#utility.yul\":25248:25277   */\n      swap1\n      pop\n        /* \"#utility.yul\":25210:25283   */\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":25289:25594   */\n    tag_195:\n        /* \"#utility.yul\":25329:25332   */\n      0x00\n        /* \"#utility.yul\":25348:25368   */\n      tag_611\n        /* \"#utility.yul\":25366:25367   */\n      dup3\n        /* \"#utility.yul\":25348:25368   */\n      tag_529\n      jump\t// in\n    tag_611:\n        /* \"#utility.yul\":25343:25368   */\n      swap2\n      pop\n        /* \"#utility.yul\":25382:25402   */\n      tag_612\n        /* \"#utility.yul\":25400:25401   */\n      dup4\n        /* \"#utility.yul\":25382:25402   */\n      tag_529\n      jump\t// in\n    tag_612:\n        /* \"#utility.yul\":25377:25402   */\n      swap3\n      pop\n        /* \"#utility.yul\":25536:25537   */\n      dup3\n        /* \"#utility.yul\":25468:25534   */\n      0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n        /* \"#utility.yul\":25464:25538   */\n      sub\n        /* \"#utility.yul\":25461:25462   */\n      dup3\n        /* \"#utility.yul\":25458:25539   */\n      gt\n        /* \"#utility.yul\":25455:25457   */\n      iszero\n      tag_613\n      jumpi\n        /* \"#utility.yul\":25542:25560   */\n      tag_614\n      tag_615\n      jump\t// in\n    tag_614:\n        /* \"#utility.yul\":25455:25457   */\n    tag_613:\n        /* \"#utility.yul\":25586:25587   */\n      dup3\n        /* \"#utility.yul\":25583:25584   */\n      dup3\n        /* \"#utility.yul\":25579:25588   */\n      add\n        /* \"#utility.yul\":25572:25588   */\n      swap1\n      pop\n        /* \"#utility.yul\":25333:25594   */\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":25600:25785   */\n    tag_184:\n        /* \"#utility.yul\":25640:25641   */\n      0x00\n        /* \"#utility.yul\":25657:25677   */\n      tag_617\n        /* \"#utility.yul\":25675:25676   */\n      dup3\n        /* \"#utility.yul\":25657:25677   */\n      tag_529\n      jump\t// in\n    tag_617:\n        /* \"#utility.yul\":25652:25677   */\n      swap2\n      pop\n        /* \"#utility.yul\":25691:25711   */\n      tag_618\n        /* \"#utility.yul\":25709:25710   */\n      dup4\n        /* \"#utility.yul\":25691:25711   */\n      tag_529\n      jump\t// in\n    tag_618:\n        /* \"#utility.yul\":25686:25711   */\n      swap3\n      pop\n        /* \"#utility.yul\":25730:25731   */\n      dup3\n        /* \"#utility.yul\":25720:25722   */\n      tag_619\n      jumpi\n        /* \"#utility.yul\":25735:25753   */\n      tag_620\n      tag_621\n      jump\t// in\n    tag_620:\n        /* \"#utility.yul\":25720:25722   */\n    tag_619:\n        /* \"#utility.yul\":25777:25778   */\n      dup3\n        /* \"#utility.yul\":25774:25775   */\n      dup3\n        /* \"#utility.yul\":25770:25779   */\n      div\n        /* \"#utility.yul\":25765:25779   */\n      swap1\n      pop\n        /* \"#utility.yul\":25642:25785   */\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":25791:26139   */\n    tag_182:\n        /* \"#utility.yul\":25831:25838   */\n      0x00\n        /* \"#utility.yul\":25854:25874   */\n      tag_623\n        /* \"#utility.yul\":25872:25873   */\n      dup3\n        /* \"#utility.yul\":25854:25874   */\n      tag_529\n      jump\t// in\n    tag_623:\n        /* \"#utility.yul\":25849:25874   */\n      swap2\n      pop\n        /* \"#utility.yul\":25888:25908   */\n      tag_624\n        /* \"#utility.yul\":25906:25907   */\n      dup4\n        /* \"#utility.yul\":25888:25908   */\n      tag_529\n      jump\t// in\n    tag_624:\n        /* \"#utility.yul\":25883:25908   */\n      swap3\n      pop\n        /* \"#utility.yul\":26076:26077   */\n      dup2\n        /* \"#utility.yul\":26008:26074   */\n      0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n        /* \"#utility.yul\":26004:26078   */\n      div\n        /* \"#utility.yul\":26001:26002   */\n      dup4\n        /* \"#utility.yul\":25998:26079   */\n      gt\n        /* \"#utility.yul\":25993:25994   */\n      dup3\n        /* \"#utility.yul\":25986:25995   */\n      iszero\n        /* \"#utility.yul\":25979:25996   */\n      iszero\n        /* \"#utility.yul\":25975:26080   */\n      and\n        /* \"#utility.yul\":25972:25974   */\n      iszero\n      tag_625\n      jumpi\n        /* \"#utility.yul\":26083:26101   */\n      tag_626\n      tag_615\n      jump\t// in\n    tag_626:\n        /* \"#utility.yul\":25972:25974   */\n    tag_625:\n        /* \"#utility.yul\":26131:26132   */\n      dup3\n        /* \"#utility.yul\":26128:26129   */\n      dup3\n        /* \"#utility.yul\":26124:26133   */\n      mul\n        /* \"#utility.yul\":26113:26133   */\n      swap1\n      pop\n        /* \"#utility.yul\":25839:26139   */\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":26145:26336   */\n    tag_204:\n        /* \"#utility.yul\":26185:26189   */\n      0x00\n        /* \"#utility.yul\":26205:26225   */\n      tag_628\n        /* \"#utility.yul\":26223:26224   */\n      dup3\n        /* \"#utility.yul\":26205:26225   */\n      tag_529\n      jump\t// in\n    tag_628:\n        /* \"#utility.yul\":26200:26225   */\n      swap2\n      pop\n        /* \"#utility.yul\":26239:26259   */\n      tag_629\n        /* \"#utility.yul\":26257:26258   */\n      dup4\n        /* \"#utility.yul\":26239:26259   */\n      tag_529\n      jump\t// in\n    tag_629:\n        /* \"#utility.yul\":26234:26259   */\n      swap3\n      pop\n        /* \"#utility.yul\":26278:26279   */\n      dup3\n        /* \"#utility.yul\":26275:26276   */\n      dup3\n        /* \"#utility.yul\":26272:26280   */\n      lt\n        /* \"#utility.yul\":26269:26271   */\n      iszero\n      tag_630\n      jumpi\n        /* \"#utility.yul\":26283:26301   */\n      tag_631\n      tag_615\n      jump\t// in\n    tag_631:\n        /* \"#utility.yul\":26269:26271   */\n    tag_630:\n        /* \"#utility.yul\":26328:26329   */\n      dup3\n        /* \"#utility.yul\":26325:26326   */\n      dup3\n        /* \"#utility.yul\":26321:26330   */\n      sub\n        /* \"#utility.yul\":26313:26330   */\n      swap1\n      pop\n        /* \"#utility.yul\":26190:26336   */\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":26342:26438   */\n    tag_442:\n        /* \"#utility.yul\":26379:26386   */\n      0x00\n        /* \"#utility.yul\":26408:26432   */\n      tag_633\n        /* \"#utility.yul\":26426:26431   */\n      dup3\n        /* \"#utility.yul\":26408:26432   */\n      tag_634\n      jump\t// in\n    tag_633:\n        /* \"#utility.yul\":26397:26432   */\n      swap1\n      pop\n        /* \"#utility.yul\":26387:26438   */\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":26444:26534   */\n    tag_635:\n        /* \"#utility.yul\":26478:26485   */\n      0x00\n        /* \"#utility.yul\":26521:26526   */\n      dup2\n        /* \"#utility.yul\":26514:26527   */\n      iszero\n        /* \"#utility.yul\":26507:26528   */\n      iszero\n        /* \"#utility.yul\":26496:26528   */\n      swap1\n      pop\n        /* \"#utility.yul\":26486:26534   */\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":26540:26649   */\n    tag_637:\n        /* \"#utility.yul\":26590:26597   */\n      0x00\n        /* \"#utility.yul\":26619:26643   */\n      tag_639\n        /* \"#utility.yul\":26637:26642   */\n      dup3\n        /* \"#utility.yul\":26619:26643   */\n      tag_442\n      jump\t// in\n    tag_639:\n        /* \"#utility.yul\":26608:26643   */\n      swap1\n      pop\n        /* \"#utility.yul\":26598:26649   */\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":26655:26770   */\n    tag_640:\n        /* \"#utility.yul\":26711:26718   */\n      0x00\n        /* \"#utility.yul\":26740:26764   */\n      tag_642\n        /* \"#utility.yul\":26758:26763   */\n      dup3\n        /* \"#utility.yul\":26740:26764   */\n      tag_442\n      jump\t// in\n    tag_642:\n        /* \"#utility.yul\":26729:26764   */\n      swap1\n      pop\n        /* \"#utility.yul\":26719:26770   */\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":26776:26888   */\n    tag_643:\n        /* \"#utility.yul\":26829:26836   */\n      0x00\n        /* \"#utility.yul\":26858:26882   */\n      tag_645\n        /* \"#utility.yul\":26876:26881   */\n      dup3\n        /* \"#utility.yul\":26858:26882   */\n      tag_442\n      jump\t// in\n    tag_645:\n        /* \"#utility.yul\":26847:26882   */\n      swap1\n      pop\n        /* \"#utility.yul\":26837:26888   */\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":26894:27020   */\n    tag_634:\n        /* \"#utility.yul\":26931:26938   */\n      0x00\n        /* \"#utility.yul\":26971:27013   */\n      0xffffffffffffffffffffffffffffffffffffffff\n        /* \"#utility.yul\":26964:26969   */\n      dup3\n        /* \"#utility.yul\":26960:27014   */\n      and\n        /* \"#utility.yul\":26949:27014   */\n      swap1\n      pop\n        /* \"#utility.yul\":26939:27020   */\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":27026:27103   */\n    tag_529:\n        /* \"#utility.yul\":27063:27070   */\n      0x00\n        /* \"#utility.yul\":27092:27097   */\n      dup2\n        /* \"#utility.yul\":27081:27097   */\n      swap1\n      pop\n        /* \"#utility.yul\":27071:27103   */\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":27109:27202   */\n    tag_533:\n        /* \"#utility.yul\":27145:27152   */\n      0x00\n        /* \"#utility.yul\":27185:27195   */\n      0xffffffff\n        /* \"#utility.yul\":27178:27183   */\n      dup3\n        /* \"#utility.yul\":27174:27196   */\n      and\n        /* \"#utility.yul\":27163:27196   */\n      swap1\n      pop\n        /* \"#utility.yul\":27153:27202   */\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":27208:27309   */\n    tag_536:\n        /* \"#utility.yul\":27244:27251   */\n      0x00\n        /* \"#utility.yul\":27284:27302   */\n      0xffffffffffffffff\n        /* \"#utility.yul\":27277:27282   */\n      dup3\n        /* \"#utility.yul\":27273:27303   */\n      and\n        /* \"#utility.yul\":27262:27303   */\n      swap1\n      pop\n        /* \"#utility.yul\":27252:27309   */\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":27315:27467   */\n    tag_475:\n        /* \"#utility.yul\":27378:27387   */\n      0x00\n        /* \"#utility.yul\":27411:27461   */\n      tag_651\n        /* \"#utility.yul\":27455:27460   */\n      dup3\n        /* \"#utility.yul\":27411:27461   */\n      tag_652\n      jump\t// in\n    tag_651:\n        /* \"#utility.yul\":27398:27461   */\n      swap1\n      pop\n        /* \"#utility.yul\":27388:27467   */\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":27473:27599   */\n    tag_652:\n        /* \"#utility.yul\":27536:27545   */\n      0x00\n        /* \"#utility.yul\":27569:27593   */\n      tag_654\n        /* \"#utility.yul\":27587:27592   */\n      dup3\n        /* \"#utility.yul\":27569:27593   */\n      tag_634\n      jump\t// in\n    tag_654:\n        /* \"#utility.yul\":27556:27593   */\n      swap1\n      pop\n        /* \"#utility.yul\":27546:27599   */\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":27605:27781   */\n    tag_482:\n        /* \"#utility.yul\":27680:27689   */\n      0x00\n        /* \"#utility.yul\":27713:27775   */\n      tag_656\n        /* \"#utility.yul\":27769:27774   */\n      dup3\n        /* \"#utility.yul\":27713:27775   */\n      tag_657\n      jump\t// in\n    tag_656:\n        /* \"#utility.yul\":27700:27775   */\n      swap1\n      pop\n        /* \"#utility.yul\":27690:27781   */\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":27787:27925   */\n    tag_657:\n        /* \"#utility.yul\":27862:27871   */\n      0x00\n        /* \"#utility.yul\":27895:27919   */\n      tag_659\n        /* \"#utility.yul\":27913:27918   */\n      dup3\n        /* \"#utility.yul\":27895:27919   */\n      tag_634\n      jump\t// in\n    tag_659:\n        /* \"#utility.yul\":27882:27919   */\n      swap1\n      pop\n        /* \"#utility.yul\":27872:27925   */\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":27931:28238   */\n    tag_463:\n        /* \"#utility.yul\":27999:28000   */\n      0x00\n        /* \"#utility.yul\":28009:28122   */\n    tag_661:\n        /* \"#utility.yul\":28023:28029   */\n      dup4\n        /* \"#utility.yul\":28020:28021   */\n      dup2\n        /* \"#utility.yul\":28017:28030   */\n      lt\n        /* \"#utility.yul\":28009:28122   */\n      iszero\n      tag_663\n      jumpi\n        /* \"#utility.yul\":28108:28109   */\n      dup1\n        /* \"#utility.yul\":28103:28106   */\n      dup3\n        /* \"#utility.yul\":28099:28110   */\n      add\n        /* \"#utility.yul\":28093:28111   */\n      mload\n        /* \"#utility.yul\":28089:28090   */\n      dup2\n        /* \"#utility.yul\":28084:28087   */\n      dup5\n        /* \"#utility.yul\":28080:28091   */\n      add\n        /* \"#utility.yul\":28073:28112   */\n      mstore\n        /* \"#utility.yul\":28045:28047   */\n      0x20\n        /* \"#utility.yul\":28042:28043   */\n      dup2\n        /* \"#utility.yul\":28038:28048   */\n      add\n        /* \"#utility.yul\":28033:28048   */\n      swap1\n      pop\n        /* \"#utility.yul\":28009:28122   */\n      jump(tag_661)\n    tag_663:\n        /* \"#utility.yul\":28140:28146   */\n      dup4\n        /* \"#utility.yul\":28137:28138   */\n      dup2\n        /* \"#utility.yul\":28134:28147   */\n      gt\n        /* \"#utility.yul\":28131:28133   */\n      iszero\n      tag_664\n      jumpi\n        /* \"#utility.yul\":28220:28221   */\n      0x00\n        /* \"#utility.yul\":28211:28217   */\n      dup5\n        /* \"#utility.yul\":28206:28209   */\n      dup5\n        /* \"#utility.yul\":28202:28218   */\n      add\n        /* \"#utility.yul\":28195:28222   */\n      mstore\n        /* \"#utility.yul\":28131:28133   */\n    tag_664:\n        /* \"#utility.yul\":27980:28238   */\n      pop\n      pop\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":28244:28525   */\n    tag_599:\n        /* \"#utility.yul\":28327:28354   */\n      tag_666\n        /* \"#utility.yul\":28349:28353   */\n      dup3\n        /* \"#utility.yul\":28327:28354   */\n      tag_465\n      jump\t// in\n    tag_666:\n        /* \"#utility.yul\":28319:28325   */\n      dup2\n        /* \"#utility.yul\":28315:28355   */\n      add\n        /* \"#utility.yul\":28457:28463   */\n      dup2\n        /* \"#utility.yul\":28445:28455   */\n      dup2\n        /* \"#utility.yul\":28442:28464   */\n      lt\n        /* \"#utility.yul\":28421:28439   */\n      0xffffffffffffffff\n        /* \"#utility.yul\":28409:28419   */\n      dup3\n        /* \"#utility.yul\":28406:28440   */\n      gt\n        /* \"#utility.yul\":28403:28465   */\n      or\n        /* \"#utility.yul\":28400:28402   */\n      iszero\n      tag_667\n      jumpi\n        /* \"#utility.yul\":28468:28486   */\n      tag_668\n      tag_136\n      jump\t// in\n    tag_668:\n        /* \"#utility.yul\":28400:28402   */\n    tag_667:\n        /* \"#utility.yul\":28508:28518   */\n      dup1\n        /* \"#utility.yul\":28504:28506   */\n      0x40\n        /* \"#utility.yul\":28497:28519   */\n      mstore\n        /* \"#utility.yul\":28287:28525   */\n      pop\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":28531:28764   */\n    tag_152:\n        /* \"#utility.yul\":28570:28573   */\n      0x00\n        /* \"#utility.yul\":28593:28617   */\n      tag_670\n        /* \"#utility.yul\":28611:28616   */\n      dup3\n        /* \"#utility.yul\":28593:28617   */\n      tag_529\n      jump\t// in\n    tag_670:\n        /* \"#utility.yul\":28584:28617   */\n      swap2\n      pop\n        /* \"#utility.yul\":28639:28705   */\n      0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n        /* \"#utility.yul\":28632:28637   */\n      dup3\n        /* \"#utility.yul\":28629:28706   */\n      eq\n        /* \"#utility.yul\":28626:28628   */\n      iszero\n      tag_671\n      jumpi\n        /* \"#utility.yul\":28709:28727   */\n      tag_672\n      tag_615\n      jump\t// in\n    tag_672:\n        /* \"#utility.yul\":28626:28628   */\n    tag_671:\n        /* \"#utility.yul\":28756:28757   */\n      0x01\n        /* \"#utility.yul\":28749:28754   */\n      dup3\n        /* \"#utility.yul\":28745:28758   */\n      add\n        /* \"#utility.yul\":28738:28758   */\n      swap1\n      pop\n        /* \"#utility.yul\":28574:28764   */\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":28770:28950   */\n    tag_615:\n        /* \"#utility.yul\":28818:28895   */\n      0x4e487b7100000000000000000000000000000000000000000000000000000000\n        /* \"#utility.yul\":28815:28816   */\n      0x00\n        /* \"#utility.yul\":28808:28896   */\n      mstore\n        /* \"#utility.yul\":28915:28919   */\n      0x11\n        /* \"#utility.yul\":28912:28913   */\n      0x04\n        /* \"#utility.yul\":28905:28920   */\n      mstore\n        /* \"#utility.yul\":28939:28943   */\n      0x24\n        /* \"#utility.yul\":28936:28937   */\n      0x00\n        /* \"#utility.yul\":28929:28944   */\n      revert\n        /* \"#utility.yul\":28956:29136   */\n    tag_621:\n        /* \"#utility.yul\":29004:29081   */\n      0x4e487b7100000000000000000000000000000000000000000000000000000000\n        /* \"#utility.yul\":29001:29002   */\n      0x00\n        /* \"#utility.yul\":28994:29082   */\n      mstore\n        /* \"#utility.yul\":29101:29105   */\n      0x12\n        /* \"#utility.yul\":29098:29099   */\n      0x04\n        /* \"#utility.yul\":29091:29106   */\n      mstore\n        /* \"#utility.yul\":29125:29129   */\n      0x24\n        /* \"#utility.yul\":29122:29123   */\n      0x00\n        /* \"#utility.yul\":29115:29130   */\n      revert\n        /* \"#utility.yul\":29142:29322   */\n    tag_145:\n        /* \"#utility.yul\":29190:29267   */\n      0x4e487b7100000000000000000000000000000000000000000000000000000000\n        /* \"#utility.yul\":29187:29188   */\n      0x00\n        /* \"#utility.yul\":29180:29268   */\n      mstore\n        /* \"#utility.yul\":29287:29291   */\n      0x32\n        /* \"#utility.yul\":29284:29285   */\n      0x04\n        /* \"#utility.yul\":29277:29292   */\n      mstore\n        /* \"#utility.yul\":29311:29315   */\n      0x24\n        /* \"#utility.yul\":29308:29309   */\n      0x00\n        /* \"#utility.yul\":29301:29316   */\n      revert\n        /* \"#utility.yul\":29328:29508   */\n    tag_136:\n        /* \"#utility.yul\":29376:29453   */\n      0x4e487b7100000000000000000000000000000000000000000000000000000000\n        /* \"#utility.yul\":29373:29374   */\n      0x00\n        /* \"#utility.yul\":29366:29454   */\n      mstore\n        /* \"#utility.yul\":29473:29477   */\n      0x41\n        /* \"#utility.yul\":29470:29471   */\n      0x04\n        /* \"#utility.yul\":29463:29478   */\n      mstore\n        /* \"#utility.yul\":29497:29501   */\n      0x24\n        /* \"#utility.yul\":29494:29495   */\n      0x00\n        /* \"#utility.yul\":29487:29502   */\n      revert\n        /* \"#utility.yul\":29514:29631   */\n    tag_321:\n        /* \"#utility.yul\":29623:29624   */\n      0x00\n        /* \"#utility.yul\":29620:29621   */\n      dup1\n        /* \"#utility.yul\":29613:29625   */\n      revert\n        /* \"#utility.yul\":29637:29754   */\n    tag_318:\n        /* \"#utility.yul\":29746:29747   */\n      0x00\n        /* \"#utility.yul\":29743:29744   */\n      dup1\n        /* \"#utility.yul\":29736:29748   */\n      revert\n        /* \"#utility.yul\":29760:29877   */\n    tag_591:\n        /* \"#utility.yul\":29869:29870   */\n      0x00\n        /* \"#utility.yul\":29866:29867   */\n      dup1\n        /* \"#utility.yul\":29859:29871   */\n      revert\n        /* \"#utility.yul\":29883:30000   */\n    tag_345:\n        /* \"#utility.yul\":29992:29993   */\n      0x00\n        /* \"#utility.yul\":29989:29990   */\n      dup1\n        /* \"#utility.yul\":29982:29994   */\n      revert\n        /* \"#utility.yul\":30006:30123   */\n    tag_588:\n        /* \"#utility.yul\":30115:30116   */\n      0x00\n        /* \"#utility.yul\":30112:30113   */\n      dup1\n        /* \"#utility.yul\":30105:30117   */\n      revert\n        /* \"#utility.yul\":30252:30369   */\n    tag_324:\n        /* \"#utility.yul\":30361:30362   */\n      0x00\n        /* \"#utility.yul\":30358:30359   */\n      dup1\n        /* \"#utility.yul\":30351:30363   */\n      revert\n        /* \"#utility.yul\":30375:30492   */\n    tag_594:\n        /* \"#utility.yul\":30484:30485   */\n      0x00\n        /* \"#utility.yul\":30481:30482   */\n      dup1\n        /* \"#utility.yul\":30474:30486   */\n      revert\n        /* \"#utility.yul\":30498:30615   */\n    tag_417:\n        /* \"#utility.yul\":30607:30608   */\n      0x00\n        /* \"#utility.yul\":30604:30605   */\n      dup1\n        /* \"#utility.yul\":30597:30609   */\n      revert\n        /* \"#utility.yul\":30621:30738   */\n    tag_364:\n        /* \"#utility.yul\":30730:30731   */\n      0x00\n        /* \"#utility.yul\":30727:30728   */\n      dup1\n        /* \"#utility.yul\":30720:30732   */\n      revert\n        /* \"#utility.yul\":30744:30846   */\n    tag_465:\n        /* \"#utility.yul\":30785:30791   */\n      0x00\n        /* \"#utility.yul\":30836:30838   */\n      0x1f\n        /* \"#utility.yul\":30832:30839   */\n      not\n        /* \"#utility.yul\":30827:30829   */\n      0x1f\n        /* \"#utility.yul\":30820:30825   */\n      dup4\n        /* \"#utility.yul\":30816:30830   */\n      add\n        /* \"#utility.yul\":30812:30840   */\n      and\n        /* \"#utility.yul\":30802:30840   */\n      swap1\n      pop\n        /* \"#utility.yul\":30792:30846   */\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":30852:31025   */\n    tag_495:\n        /* \"#utility.yul\":30992:31017   */\n      0x475265776172642f6f6e6c792d6c697175696461746f72000000000000000000\n        /* \"#utility.yul\":30988:30989   */\n      0x00\n        /* \"#utility.yul\":30980:30986   */\n      dup3\n        /* \"#utility.yul\":30976:30990   */\n      add\n        /* \"#utility.yul\":30969:31018   */\n      mstore\n        /* \"#utility.yul\":30958:31025   */\n      pop\n      jump\t// out\n        /* \"#utility.yul\":31031:31256   */\n    tag_500:\n        /* \"#utility.yul\":31171:31205   */\n      0x416464726573733a20696e73756666696369656e742062616c616e636520666f\n        /* \"#utility.yul\":31167:31168   */\n      0x00\n        /* \"#utility.yul\":31159:31165   */\n      dup3\n        /* \"#utility.yul\":31155:31169   */\n      add\n        /* \"#utility.yul\":31148:31206   */\n      mstore\n        /* \"#utility.yul\":31240:31248   */\n      0x722063616c6c0000000000000000000000000000000000000000000000000000\n        /* \"#utility.yul\":31235:31237   */\n      0x20\n        /* \"#utility.yul\":31227:31233   */\n      dup3\n        /* \"#utility.yul\":31223:31238   */\n      add\n        /* \"#utility.yul\":31216:31249   */\n      mstore\n        /* \"#utility.yul\":31137:31256   */\n      pop\n      jump\t// out\n        /* \"#utility.yul\":31262:31487   */\n    tag_505:\n        /* \"#utility.yul\":31402:31436   */\n      0x416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f\n        /* \"#utility.yul\":31398:31399   */\n      0x00\n        /* \"#utility.yul\":31390:31396   */\n      dup3\n        /* \"#utility.yul\":31386:31400   */\n      add\n        /* \"#utility.yul\":31379:31437   */\n      mstore\n        /* \"#utility.yul\":31471:31479   */\n      0x6e74726163740000000000000000000000000000000000000000000000000000\n        /* \"#utility.yul\":31466:31468   */\n      0x20\n        /* \"#utility.yul\":31458:31464   */\n      dup3\n        /* \"#utility.yul\":31454:31469   */\n      add\n        /* \"#utility.yul\":31447:31480   */\n      mstore\n        /* \"#utility.yul\":31368:31487   */\n      pop\n      jump\t// out\n        /* \"#utility.yul\":31493:31672   */\n    tag_510:\n        /* \"#utility.yul\":31633:31664   */\n      0x416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000\n        /* \"#utility.yul\":31629:31630   */\n      0x00\n        /* \"#utility.yul\":31621:31627   */\n      dup3\n        /* \"#utility.yul\":31617:31631   */\n      add\n        /* \"#utility.yul\":31610:31665   */\n      mstore\n        /* \"#utility.yul\":31599:31672   */\n      pop\n      jump\t// out\n        /* \"#utility.yul\":31678:31907   */\n    tag_515:\n        /* \"#utility.yul\":31818:31852   */\n      0x5361666545524332303a204552433230206f7065726174696f6e20646964206e\n        /* \"#utility.yul\":31814:31815   */\n      0x00\n        /* \"#utility.yul\":31806:31812   */\n      dup3\n        /* \"#utility.yul\":31802:31816   */\n      add\n        /* \"#utility.yul\":31795:31853   */\n      mstore\n        /* \"#utility.yul\":31887:31899   */\n      0x6f74207375636365656400000000000000000000000000000000000000000000\n        /* \"#utility.yul\":31882:31884   */\n      0x20\n        /* \"#utility.yul\":31874:31880   */\n      dup3\n        /* \"#utility.yul\":31870:31885   */\n      add\n        /* \"#utility.yul\":31863:31900   */\n      mstore\n        /* \"#utility.yul\":31784:31907   */\n      pop\n      jump\t// out\n        /* \"#utility.yul\":31913:32091   */\n    tag_520:\n        /* \"#utility.yul\":32053:32083   */\n      0x475265776172642f6f6e6c792d4761756765436f6e74726f6c6c657200000000\n        /* \"#utility.yul\":32049:32050   */\n      0x00\n        /* \"#utility.yul\":32041:32047   */\n      dup3\n        /* \"#utility.yul\":32037:32051   */\n      add\n        /* \"#utility.yul\":32030:32084   */\n      mstore\n        /* \"#utility.yul\":32019:32091   */\n      pop\n      jump\t// out\n        /* \"#utility.yul\":32097:32219   */\n    tag_313:\n        /* \"#utility.yul\":32170:32194   */\n      tag_696\n        /* \"#utility.yul\":32188:32193   */\n      dup2\n        /* \"#utility.yul\":32170:32194   */\n      tag_442\n      jump\t// in\n    tag_696:\n        /* \"#utility.yul\":32163:32168   */\n      dup2\n        /* \"#utility.yul\":32160:32195   */\n      eq\n        /* \"#utility.yul\":32150:32152   */\n      tag_697\n      jumpi\n        /* \"#utility.yul\":32209:32210   */\n      0x00\n        /* \"#utility.yul\":32206:32207   */\n      dup1\n        /* \"#utility.yul\":32199:32211   */\n      revert\n        /* \"#utility.yul\":32150:32152   */\n    tag_697:\n        /* \"#utility.yul\":32140:32219   */\n      pop\n      jump\t// out\n        /* \"#utility.yul\":32225:32341   */\n    tag_328:\n        /* \"#utility.yul\":32295:32316   */\n      tag_699\n        /* \"#utility.yul\":32310:32315   */\n      dup2\n        /* \"#utility.yul\":32295:32316   */\n      tag_635\n      jump\t// in\n    tag_699:\n        /* \"#utility.yul\":32288:32293   */\n      dup2\n        /* \"#utility.yul\":32285:32317   */\n      eq\n        /* \"#utility.yul\":32275:32277   */\n      tag_700\n      jumpi\n        /* \"#utility.yul\":32331:32332   */\n      0x00\n        /* \"#utility.yul\":32328:32329   */\n      dup1\n        /* \"#utility.yul\":32321:32333   */\n      revert\n        /* \"#utility.yul\":32275:32277   */\n    tag_700:\n        /* \"#utility.yul\":32265:32341   */\n      pop\n      jump\t// out\n        /* \"#utility.yul\":32347:32495   */\n    tag_332:\n        /* \"#utility.yul\":32433:32470   */\n      tag_702\n        /* \"#utility.yul\":32464:32469   */\n      dup2\n        /* \"#utility.yul\":32433:32470   */\n      tag_637\n      jump\t// in\n    tag_702:\n        /* \"#utility.yul\":32426:32431   */\n      dup2\n        /* \"#utility.yul\":32423:32471   */\n      eq\n        /* \"#utility.yul\":32413:32415   */\n      tag_703\n      jumpi\n        /* \"#utility.yul\":32485:32486   */\n      0x00\n        /* \"#utility.yul\":32482:32483   */\n      dup1\n        /* \"#utility.yul\":32475:32487   */\n      revert\n        /* \"#utility.yul\":32413:32415   */\n    tag_703:\n        /* \"#utility.yul\":32403:32495   */\n      pop\n      jump\t// out\n        /* \"#utility.yul\":32501:32661   */\n    tag_336:\n        /* \"#utility.yul\":32593:32636   */\n      tag_705\n        /* \"#utility.yul\":32630:32635   */\n      dup2\n        /* \"#utility.yul\":32593:32636   */\n      tag_640\n      jump\t// in\n    tag_705:\n        /* \"#utility.yul\":32586:32591   */\n      dup2\n        /* \"#utility.yul\":32583:32637   */\n      eq\n        /* \"#utility.yul\":32573:32575   */\n      tag_706\n      jumpi\n        /* \"#utility.yul\":32651:32652   */\n      0x00\n        /* \"#utility.yul\":32648:32649   */\n      dup1\n        /* \"#utility.yul\":32641:32653   */\n      revert\n        /* \"#utility.yul\":32573:32575   */\n    tag_706:\n        /* \"#utility.yul\":32563:32661   */\n      pop\n      jump\t// out\n        /* \"#utility.yul\":32667:32821   */\n    tag_340:\n        /* \"#utility.yul\":32756:32796   */\n      tag_708\n        /* \"#utility.yul\":32790:32795   */\n      dup2\n        /* \"#utility.yul\":32756:32796   */\n      tag_643\n      jump\t// in\n    tag_708:\n        /* \"#utility.yul\":32749:32754   */\n      dup2\n        /* \"#utility.yul\":32746:32797   */\n      eq\n        /* \"#utility.yul\":32736:32738   */\n      tag_709\n      jumpi\n        /* \"#utility.yul\":32811:32812   */\n      0x00\n        /* \"#utility.yul\":32808:32809   */\n      dup1\n        /* \"#utility.yul\":32801:32813   */\n      revert\n        /* \"#utility.yul\":32736:32738   */\n    tag_709:\n        /* \"#utility.yul\":32726:32821   */\n      pop\n      jump\t// out\n        /* \"#utility.yul\":32827:32949   */\n    tag_354:\n        /* \"#utility.yul\":32900:32924   */\n      tag_711\n        /* \"#utility.yul\":32918:32923   */\n      dup2\n        /* \"#utility.yul\":32900:32924   */\n      tag_529\n      jump\t// in\n    tag_711:\n        /* \"#utility.yul\":32893:32898   */\n      dup2\n        /* \"#utility.yul\":32890:32925   */\n      eq\n        /* \"#utility.yul\":32880:32882   */\n      tag_712\n      jumpi\n        /* \"#utility.yul\":32939:32940   */\n      0x00\n        /* \"#utility.yul\":32936:32937   */\n      dup1\n        /* \"#utility.yul\":32929:32941   */\n      revert\n        /* \"#utility.yul\":32880:32882   */\n    tag_712:\n        /* \"#utility.yul\":32870:32949   */\n      pop\n      jump\t// out\n        /* \"#utility.yul\":32955:33075   */\n    tag_360:\n        /* \"#utility.yul\":33027:33050   */\n      tag_714\n        /* \"#utility.yul\":33044:33049   */\n      dup2\n        /* \"#utility.yul\":33027:33050   */\n      tag_536\n      jump\t// in\n    tag_714:\n        /* \"#utility.yul\":33020:33025   */\n      dup2\n        /* \"#utility.yul\":33017:33051   */\n      eq\n        /* \"#utility.yul\":33007:33009   */\n      tag_715\n      jumpi\n        /* \"#utility.yul\":33065:33066   */\n      0x00\n        /* \"#utility.yul\":33062:33063   */\n      dup1\n        /* \"#utility.yul\":33055:33067   */\n      revert\n        /* \"#utility.yul\":33007:33009   */\n    tag_715:\n        /* \"#utility.yul\":32997:33075   */\n      pop\n      jump\t// out\n    stop\n    data_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398 416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564\n\n    auxdata: 0xa26469706673582212207aa42903eb30c0bc06465fc482ce04bda38fd8e88753fadd4536243caaa18dbb64736f6c63430008060033\n}\n",
						"bytecode": {
							"functionDebugData": {
								"@_2818": {
									"entryPoint": null,
									"id": 2818,
									"parameterSlots": 4,
									"returnSlots": 0
								},
								"abi_decode_t_address_fromMemory": {
									"entryPoint": 843,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"abi_decode_t_contract$_IGaugeController_$3664_fromMemory": {
									"entryPoint": 866,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"abi_decode_t_uint32_fromMemory": {
									"entryPoint": 889,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"abi_decode_tuple_t_contract$_IGaugeController_$3664t_addresst_addresst_uint32_fromMemory": {
									"entryPoint": 912,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 4
								},
								"abi_encode_t_stringliteral_394005220321e659269243041427a45eb2132368ecbd8e8d5f4ba72a303f8784_to_t_string_memory_ptr_fromStack": {
									"entryPoint": 1026,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"abi_encode_t_stringliteral_5225e90de2c6cdb9aee253903744f5bfd74033238d73353981e8ce88b4886b47_to_t_string_memory_ptr_fromStack": {
									"entryPoint": 1065,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"abi_encode_t_stringliteral_ae480372304f7d92cbbcc16f212a02764cecc12e33534033370603eb0f021ea1_to_t_string_memory_ptr_fromStack": {
									"entryPoint": 1104,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"abi_encode_t_stringliteral_c7c89e3ef195bcf9c7214d2cf1982f4ddcc33654f1b227948ef554d91b6d845a_to_t_string_memory_ptr_fromStack": {
									"entryPoint": 1143,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"abi_encode_t_uint32_to_t_uint32_fromStack": {
									"entryPoint": 1182,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 0
								},
								"abi_encode_tuple_t_stringliteral_394005220321e659269243041427a45eb2132368ecbd8e8d5f4ba72a303f8784__to_t_string_memory_ptr__fromStack_reversed": {
									"entryPoint": 1199,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"abi_encode_tuple_t_stringliteral_5225e90de2c6cdb9aee253903744f5bfd74033238d73353981e8ce88b4886b47__to_t_string_memory_ptr__fromStack_reversed": {
									"entryPoint": 1233,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"abi_encode_tuple_t_stringliteral_ae480372304f7d92cbbcc16f212a02764cecc12e33534033370603eb0f021ea1__to_t_string_memory_ptr__fromStack_reversed": {
									"entryPoint": 1267,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"abi_encode_tuple_t_stringliteral_c7c89e3ef195bcf9c7214d2cf1982f4ddcc33654f1b227948ef554d91b6d845a__to_t_string_memory_ptr__fromStack_reversed": {
									"entryPoint": 1301,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed": {
									"entryPoint": 1335,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"allocate_unbounded": {
									"entryPoint": null,
									"id": null,
									"parameterSlots": 0,
									"returnSlots": 1
								},
								"array_storeLengthForEncoding_t_string_memory_ptr_fromStack": {
									"entryPoint": 1364,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"cleanup_t_address": {
									"entryPoint": 1381,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"cleanup_t_contract$_IGaugeController_$3664": {
									"entryPoint": 1401,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"cleanup_t_uint160": {
									"entryPoint": 1421,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"cleanup_t_uint32": {
									"entryPoint": 1453,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db": {
									"entryPoint": null,
									"id": null,
									"parameterSlots": 0,
									"returnSlots": 0
								},
								"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": {
									"entryPoint": 1469,
									"id": null,
									"parameterSlots": 0,
									"returnSlots": 0
								},
								"store_literal_in_memory_394005220321e659269243041427a45eb2132368ecbd8e8d5f4ba72a303f8784": {
									"entryPoint": 1474,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 0
								},
								"store_literal_in_memory_5225e90de2c6cdb9aee253903744f5bfd74033238d73353981e8ce88b4886b47": {
									"entryPoint": 1515,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 0
								},
								"store_literal_in_memory_ae480372304f7d92cbbcc16f212a02764cecc12e33534033370603eb0f021ea1": {
									"entryPoint": 1556,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 0
								},
								"store_literal_in_memory_c7c89e3ef195bcf9c7214d2cf1982f4ddcc33654f1b227948ef554d91b6d845a": {
									"entryPoint": 1597,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 0
								},
								"validator_revert_t_address": {
									"entryPoint": 1638,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 0
								},
								"validator_revert_t_contract$_IGaugeController_$3664": {
									"entryPoint": 1664,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 0
								},
								"validator_revert_t_uint32": {
									"entryPoint": 1690,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 0
								}
							},
							"generatedSources": [
								{
									"ast": {
										"nodeType": "YulBlock",
										"src": "0:7034:19",
										"statements": [
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "70:80:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "80:22:19",
															"value": {
																"arguments": [
																	{
																		"name": "offset",
																		"nodeType": "YulIdentifier",
																		"src": "95:6:19"
																	}
																],
																"functionName": {
																	"name": "mload",
																	"nodeType": "YulIdentifier",
																	"src": "89:5:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "89:13:19"
															},
															"variableNames": [
																{
																	"name": "value",
																	"nodeType": "YulIdentifier",
																	"src": "80:5:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "138:5:19"
																	}
																],
																"functionName": {
																	"name": "validator_revert_t_address",
																	"nodeType": "YulIdentifier",
																	"src": "111:26:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "111:33:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "111:33:19"
														}
													]
												},
												"name": "abi_decode_t_address_fromMemory",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "offset",
														"nodeType": "YulTypedName",
														"src": "48:6:19",
														"type": ""
													},
													{
														"name": "end",
														"nodeType": "YulTypedName",
														"src": "56:3:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "64:5:19",
														"type": ""
													}
												],
												"src": "7:143:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "244:105:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "254:22:19",
															"value": {
																"arguments": [
																	{
																		"name": "offset",
																		"nodeType": "YulIdentifier",
																		"src": "269:6:19"
																	}
																],
																"functionName": {
																	"name": "mload",
																	"nodeType": "YulIdentifier",
																	"src": "263:5:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "263:13:19"
															},
															"variableNames": [
																{
																	"name": "value",
																	"nodeType": "YulIdentifier",
																	"src": "254:5:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "337:5:19"
																	}
																],
																"functionName": {
																	"name": "validator_revert_t_contract$_IGaugeController_$3664",
																	"nodeType": "YulIdentifier",
																	"src": "285:51:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "285:58:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "285:58:19"
														}
													]
												},
												"name": "abi_decode_t_contract$_IGaugeController_$3664_fromMemory",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "offset",
														"nodeType": "YulTypedName",
														"src": "222:6:19",
														"type": ""
													},
													{
														"name": "end",
														"nodeType": "YulTypedName",
														"src": "230:3:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "238:5:19",
														"type": ""
													}
												],
												"src": "156:193:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "417:79:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "427:22:19",
															"value": {
																"arguments": [
																	{
																		"name": "offset",
																		"nodeType": "YulIdentifier",
																		"src": "442:6:19"
																	}
																],
																"functionName": {
																	"name": "mload",
																	"nodeType": "YulIdentifier",
																	"src": "436:5:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "436:13:19"
															},
															"variableNames": [
																{
																	"name": "value",
																	"nodeType": "YulIdentifier",
																	"src": "427:5:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "484:5:19"
																	}
																],
																"functionName": {
																	"name": "validator_revert_t_uint32",
																	"nodeType": "YulIdentifier",
																	"src": "458:25:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "458:32:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "458:32:19"
														}
													]
												},
												"name": "abi_decode_t_uint32_fromMemory",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "offset",
														"nodeType": "YulTypedName",
														"src": "395:6:19",
														"type": ""
													},
													{
														"name": "end",
														"nodeType": "YulTypedName",
														"src": "403:3:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "411:5:19",
														"type": ""
													}
												],
												"src": "355:141:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "654:716:19",
													"statements": [
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "701:83:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [],
																			"functionName": {
																				"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
																				"nodeType": "YulIdentifier",
																				"src": "703:77:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "703:79:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "703:79:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "675:7:19"
																			},
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "684:9:19"
																			}
																		],
																		"functionName": {
																			"name": "sub",
																			"nodeType": "YulIdentifier",
																			"src": "671:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "671:23:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "696:3:19",
																		"type": "",
																		"value": "128"
																	}
																],
																"functionName": {
																	"name": "slt",
																	"nodeType": "YulIdentifier",
																	"src": "667:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "667:33:19"
															},
															"nodeType": "YulIf",
															"src": "664:2:19"
														},
														{
															"nodeType": "YulBlock",
															"src": "794:153:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "809:15:19",
																	"value": {
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "823:1:19",
																		"type": "",
																		"value": "0"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "813:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"nodeType": "YulAssignment",
																	"src": "838:99:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "909:9:19"
																					},
																					{
																						"name": "offset",
																						"nodeType": "YulIdentifier",
																						"src": "920:6:19"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "905:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "905:22:19"
																			},
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "929:7:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_t_contract$_IGaugeController_$3664_fromMemory",
																			"nodeType": "YulIdentifier",
																			"src": "848:56:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "848:89:19"
																	},
																	"variableNames": [
																		{
																			"name": "value0",
																			"nodeType": "YulIdentifier",
																			"src": "838:6:19"
																		}
																	]
																}
															]
														},
														{
															"nodeType": "YulBlock",
															"src": "957:129:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "972:16:19",
																	"value": {
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "986:2:19",
																		"type": "",
																		"value": "32"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "976:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"nodeType": "YulAssignment",
																	"src": "1002:74:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "1048:9:19"
																					},
																					{
																						"name": "offset",
																						"nodeType": "YulIdentifier",
																						"src": "1059:6:19"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "1044:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "1044:22:19"
																			},
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "1068:7:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_t_address_fromMemory",
																			"nodeType": "YulIdentifier",
																			"src": "1012:31:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "1012:64:19"
																	},
																	"variableNames": [
																		{
																			"name": "value1",
																			"nodeType": "YulIdentifier",
																			"src": "1002:6:19"
																		}
																	]
																}
															]
														},
														{
															"nodeType": "YulBlock",
															"src": "1096:129:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "1111:16:19",
																	"value": {
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "1125:2:19",
																		"type": "",
																		"value": "64"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "1115:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"nodeType": "YulAssignment",
																	"src": "1141:74:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "1187:9:19"
																					},
																					{
																						"name": "offset",
																						"nodeType": "YulIdentifier",
																						"src": "1198:6:19"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "1183:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "1183:22:19"
																			},
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "1207:7:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_t_address_fromMemory",
																			"nodeType": "YulIdentifier",
																			"src": "1151:31:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "1151:64:19"
																	},
																	"variableNames": [
																		{
																			"name": "value2",
																			"nodeType": "YulIdentifier",
																			"src": "1141:6:19"
																		}
																	]
																}
															]
														},
														{
															"nodeType": "YulBlock",
															"src": "1235:128:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "1250:16:19",
																	"value": {
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "1264:2:19",
																		"type": "",
																		"value": "96"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "1254:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"nodeType": "YulAssignment",
																	"src": "1280:73:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "1325:9:19"
																					},
																					{
																						"name": "offset",
																						"nodeType": "YulIdentifier",
																						"src": "1336:6:19"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "1321:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "1321:22:19"
																			},
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "1345:7:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_t_uint32_fromMemory",
																			"nodeType": "YulIdentifier",
																			"src": "1290:30:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "1290:63:19"
																	},
																	"variableNames": [
																		{
																			"name": "value3",
																			"nodeType": "YulIdentifier",
																			"src": "1280:6:19"
																		}
																	]
																}
															]
														}
													]
												},
												"name": "abi_decode_tuple_t_contract$_IGaugeController_$3664t_addresst_addresst_uint32_fromMemory",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "600:9:19",
														"type": ""
													},
													{
														"name": "dataEnd",
														"nodeType": "YulTypedName",
														"src": "611:7:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "623:6:19",
														"type": ""
													},
													{
														"name": "value1",
														"nodeType": "YulTypedName",
														"src": "631:6:19",
														"type": ""
													},
													{
														"name": "value2",
														"nodeType": "YulTypedName",
														"src": "639:6:19",
														"type": ""
													},
													{
														"name": "value3",
														"nodeType": "YulTypedName",
														"src": "647:6:19",
														"type": ""
													}
												],
												"src": "502:868:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "1522:220:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "1532:74:19",
															"value": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "1598:3:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "1603:2:19",
																		"type": "",
																		"value": "25"
																	}
																],
																"functionName": {
																	"name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "1539:58:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "1539:67:19"
															},
															"variableNames": [
																{
																	"name": "pos",
																	"nodeType": "YulIdentifier",
																	"src": "1532:3:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "1704:3:19"
																	}
																],
																"functionName": {
																	"name": "store_literal_in_memory_394005220321e659269243041427a45eb2132368ecbd8e8d5f4ba72a303f8784",
																	"nodeType": "YulIdentifier",
																	"src": "1615:88:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "1615:93:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "1615:93:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "1717:19:19",
															"value": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "1728:3:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "1733:2:19",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "1724:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "1724:12:19"
															},
															"variableNames": [
																{
																	"name": "end",
																	"nodeType": "YulIdentifier",
																	"src": "1717:3:19"
																}
															]
														}
													]
												},
												"name": "abi_encode_t_stringliteral_394005220321e659269243041427a45eb2132368ecbd8e8d5f4ba72a303f8784_to_t_string_memory_ptr_fromStack",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "pos",
														"nodeType": "YulTypedName",
														"src": "1510:3:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "end",
														"nodeType": "YulTypedName",
														"src": "1518:3:19",
														"type": ""
													}
												],
												"src": "1376:366:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "1894:220:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "1904:74:19",
															"value": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "1970:3:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "1975:2:19",
																		"type": "",
																		"value": "30"
																	}
																],
																"functionName": {
																	"name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "1911:58:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "1911:67:19"
															},
															"variableNames": [
																{
																	"name": "pos",
																	"nodeType": "YulIdentifier",
																	"src": "1904:3:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "2076:3:19"
																	}
																],
																"functionName": {
																	"name": "store_literal_in_memory_5225e90de2c6cdb9aee253903744f5bfd74033238d73353981e8ce88b4886b47",
																	"nodeType": "YulIdentifier",
																	"src": "1987:88:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "1987:93:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "1987:93:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "2089:19:19",
															"value": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "2100:3:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "2105:2:19",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "2096:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "2096:12:19"
															},
															"variableNames": [
																{
																	"name": "end",
																	"nodeType": "YulIdentifier",
																	"src": "2089:3:19"
																}
															]
														}
													]
												},
												"name": "abi_encode_t_stringliteral_5225e90de2c6cdb9aee253903744f5bfd74033238d73353981e8ce88b4886b47_to_t_string_memory_ptr_fromStack",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "pos",
														"nodeType": "YulTypedName",
														"src": "1882:3:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "end",
														"nodeType": "YulTypedName",
														"src": "1890:3:19",
														"type": ""
													}
												],
												"src": "1748:366:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "2266:220:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "2276:74:19",
															"value": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "2342:3:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "2347:2:19",
																		"type": "",
																		"value": "28"
																	}
																],
																"functionName": {
																	"name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "2283:58:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "2283:67:19"
															},
															"variableNames": [
																{
																	"name": "pos",
																	"nodeType": "YulIdentifier",
																	"src": "2276:3:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "2448:3:19"
																	}
																],
																"functionName": {
																	"name": "store_literal_in_memory_ae480372304f7d92cbbcc16f212a02764cecc12e33534033370603eb0f021ea1",
																	"nodeType": "YulIdentifier",
																	"src": "2359:88:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "2359:93:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "2359:93:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "2461:19:19",
															"value": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "2472:3:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "2477:2:19",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "2468:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "2468:12:19"
															},
															"variableNames": [
																{
																	"name": "end",
																	"nodeType": "YulIdentifier",
																	"src": "2461:3:19"
																}
															]
														}
													]
												},
												"name": "abi_encode_t_stringliteral_ae480372304f7d92cbbcc16f212a02764cecc12e33534033370603eb0f021ea1_to_t_string_memory_ptr_fromStack",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "pos",
														"nodeType": "YulTypedName",
														"src": "2254:3:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "end",
														"nodeType": "YulTypedName",
														"src": "2262:3:19",
														"type": ""
													}
												],
												"src": "2120:366:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "2638:220:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "2648:74:19",
															"value": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "2714:3:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "2719:2:19",
																		"type": "",
																		"value": "27"
																	}
																],
																"functionName": {
																	"name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "2655:58:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "2655:67:19"
															},
															"variableNames": [
																{
																	"name": "pos",
																	"nodeType": "YulIdentifier",
																	"src": "2648:3:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "2820:3:19"
																	}
																],
																"functionName": {
																	"name": "store_literal_in_memory_c7c89e3ef195bcf9c7214d2cf1982f4ddcc33654f1b227948ef554d91b6d845a",
																	"nodeType": "YulIdentifier",
																	"src": "2731:88:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "2731:93:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "2731:93:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "2833:19:19",
															"value": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "2844:3:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "2849:2:19",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "2840:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "2840:12:19"
															},
															"variableNames": [
																{
																	"name": "end",
																	"nodeType": "YulIdentifier",
																	"src": "2833:3:19"
																}
															]
														}
													]
												},
												"name": "abi_encode_t_stringliteral_c7c89e3ef195bcf9c7214d2cf1982f4ddcc33654f1b227948ef554d91b6d845a_to_t_string_memory_ptr_fromStack",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "pos",
														"nodeType": "YulTypedName",
														"src": "2626:3:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "end",
														"nodeType": "YulTypedName",
														"src": "2634:3:19",
														"type": ""
													}
												],
												"src": "2492:366:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "2927:52:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "2944:3:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "value",
																				"nodeType": "YulIdentifier",
																				"src": "2966:5:19"
																			}
																		],
																		"functionName": {
																			"name": "cleanup_t_uint32",
																			"nodeType": "YulIdentifier",
																			"src": "2949:16:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "2949:23:19"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "2937:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "2937:36:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "2937:36:19"
														}
													]
												},
												"name": "abi_encode_t_uint32_to_t_uint32_fromStack",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "2915:5:19",
														"type": ""
													},
													{
														"name": "pos",
														"nodeType": "YulTypedName",
														"src": "2922:3:19",
														"type": ""
													}
												],
												"src": "2864:115:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "3156:248:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "3166:26:19",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "3178:9:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "3189:2:19",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "3174:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "3174:18:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "3166:4:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "3213:9:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "3224:1:19",
																				"type": "",
																				"value": "0"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "3209:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "3209:17:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "tail",
																				"nodeType": "YulIdentifier",
																				"src": "3232:4:19"
																			},
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "3238:9:19"
																			}
																		],
																		"functionName": {
																			"name": "sub",
																			"nodeType": "YulIdentifier",
																			"src": "3228:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "3228:20:19"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "3202:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "3202:47:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "3202:47:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "3258:139:19",
															"value": {
																"arguments": [
																	{
																		"name": "tail",
																		"nodeType": "YulIdentifier",
																		"src": "3392:4:19"
																	}
																],
																"functionName": {
																	"name": "abi_encode_t_stringliteral_394005220321e659269243041427a45eb2132368ecbd8e8d5f4ba72a303f8784_to_t_string_memory_ptr_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "3266:124:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "3266:131:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "3258:4:19"
																}
															]
														}
													]
												},
												"name": "abi_encode_tuple_t_stringliteral_394005220321e659269243041427a45eb2132368ecbd8e8d5f4ba72a303f8784__to_t_string_memory_ptr__fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "3136:9:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "3151:4:19",
														"type": ""
													}
												],
												"src": "2985:419:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "3581:248:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "3591:26:19",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "3603:9:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "3614:2:19",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "3599:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "3599:18:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "3591:4:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "3638:9:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "3649:1:19",
																				"type": "",
																				"value": "0"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "3634:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "3634:17:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "tail",
																				"nodeType": "YulIdentifier",
																				"src": "3657:4:19"
																			},
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "3663:9:19"
																			}
																		],
																		"functionName": {
																			"name": "sub",
																			"nodeType": "YulIdentifier",
																			"src": "3653:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "3653:20:19"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "3627:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "3627:47:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "3627:47:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "3683:139:19",
															"value": {
																"arguments": [
																	{
																		"name": "tail",
																		"nodeType": "YulIdentifier",
																		"src": "3817:4:19"
																	}
																],
																"functionName": {
																	"name": "abi_encode_t_stringliteral_5225e90de2c6cdb9aee253903744f5bfd74033238d73353981e8ce88b4886b47_to_t_string_memory_ptr_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "3691:124:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "3691:131:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "3683:4:19"
																}
															]
														}
													]
												},
												"name": "abi_encode_tuple_t_stringliteral_5225e90de2c6cdb9aee253903744f5bfd74033238d73353981e8ce88b4886b47__to_t_string_memory_ptr__fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "3561:9:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "3576:4:19",
														"type": ""
													}
												],
												"src": "3410:419:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "4006:248:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "4016:26:19",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "4028:9:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "4039:2:19",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "4024:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "4024:18:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "4016:4:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "4063:9:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "4074:1:19",
																				"type": "",
																				"value": "0"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "4059:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "4059:17:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "tail",
																				"nodeType": "YulIdentifier",
																				"src": "4082:4:19"
																			},
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "4088:9:19"
																			}
																		],
																		"functionName": {
																			"name": "sub",
																			"nodeType": "YulIdentifier",
																			"src": "4078:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "4078:20:19"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "4052:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "4052:47:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "4052:47:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "4108:139:19",
															"value": {
																"arguments": [
																	{
																		"name": "tail",
																		"nodeType": "YulIdentifier",
																		"src": "4242:4:19"
																	}
																],
																"functionName": {
																	"name": "abi_encode_t_stringliteral_ae480372304f7d92cbbcc16f212a02764cecc12e33534033370603eb0f021ea1_to_t_string_memory_ptr_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "4116:124:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "4116:131:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "4108:4:19"
																}
															]
														}
													]
												},
												"name": "abi_encode_tuple_t_stringliteral_ae480372304f7d92cbbcc16f212a02764cecc12e33534033370603eb0f021ea1__to_t_string_memory_ptr__fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "3986:9:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "4001:4:19",
														"type": ""
													}
												],
												"src": "3835:419:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "4431:248:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "4441:26:19",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "4453:9:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "4464:2:19",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "4449:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "4449:18:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "4441:4:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "4488:9:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "4499:1:19",
																				"type": "",
																				"value": "0"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "4484:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "4484:17:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "tail",
																				"nodeType": "YulIdentifier",
																				"src": "4507:4:19"
																			},
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "4513:9:19"
																			}
																		],
																		"functionName": {
																			"name": "sub",
																			"nodeType": "YulIdentifier",
																			"src": "4503:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "4503:20:19"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "4477:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "4477:47:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "4477:47:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "4533:139:19",
															"value": {
																"arguments": [
																	{
																		"name": "tail",
																		"nodeType": "YulIdentifier",
																		"src": "4667:4:19"
																	}
																],
																"functionName": {
																	"name": "abi_encode_t_stringliteral_c7c89e3ef195bcf9c7214d2cf1982f4ddcc33654f1b227948ef554d91b6d845a_to_t_string_memory_ptr_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "4541:124:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "4541:131:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "4533:4:19"
																}
															]
														}
													]
												},
												"name": "abi_encode_tuple_t_stringliteral_c7c89e3ef195bcf9c7214d2cf1982f4ddcc33654f1b227948ef554d91b6d845a__to_t_string_memory_ptr__fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "4411:9:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "4426:4:19",
														"type": ""
													}
												],
												"src": "4260:419:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "4781:122:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "4791:26:19",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "4803:9:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "4814:2:19",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "4799:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "4799:18:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "4791:4:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "value0",
																		"nodeType": "YulIdentifier",
																		"src": "4869:6:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "4882:9:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "4893:1:19",
																				"type": "",
																				"value": "0"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "4878:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "4878:17:19"
																	}
																],
																"functionName": {
																	"name": "abi_encode_t_uint32_to_t_uint32_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "4827:41:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "4827:69:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "4827:69:19"
														}
													]
												},
												"name": "abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "4753:9:19",
														"type": ""
													},
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "4765:6:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "4776:4:19",
														"type": ""
													}
												],
												"src": "4685:218:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "4949:35:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "4959:19:19",
															"value": {
																"arguments": [
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "4975:2:19",
																		"type": "",
																		"value": "64"
																	}
																],
																"functionName": {
																	"name": "mload",
																	"nodeType": "YulIdentifier",
																	"src": "4969:5:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "4969:9:19"
															},
															"variableNames": [
																{
																	"name": "memPtr",
																	"nodeType": "YulIdentifier",
																	"src": "4959:6:19"
																}
															]
														}
													]
												},
												"name": "allocate_unbounded",
												"nodeType": "YulFunctionDefinition",
												"returnVariables": [
													{
														"name": "memPtr",
														"nodeType": "YulTypedName",
														"src": "4942:6:19",
														"type": ""
													}
												],
												"src": "4909:75:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "5086:73:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "5103:3:19"
																	},
																	{
																		"name": "length",
																		"nodeType": "YulIdentifier",
																		"src": "5108:6:19"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "5096:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "5096:19:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "5096:19:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "5124:29:19",
															"value": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "5143:3:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "5148:4:19",
																		"type": "",
																		"value": "0x20"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "5139:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "5139:14:19"
															},
															"variableNames": [
																{
																	"name": "updated_pos",
																	"nodeType": "YulIdentifier",
																	"src": "5124:11:19"
																}
															]
														}
													]
												},
												"name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "pos",
														"nodeType": "YulTypedName",
														"src": "5058:3:19",
														"type": ""
													},
													{
														"name": "length",
														"nodeType": "YulTypedName",
														"src": "5063:6:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "updated_pos",
														"nodeType": "YulTypedName",
														"src": "5074:11:19",
														"type": ""
													}
												],
												"src": "4990:169:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "5210:51:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "5220:35:19",
															"value": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "5249:5:19"
																	}
																],
																"functionName": {
																	"name": "cleanup_t_uint160",
																	"nodeType": "YulIdentifier",
																	"src": "5231:17:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "5231:24:19"
															},
															"variableNames": [
																{
																	"name": "cleaned",
																	"nodeType": "YulIdentifier",
																	"src": "5220:7:19"
																}
															]
														}
													]
												},
												"name": "cleanup_t_address",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "5192:5:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "cleaned",
														"nodeType": "YulTypedName",
														"src": "5202:7:19",
														"type": ""
													}
												],
												"src": "5165:96:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "5337:51:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "5347:35:19",
															"value": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "5376:5:19"
																	}
																],
																"functionName": {
																	"name": "cleanup_t_address",
																	"nodeType": "YulIdentifier",
																	"src": "5358:17:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "5358:24:19"
															},
															"variableNames": [
																{
																	"name": "cleaned",
																	"nodeType": "YulIdentifier",
																	"src": "5347:7:19"
																}
															]
														}
													]
												},
												"name": "cleanup_t_contract$_IGaugeController_$3664",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "5319:5:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "cleaned",
														"nodeType": "YulTypedName",
														"src": "5329:7:19",
														"type": ""
													}
												],
												"src": "5267:121:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "5439:81:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "5449:65:19",
															"value": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "5464:5:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "5471:42:19",
																		"type": "",
																		"value": "0xffffffffffffffffffffffffffffffffffffffff"
																	}
																],
																"functionName": {
																	"name": "and",
																	"nodeType": "YulIdentifier",
																	"src": "5460:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "5460:54:19"
															},
															"variableNames": [
																{
																	"name": "cleaned",
																	"nodeType": "YulIdentifier",
																	"src": "5449:7:19"
																}
															]
														}
													]
												},
												"name": "cleanup_t_uint160",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "5421:5:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "cleaned",
														"nodeType": "YulTypedName",
														"src": "5431:7:19",
														"type": ""
													}
												],
												"src": "5394:126:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "5570:49:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "5580:33:19",
															"value": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "5595:5:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "5602:10:19",
																		"type": "",
																		"value": "0xffffffff"
																	}
																],
																"functionName": {
																	"name": "and",
																	"nodeType": "YulIdentifier",
																	"src": "5591:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "5591:22:19"
															},
															"variableNames": [
																{
																	"name": "cleaned",
																	"nodeType": "YulIdentifier",
																	"src": "5580:7:19"
																}
															]
														}
													]
												},
												"name": "cleanup_t_uint32",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "5552:5:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "cleaned",
														"nodeType": "YulTypedName",
														"src": "5562:7:19",
														"type": ""
													}
												],
												"src": "5526:93:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "5714:28:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "5731:1:19",
																		"type": "",
																		"value": "0"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "5734:1:19",
																		"type": "",
																		"value": "0"
																	}
																],
																"functionName": {
																	"name": "revert",
																	"nodeType": "YulIdentifier",
																	"src": "5724:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "5724:12:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "5724:12:19"
														}
													]
												},
												"name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
												"nodeType": "YulFunctionDefinition",
												"src": "5625:117:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "5837:28:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "5854:1:19",
																		"type": "",
																		"value": "0"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "5857:1:19",
																		"type": "",
																		"value": "0"
																	}
																],
																"functionName": {
																	"name": "revert",
																	"nodeType": "YulIdentifier",
																	"src": "5847:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "5847:12:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "5847:12:19"
														}
													]
												},
												"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
												"nodeType": "YulFunctionDefinition",
												"src": "5748:117:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "5977:69:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "memPtr",
																				"nodeType": "YulIdentifier",
																				"src": "5999:6:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "6007:1:19",
																				"type": "",
																				"value": "0"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "5995:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "5995:14:19"
																	},
																	{
																		"hexValue": "475265776172642f7374616b65722d6375742d6c742d316539",
																		"kind": "string",
																		"nodeType": "YulLiteral",
																		"src": "6011:27:19",
																		"type": "",
																		"value": "GReward/staker-cut-lt-1e9"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "5988:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "5988:51:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "5988:51:19"
														}
													]
												},
												"name": "store_literal_in_memory_394005220321e659269243041427a45eb2132368ecbd8e8d5f4ba72a303f8784",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "memPtr",
														"nodeType": "YulTypedName",
														"src": "5969:6:19",
														"type": ""
													}
												],
												"src": "5871:175:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "6158:74:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "memPtr",
																				"nodeType": "YulIdentifier",
																				"src": "6180:6:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "6188:1:19",
																				"type": "",
																				"value": "0"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "6176:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "6176:14:19"
																	},
																	{
																		"hexValue": "475265776172642f5661756c742d6e6f742d7a65726f2d61646472657373",
																		"kind": "string",
																		"nodeType": "YulLiteral",
																		"src": "6192:32:19",
																		"type": "",
																		"value": "GReward/Vault-not-zero-address"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "6169:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "6169:56:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "6169:56:19"
														}
													]
												},
												"name": "store_literal_in_memory_5225e90de2c6cdb9aee253903744f5bfd74033238d73353981e8ce88b4886b47",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "memPtr",
														"nodeType": "YulTypedName",
														"src": "6150:6:19",
														"type": ""
													}
												],
												"src": "6052:180:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "6344:72:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "memPtr",
																				"nodeType": "YulIdentifier",
																				"src": "6366:6:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "6374:1:19",
																				"type": "",
																				"value": "0"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "6362:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "6362:14:19"
																	},
																	{
																		"hexValue": "475265776172642f4c69712d6e6f742d7a65726f2d61646472657373",
																		"kind": "string",
																		"nodeType": "YulLiteral",
																		"src": "6378:30:19",
																		"type": "",
																		"value": "GReward/Liq-not-zero-address"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "6355:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "6355:54:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "6355:54:19"
														}
													]
												},
												"name": "store_literal_in_memory_ae480372304f7d92cbbcc16f212a02764cecc12e33534033370603eb0f021ea1",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "memPtr",
														"nodeType": "YulTypedName",
														"src": "6336:6:19",
														"type": ""
													}
												],
												"src": "6238:178:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "6528:71:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "memPtr",
																				"nodeType": "YulIdentifier",
																				"src": "6550:6:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "6558:1:19",
																				"type": "",
																				"value": "0"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "6546:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "6546:14:19"
																	},
																	{
																		"hexValue": "475265776172642f47432d6e6f742d7a65726f2d61646472657373",
																		"kind": "string",
																		"nodeType": "YulLiteral",
																		"src": "6562:29:19",
																		"type": "",
																		"value": "GReward/GC-not-zero-address"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "6539:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "6539:53:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "6539:53:19"
														}
													]
												},
												"name": "store_literal_in_memory_c7c89e3ef195bcf9c7214d2cf1982f4ddcc33654f1b227948ef554d91b6d845a",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "memPtr",
														"nodeType": "YulTypedName",
														"src": "6520:6:19",
														"type": ""
													}
												],
												"src": "6422:177:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "6648:79:19",
													"statements": [
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "6705:16:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "6714:1:19",
																					"type": "",
																					"value": "0"
																				},
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "6717:1:19",
																					"type": "",
																					"value": "0"
																				}
																			],
																			"functionName": {
																				"name": "revert",
																				"nodeType": "YulIdentifier",
																				"src": "6707:6:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "6707:12:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "6707:12:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "value",
																				"nodeType": "YulIdentifier",
																				"src": "6671:5:19"
																			},
																			{
																				"arguments": [
																					{
																						"name": "value",
																						"nodeType": "YulIdentifier",
																						"src": "6696:5:19"
																					}
																				],
																				"functionName": {
																					"name": "cleanup_t_address",
																					"nodeType": "YulIdentifier",
																					"src": "6678:17:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "6678:24:19"
																			}
																		],
																		"functionName": {
																			"name": "eq",
																			"nodeType": "YulIdentifier",
																			"src": "6668:2:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "6668:35:19"
																	}
																],
																"functionName": {
																	"name": "iszero",
																	"nodeType": "YulIdentifier",
																	"src": "6661:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "6661:43:19"
															},
															"nodeType": "YulIf",
															"src": "6658:2:19"
														}
													]
												},
												"name": "validator_revert_t_address",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "6641:5:19",
														"type": ""
													}
												],
												"src": "6605:122:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "6801:104:19",
													"statements": [
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "6883:16:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "6892:1:19",
																					"type": "",
																					"value": "0"
																				},
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "6895:1:19",
																					"type": "",
																					"value": "0"
																				}
																			],
																			"functionName": {
																				"name": "revert",
																				"nodeType": "YulIdentifier",
																				"src": "6885:6:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "6885:12:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "6885:12:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "value",
																				"nodeType": "YulIdentifier",
																				"src": "6824:5:19"
																			},
																			{
																				"arguments": [
																					{
																						"name": "value",
																						"nodeType": "YulIdentifier",
																						"src": "6874:5:19"
																					}
																				],
																				"functionName": {
																					"name": "cleanup_t_contract$_IGaugeController_$3664",
																					"nodeType": "YulIdentifier",
																					"src": "6831:42:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "6831:49:19"
																			}
																		],
																		"functionName": {
																			"name": "eq",
																			"nodeType": "YulIdentifier",
																			"src": "6821:2:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "6821:60:19"
																	}
																],
																"functionName": {
																	"name": "iszero",
																	"nodeType": "YulIdentifier",
																	"src": "6814:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "6814:68:19"
															},
															"nodeType": "YulIf",
															"src": "6811:2:19"
														}
													]
												},
												"name": "validator_revert_t_contract$_IGaugeController_$3664",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "6794:5:19",
														"type": ""
													}
												],
												"src": "6733:172:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "6953:78:19",
													"statements": [
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "7009:16:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "7018:1:19",
																					"type": "",
																					"value": "0"
																				},
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "7021:1:19",
																					"type": "",
																					"value": "0"
																				}
																			],
																			"functionName": {
																				"name": "revert",
																				"nodeType": "YulIdentifier",
																				"src": "7011:6:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "7011:12:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "7011:12:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "value",
																				"nodeType": "YulIdentifier",
																				"src": "6976:5:19"
																			},
																			{
																				"arguments": [
																					{
																						"name": "value",
																						"nodeType": "YulIdentifier",
																						"src": "7000:5:19"
																					}
																				],
																				"functionName": {
																					"name": "cleanup_t_uint32",
																					"nodeType": "YulIdentifier",
																					"src": "6983:16:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "6983:23:19"
																			}
																		],
																		"functionName": {
																			"name": "eq",
																			"nodeType": "YulIdentifier",
																			"src": "6973:2:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "6973:34:19"
																	}
																],
																"functionName": {
																	"name": "iszero",
																	"nodeType": "YulIdentifier",
																	"src": "6966:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "6966:42:19"
															},
															"nodeType": "YulIf",
															"src": "6963:2:19"
														}
													]
												},
												"name": "validator_revert_t_uint32",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "6946:5:19",
														"type": ""
													}
												],
												"src": "6911:120:19"
											}
										]
									},
									"contents": "{\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_t_contract$_IGaugeController_$3664_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_contract$_IGaugeController_$3664(value)\n    }\n\n    function abi_decode_t_uint32_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_uint32(value)\n    }\n\n    function abi_decode_tuple_t_contract$_IGaugeController_$3664t_addresst_addresst_uint32_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_contract$_IGaugeController_$3664_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 := 64\n\n            value2 := abi_decode_t_address_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 96\n\n            value3 := abi_decode_t_uint32_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_encode_t_stringliteral_394005220321e659269243041427a45eb2132368ecbd8e8d5f4ba72a303f8784_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 25)\n        store_literal_in_memory_394005220321e659269243041427a45eb2132368ecbd8e8d5f4ba72a303f8784(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_t_stringliteral_5225e90de2c6cdb9aee253903744f5bfd74033238d73353981e8ce88b4886b47_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 30)\n        store_literal_in_memory_5225e90de2c6cdb9aee253903744f5bfd74033238d73353981e8ce88b4886b47(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_t_stringliteral_ae480372304f7d92cbbcc16f212a02764cecc12e33534033370603eb0f021ea1_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 28)\n        store_literal_in_memory_ae480372304f7d92cbbcc16f212a02764cecc12e33534033370603eb0f021ea1(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_t_stringliteral_c7c89e3ef195bcf9c7214d2cf1982f4ddcc33654f1b227948ef554d91b6d845a_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 27)\n        store_literal_in_memory_c7c89e3ef195bcf9c7214d2cf1982f4ddcc33654f1b227948ef554d91b6d845a(pos)\n        end := add(pos, 32)\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_stringliteral_394005220321e659269243041427a45eb2132368ecbd8e8d5f4ba72a303f8784__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_394005220321e659269243041427a45eb2132368ecbd8e8d5f4ba72a303f8784_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_stringliteral_5225e90de2c6cdb9aee253903744f5bfd74033238d73353981e8ce88b4886b47__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_5225e90de2c6cdb9aee253903744f5bfd74033238d73353981e8ce88b4886b47_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_stringliteral_ae480372304f7d92cbbcc16f212a02764cecc12e33534033370603eb0f021ea1__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_ae480372304f7d92cbbcc16f212a02764cecc12e33534033370603eb0f021ea1_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_stringliteral_c7c89e3ef195bcf9c7214d2cf1982f4ddcc33654f1b227948ef554d91b6d845a__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_c7c89e3ef195bcf9c7214d2cf1982f4ddcc33654f1b227948ef554d91b6d845a_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 allocate_unbounded() -> memPtr {\n        memPtr := mload(64)\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 cleanup_t_address(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function cleanup_t_contract$_IGaugeController_$3664(value) -> cleaned {\n        cleaned := cleanup_t_address(value)\n    }\n\n    function cleanup_t_uint160(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function cleanup_t_uint32(value) -> cleaned {\n        cleaned := and(value, 0xffffffff)\n    }\n\n    function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n        revert(0, 0)\n    }\n\n    function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n        revert(0, 0)\n    }\n\n    function store_literal_in_memory_394005220321e659269243041427a45eb2132368ecbd8e8d5f4ba72a303f8784(memPtr) {\n\n        mstore(add(memPtr, 0), \"GReward/staker-cut-lt-1e9\")\n\n    }\n\n    function store_literal_in_memory_5225e90de2c6cdb9aee253903744f5bfd74033238d73353981e8ce88b4886b47(memPtr) {\n\n        mstore(add(memPtr, 0), \"GReward/Vault-not-zero-address\")\n\n    }\n\n    function store_literal_in_memory_ae480372304f7d92cbbcc16f212a02764cecc12e33534033370603eb0f021ea1(memPtr) {\n\n        mstore(add(memPtr, 0), \"GReward/Liq-not-zero-address\")\n\n    }\n\n    function store_literal_in_memory_c7c89e3ef195bcf9c7214d2cf1982f4ddcc33654f1b227948ef554d91b6d845a(memPtr) {\n\n        mstore(add(memPtr, 0), \"GReward/GC-not-zero-address\")\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 validator_revert_t_contract$_IGaugeController_$3664(value) {\n        if iszero(eq(value, cleanup_t_contract$_IGaugeController_$3664(value))) { revert(0, 0) }\n    }\n\n    function validator_revert_t_uint32(value) {\n        if iszero(eq(value, cleanup_t_uint32(value))) { revert(0, 0) }\n    }\n\n}\n",
									"id": 19,
									"language": "Yul",
									"name": "#utility.yul"
								}
							],
							"linkReferences": {},
							"object": "60806040523480156200001157600080fd5b50604051620037ff380380620037ff833981810160405281019062000037919062000390565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415620000aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a19062000515565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156200011d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200011490620004d1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000190576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200018790620004f3565b60405180910390fd5b633b9aca008163ffffffff1610620001df576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001d690620004af565b60405180910390fd5b83600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760146101000a81548163ffffffff021916908363ffffffff16021790555081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f048ccaf1264df58374a01de5614345aa417e2d16af0f2e86b97729dc752e253f8460405162000339919062000537565b60405180910390a450505050620006b4565b6000815190506200035c8162000666565b92915050565b600081519050620003738162000680565b92915050565b6000815190506200038a816200069a565b92915050565b60008060008060808587031215620003ad57620003ac620005bd565b5b6000620003bd8782880162000362565b9450506020620003d0878288016200034b565b9350506040620003e3878288016200034b565b9250506060620003f68782880162000379565b91505092959194509250565b60006200041160198362000554565b91506200041e82620005c2565b602082019050919050565b600062000438601e8362000554565b91506200044582620005eb565b602082019050919050565b60006200045f601c8362000554565b91506200046c8262000614565b602082019050919050565b600062000486601b8362000554565b915062000493826200063d565b602082019050919050565b620004a981620005ad565b82525050565b60006020820190508181036000830152620004ca8162000402565b9050919050565b60006020820190508181036000830152620004ec8162000429565b9050919050565b600060208201905081810360008301526200050e8162000450565b9050919050565b60006020820190508181036000830152620005308162000477565b9050919050565b60006020820190506200054e60008301846200049e565b92915050565b600082825260208201905092915050565b600062000572826200058d565b9050919050565b6000620005868262000565565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600063ffffffff82169050919050565b600080fd5b7f475265776172642f7374616b65722d6375742d6c742d31653900000000000000600082015250565b7f475265776172642f5661756c742d6e6f742d7a65726f2d616464726573730000600082015250565b7f475265776172642f4c69712d6e6f742d7a65726f2d6164647265737300000000600082015250565b7f475265776172642f47432d6e6f742d7a65726f2d616464726573730000000000600082015250565b620006718162000565565b81146200067d57600080fd5b50565b6200068b8162000579565b81146200069757600080fd5b50565b620006a581620005ad565b8114620006b157600080fd5b50565b61313b80620006c46000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063ac9650d8116100a2578063f00b199711610071578063f00b19971461031a578063f1883e5d1461034a578063f741e08f1461037a578063fbfa77cf14610396578063fd401628146103b457610116565b8063ac9650d81461026c578063ac9fb71d1461029c578063bba06f27146102ba578063e5f744b8146102ea57610116565b80635902fc3b116100e95780635902fc3b146101a15780636e8fc2d3146101d257806381d7af2e1461020257806395cebcd41461023257806399eecb3b1461024e57610116565b806306302ef11461011b578063316619301461014b5780634046ebae146101675780635767bba514610185575b600080fd5b610135600480360381019061013091906122b3565b6103d0565b6040516101429190612995565b60405180910390f35b61016560048036038101906101609190612260565b6103f5565b005b61016f610495565b60405161017c91906127b7565b60405180910390f35b61019f600480360381019061019a9190612166565b6104bb565b005b6101bb60048036038101906101b69190612399565b61057c565b6040516101c9929190612854565b60405180910390f35b6101ec60048036038101906101e79190612139565b6105ed565b6040516101f9919061297a565b60405180910390f35b61021c600480360381019061021791906121a6565b610605565b6040516102299190612995565b60405180910390f35b61024c60048036038101906102479190612260565b610637565b005b6102566106d7565b604051610263919061287d565b60405180910390f35b610286600480360381019061028191906123d9565b6106fd565b6040516102939190612832565b60405180910390f35b6102a4610809565b6040516102b19190612a10565b60405180910390f35b6102d460048036038101906102cf91906122b3565b61081f565b6040516102e19190612995565b60405180910390f35b61030460048036038101906102ff91906121f9565b6109f6565b6040516103119190612995565b60405180910390f35b610334600480360381019061032f9190612346565b610a35565b6040516103419190612995565b60405180910390f35b610364600480360381019061035f91906122f3565b610b04565b6040516103719190612995565b60405180910390f35b610394600480360381019061038f9190612346565b610b36565b005b61039e610bf9565b6040516103ab91906127b7565b60405180910390f35b6103ce60048036038101906103c99190612453565b610c1f565b005b6000602052816000526040600020602052806000526040600020600091509150505481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047c9061295a565b60405180910390fd5b6104908383836110cb565b505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166378fa672e84846040518363ffffffff1660e01b815260040161051a9291906127d2565b60206040518083038186803b15801561053257600080fd5b505afa158015610546573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061056a91906124ce565b90506105778383836110cb565b505050565b6004602052816000526040600020818154811061059857600080fd5b90600052602060002001600091509150508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900467ffffffffffffffff16905082565b6105f5611fb1565b6105fe8261126c565b9050919050565b600260205282600052604060002060205281600052604060002060205280600052604060002060009250925050505481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106be9061295a565b60405180910390fd5b6106d28383836110cb565b505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60608282905067ffffffffffffffff81111561071c5761071b612e68565b5b60405190808252806020026020018201604052801561074f57816020015b606081526020019060019003908161073a5790505b50905060005b83839050811015610802576107d13085858481811061077757610776612e39565b5b90506020028101906107899190612a2b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611411565b8282815181106107e4576107e3612e39565b5b602002602001018190525080806107fa90612d92565b915050610755565b5092915050565b600760149054906101000a900463ffffffff1681565b6000806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610970600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685838673ffffffffffffffffffffffffffffffffffffffff1661143e909392919063ffffffff16565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8ea6014d5675f425737c93493b7ab355a73eb41cf878f7315ac58f7753bcd7da846040516109e49190612995565b60405180910390a48091505092915050565b60016020528360005260406000206020528260005260406000206020528160005260406000206020528060005260406000206000935093505050505481565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166378fa672e86856040518363ffffffff1660e01b8152600401610a959291906127d2565b60206040518083038186803b158015610aad57600080fd5b505afa158015610ac1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae591906124ce565b90506000610af5868686856114c7565b50905080925050509392505050565b600360205282600052604060002060205281600052604060002060205280600052604060002060009250925050505481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166378fa672e85846040518363ffffffff1660e01b8152600401610b959291906127d2565b60206040518083038186803b158015610bad57600080fd5b505afa158015610bc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be591906124ce565b9050610bf384848484611884565b50505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca6906128ba565b60405180910390fd5b60008490506000610cbf8261126c565b9050806000015173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614610e7e576000429050600060405180604001604052808773ffffffffffffffffffffffffffffffffffffffff1681526020018367ffffffffffffffff168152509050600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050508573ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fd38aa1c6709087859dfa9ca795d9441a64c1fa0b1bf23d8ad02c1853b971e33c84604051610e709190612995565b60405180910390a380925050505b6000633b9aca00600760149054906101000a900463ffffffff1663ffffffff1685610ea99190612bb6565b610eb39190612b85565b90506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663117d37e6856040518263ffffffff1660e01b8152600401610f1291906127b7565b60206040518083038186803b158015610f2a57600080fd5b505afa158015610f3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6291906124ce565b90506000808211610f74576000610f94565b81670de0b6b3a764000084610f899190612bb6565b610f939190612b85565b5b905080600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000866000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000866020015167ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600082825461104f9190612b2f565b925050819055508673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f1b0006daff5bb99d1383ffc4326984a27347192b77ddb40fe18ec9720d0929a88886856040516110b7939291906129d9565b60405180910390a350505050505050505050565b6000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050905061111a611fb1565b60008211156112585760008290505b60008111156112525760018161113f9190612c10565b9050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020818154811061119257611191612e39565b5b906000526020600020016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681525050915061123d868387876118a6565b5061124d85878460000151611ad5565b611129565b50611265565b61126484866000611ad5565b5b5050505050565b611274611fb1565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561138b578382906000526020600020016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681525050815260200190600101906112d5565b50505050905060008151905060008111156113d057816001826113ae9190612c10565b815181106113bf576113be612e39565b5b60200260200101519250505061140c565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff16815250925050505b919050565b606061143683836040518060600160405280602781526020016130df60279139611ba2565b905092915050565b6114c1846323b872dd60e01b85858560405160240161145f939291906127fb565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611c6f565b50505050565b6000806000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000876000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000876020015167ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000205490506000600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000886000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000886020015167ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000205490506000611674878a8a60000151611d36565b90506000811415611804576000600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015611796578382906000526020600020016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681525050815260200190600101906116e0565b50505050905060008151905060018111156117e9576000826001836117bb9190612c10565b815181106117cc576117cb612e39565b5b602002602001015190506117e58a8d8360000151611d36565b9350505b6000831415611801576117fe898c6000611d36565b92505b50505b60008082118015611822575081896020015167ffffffffffffffff16115b9050801580156118325750600084145b1561184757600083955095505050505061187b565b670de0b6b3a764000087858561185d9190612c10565b6118679190612bb6565b6118719190612b85565b8395509550505050505b94509492505050565b611890848484846118a6565b506118a082858560000151611ad5565b50505050565b60008060006118b7878787876114c7565b9150915080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000886000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000886020015167ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020819055506000821115611ac857816000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000886000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a3e9190612b2f565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16866000015173ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f7e27222c50a5510dfc61468d936b48c880bfbd05c1eb59c5be79b06e582369dd8585604051611abf9291906129b0565b60405180910390a45b8192505050949350505050565b4267ffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6060611bad84611dfb565b611bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be3906128fa565b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1685604051611c1491906127a0565b600060405180830381855af49150503d8060008114611c4f576040519150601f19603f3d011682016040523d82523d6000602084013e611c54565b606091505b5091509150611c64828286611e1e565b925050509392505050565b6000611cd1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611e859092919063ffffffff16565b9050600081511115611d315780806020019051810190611cf19190612426565b611d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d279061293a565b60405180910390fd5b5b505050565b6000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60608315611e2e57829050611e7e565b600083511115611e415782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e759190612898565b60405180910390fd5b9392505050565b6060611e948484600085611e9d565b90509392505050565b606082471015611ee2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed9906128da565b60405180910390fd5b611eeb85611dfb565b611f2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f219061291a565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611f5391906127a0565b60006040518083038185875af1925050503d8060008114611f90576040519150601f19603f3d011682016040523d82523d6000602084013e611f95565b606091505b5091509150611fa5828286611e1e565b92505050949350505050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b600081359050611ffa8161303d565b92915050565b60008083601f84011261201657612015612e9c565b5b8235905067ffffffffffffffff81111561203357612032612e97565b5b60208301915083602082028301111561204f5761204e612eb0565b5b9250929050565b60008151905061206581613054565b92915050565b60008135905061207a8161306b565b92915050565b60008135905061208f81613082565b92915050565b6000813590506120a481613099565b92915050565b6000604082840312156120c0576120bf612ea6565b5b6120ca6040612a8e565b905060006120da8482850161206b565b60008301525060206120ee84828501612124565b60208301525092915050565b600081359050612109816130b0565b92915050565b60008151905061211e816130b0565b92915050565b600081359050612133816130c7565b92915050565b60006020828403121561214f5761214e612ebf565b5b600061215d84828501611feb565b91505092915050565b6000806040838503121561217d5761217c612ebf565b5b600061218b85828601611feb565b925050602061219c85828601611feb565b9150509250929050565b6000806000606084860312156121bf576121be612ebf565b5b60006121cd86828701611feb565b93505060206121de86828701611feb565b92505060406121ef86828701611feb565b9150509250925092565b6000806000806080858703121561221357612212612ebf565b5b600061222187828801611feb565b945050602061223287828801611feb565b93505060406122438782880161206b565b925050606061225487828801612124565b91505092959194509250565b60008060006060848603121561227957612278612ebf565b5b600061228786828701611feb565b935050602061229886828701611feb565b92505060406122a9868287016120fa565b9150509250925092565b600080604083850312156122ca576122c9612ebf565b5b60006122d885828601611feb565b92505060206122e98582860161206b565b9150509250929050565b60008060006060848603121561230c5761230b612ebf565b5b600061231a86828701611feb565b935050602061232b8682870161206b565b925050604061233c86828701612124565b9150509250925092565b60008060006080848603121561235f5761235e612ebf565b5b600061236d86828701611feb565b935050602061237e868287016120aa565b925050606061238f86828701611feb565b9150509250925092565b600080604083850312156123b0576123af612ebf565b5b60006123be85828601611feb565b92505060206123cf858286016120fa565b9150509250929050565b600080602083850312156123f0576123ef612ebf565b5b600083013567ffffffffffffffff81111561240e5761240d612eba565b5b61241a85828601612000565b92509250509250929050565b60006020828403121561243c5761243b612ebf565b5b600061244a84828501612056565b91505092915050565b600080600080600060a0868803121561246f5761246e612ebf565b5b600061247d88828901612080565b955050602061248e88828901612095565b945050604061249f888289016120fa565b93505060606124b08882890161206b565b92505060806124c1888289016120fa565b9150509295509295909350565b6000602082840312156124e4576124e3612ebf565b5b60006124f28482850161210f565b91505092915050565b60006125078383612593565b905092915050565b61251881612c44565b82525050565b600061252982612ac3565b6125338185612af1565b93508360208202850161254585612ab3565b8060005b85811015612581578484038952815161256285826124fb565b945061256d83612ae4565b925060208a01995050600181019050612549565b50829750879550505050505092915050565b600061259e82612ace565b6125a88185612b02565b93506125b8818560208601612d2e565b6125c181612ec4565b840191505092915050565b60006125d782612ace565b6125e18185612b13565b93506125f1818560208601612d2e565b80840191505092915050565b61260681612ce6565b82525050565b61261581612ce6565b82525050565b61262481612d0a565b82525050565b600061263582612ad9565b61263f8185612b1e565b935061264f818560208601612d2e565b61265881612ec4565b840191505092915050565b6000612670601783612b1e565b915061267b82612ed5565b602082019050919050565b6000612693602683612b1e565b915061269e82612efe565b604082019050919050565b60006126b6602683612b1e565b91506126c182612f4d565b604082019050919050565b60006126d9601d83612b1e565b91506126e482612f9c565b602082019050919050565b60006126fc602a83612b1e565b915061270782612fc5565b604082019050919050565b600061271f601c83612b1e565b915061272a82613014565b602082019050919050565b60408201600082015161274b60008501826125fd565b50602082015161275e6020850182612782565b50505050565b61276d81612cb8565b82525050565b61277c81612cc2565b82525050565b61278b81612cd2565b82525050565b61279a81612cd2565b82525050565b60006127ac82846125cc565b915081905092915050565b60006020820190506127cc600083018461250f565b92915050565b60006040820190506127e7600083018561250f565b6127f4602083018461250f565b9392505050565b6000606082019050612810600083018661250f565b61281d602083018561250f565b61282a6040830184612764565b949350505050565b6000602082019050818103600083015261284c818461251e565b905092915050565b6000604082019050612869600083018561260c565b6128766020830184612791565b9392505050565b6000602082019050612892600083018461261b565b92915050565b600060208201905081810360008301526128b2818461262a565b905092915050565b600060208201905081810360008301526128d381612663565b9050919050565b600060208201905081810360008301526128f381612686565b9050919050565b60006020820190508181036000830152612913816126a9565b9050919050565b60006020820190508181036000830152612933816126cc565b9050919050565b60006020820190508181036000830152612953816126ef565b9050919050565b6000602082019050818103600083015261297381612712565b9050919050565b600060408201905061298f6000830184612735565b92915050565b60006020820190506129aa6000830184612764565b92915050565b60006040820190506129c56000830185612764565b6129d26020830184612764565b9392505050565b60006060820190506129ee6000830186612764565b6129fb6020830185612764565b612a086040830184612764565b949350505050565b6000602082019050612a256000830184612773565b92915050565b60008083356001602003843603038112612a4857612a47612eab565b5b80840192508235915067ffffffffffffffff821115612a6a57612a69612ea1565b5b602083019250600182023603831315612a8657612a85612eb5565b5b509250929050565b6000612a98612aa9565b9050612aa48282612d61565b919050565b6000604051905090565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000612b3a82612cb8565b9150612b4583612cb8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612b7a57612b79612ddb565b5b828201905092915050565b6000612b9082612cb8565b9150612b9b83612cb8565b925082612bab57612baa612e0a565b5b828204905092915050565b6000612bc182612cb8565b9150612bcc83612cb8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612c0557612c04612ddb565b5b828202905092915050565b6000612c1b82612cb8565b9150612c2683612cb8565b925082821015612c3957612c38612ddb565b5b828203905092915050565b6000612c4f82612c98565b9050919050565b60008115159050919050565b6000612c6d82612c44565b9050919050565b6000612c7f82612c44565b9050919050565b6000612c9182612c44565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b6000612cf182612cf8565b9050919050565b6000612d0382612c98565b9050919050565b6000612d1582612d1c565b9050919050565b6000612d2782612c98565b9050919050565b60005b83811015612d4c578082015181840152602081019050612d31565b83811115612d5b576000848401525b50505050565b612d6a82612ec4565b810181811067ffffffffffffffff82111715612d8957612d88612e68565b5b80604052505050565b6000612d9d82612cb8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612dd057612dcf612ddb565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f475265776172642f6f6e6c792d6c697175696461746f72000000000000000000600082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f475265776172642f6f6e6c792d4761756765436f6e74726f6c6c657200000000600082015250565b61304681612c44565b811461305157600080fd5b50565b61305d81612c56565b811461306857600080fd5b50565b61307481612c62565b811461307f57600080fd5b50565b61308b81612c74565b811461309657600080fd5b50565b6130a281612c86565b81146130ad57600080fd5b50565b6130b981612cb8565b81146130c457600080fd5b50565b6130d081612cd2565b81146130db57600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212207aa42903eb30c0bc06465fc482ce04bda38fd8e88753fadd4536243caaa18dbb64736f6c63430008060033",
							"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x37FF CODESIZE SUB DUP1 PUSH3 0x37FF DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE DUP2 ADD SWAP1 PUSH3 0x37 SWAP2 SWAP1 PUSH3 0x390 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH3 0xAA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0xA1 SWAP1 PUSH3 0x515 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH3 0x11D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x114 SWAP1 PUSH3 0x4D1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH3 0x190 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x187 SWAP1 PUSH3 0x4F3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH4 0x3B9ACA00 DUP2 PUSH4 0xFFFFFFFF AND LT PUSH3 0x1DF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x1D6 SWAP1 PUSH3 0x4AF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x5 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP3 PUSH1 0x6 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP1 PUSH1 0x7 PUSH1 0x14 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH4 0xFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH4 0xFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP2 PUSH1 0x7 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x48CCAF1264DF58374A01DE5614345AA417E2D16AF0F2E86B97729DC752E253F DUP5 PUSH1 0x40 MLOAD PUSH3 0x339 SWAP2 SWAP1 PUSH3 0x537 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP PUSH3 0x6B4 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH3 0x35C DUP2 PUSH3 0x666 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH3 0x373 DUP2 PUSH3 0x680 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH3 0x38A DUP2 PUSH3 0x69A JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH3 0x3AD JUMPI PUSH3 0x3AC PUSH3 0x5BD JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH3 0x3BD DUP8 DUP3 DUP9 ADD PUSH3 0x362 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH3 0x3D0 DUP8 DUP3 DUP9 ADD PUSH3 0x34B JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH3 0x3E3 DUP8 DUP3 DUP9 ADD PUSH3 0x34B JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH3 0x3F6 DUP8 DUP3 DUP9 ADD PUSH3 0x379 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x411 PUSH1 0x19 DUP4 PUSH3 0x554 JUMP JUMPDEST SWAP2 POP PUSH3 0x41E DUP3 PUSH3 0x5C2 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x438 PUSH1 0x1E DUP4 PUSH3 0x554 JUMP JUMPDEST SWAP2 POP PUSH3 0x445 DUP3 PUSH3 0x5EB JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x45F PUSH1 0x1C DUP4 PUSH3 0x554 JUMP JUMPDEST SWAP2 POP PUSH3 0x46C DUP3 PUSH3 0x614 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x486 PUSH1 0x1B DUP4 PUSH3 0x554 JUMP JUMPDEST SWAP2 POP PUSH3 0x493 DUP3 PUSH3 0x63D JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH3 0x4A9 DUP2 PUSH3 0x5AD JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH3 0x4CA DUP2 PUSH3 0x402 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH3 0x4EC DUP2 PUSH3 0x429 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH3 0x50E DUP2 PUSH3 0x450 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH3 0x530 DUP2 PUSH3 0x477 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH3 0x54E PUSH1 0x0 DUP4 ADD DUP5 PUSH3 0x49E JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x572 DUP3 PUSH3 0x58D JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x586 DUP3 PUSH3 0x565 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x475265776172642F7374616B65722D6375742D6C742D31653900000000000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x475265776172642F5661756C742D6E6F742D7A65726F2D616464726573730000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x475265776172642F4C69712D6E6F742D7A65726F2D6164647265737300000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x475265776172642F47432D6E6F742D7A65726F2D616464726573730000000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH3 0x671 DUP2 PUSH3 0x565 JUMP JUMPDEST DUP2 EQ PUSH3 0x67D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH3 0x68B DUP2 PUSH3 0x579 JUMP JUMPDEST DUP2 EQ PUSH3 0x697 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH3 0x6A5 DUP2 PUSH3 0x5AD JUMP JUMPDEST DUP2 EQ PUSH3 0x6B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x313B DUP1 PUSH3 0x6C4 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 0xAC9650D8 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xF00B1997 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xF00B1997 EQ PUSH2 0x31A JUMPI DUP1 PUSH4 0xF1883E5D EQ PUSH2 0x34A JUMPI DUP1 PUSH4 0xF741E08F EQ PUSH2 0x37A JUMPI DUP1 PUSH4 0xFBFA77CF EQ PUSH2 0x396 JUMPI DUP1 PUSH4 0xFD401628 EQ PUSH2 0x3B4 JUMPI PUSH2 0x116 JUMP JUMPDEST DUP1 PUSH4 0xAC9650D8 EQ PUSH2 0x26C JUMPI DUP1 PUSH4 0xAC9FB71D EQ PUSH2 0x29C JUMPI DUP1 PUSH4 0xBBA06F27 EQ PUSH2 0x2BA JUMPI DUP1 PUSH4 0xE5F744B8 EQ PUSH2 0x2EA JUMPI PUSH2 0x116 JUMP JUMPDEST DUP1 PUSH4 0x5902FC3B GT PUSH2 0xE9 JUMPI DUP1 PUSH4 0x5902FC3B EQ PUSH2 0x1A1 JUMPI DUP1 PUSH4 0x6E8FC2D3 EQ PUSH2 0x1D2 JUMPI DUP1 PUSH4 0x81D7AF2E EQ PUSH2 0x202 JUMPI DUP1 PUSH4 0x95CEBCD4 EQ PUSH2 0x232 JUMPI DUP1 PUSH4 0x99EECB3B EQ PUSH2 0x24E JUMPI PUSH2 0x116 JUMP JUMPDEST DUP1 PUSH4 0x6302EF1 EQ PUSH2 0x11B JUMPI DUP1 PUSH4 0x31661930 EQ PUSH2 0x14B JUMPI DUP1 PUSH4 0x4046EBAE EQ PUSH2 0x167 JUMPI DUP1 PUSH4 0x5767BBA5 EQ PUSH2 0x185 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x135 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x130 SWAP2 SWAP1 PUSH2 0x22B3 JUMP JUMPDEST PUSH2 0x3D0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x142 SWAP2 SWAP1 PUSH2 0x2995 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x165 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x160 SWAP2 SWAP1 PUSH2 0x2260 JUMP JUMPDEST PUSH2 0x3F5 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x16F PUSH2 0x495 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x17C SWAP2 SWAP1 PUSH2 0x27B7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x19F PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x19A SWAP2 SWAP1 PUSH2 0x2166 JUMP JUMPDEST PUSH2 0x4BB JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1BB PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x1B6 SWAP2 SWAP1 PUSH2 0x2399 JUMP JUMPDEST PUSH2 0x57C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1C9 SWAP3 SWAP2 SWAP1 PUSH2 0x2854 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1EC PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x1E7 SWAP2 SWAP1 PUSH2 0x2139 JUMP JUMPDEST PUSH2 0x5ED JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1F9 SWAP2 SWAP1 PUSH2 0x297A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x21C PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x217 SWAP2 SWAP1 PUSH2 0x21A6 JUMP JUMPDEST PUSH2 0x605 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x229 SWAP2 SWAP1 PUSH2 0x2995 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x24C PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x247 SWAP2 SWAP1 PUSH2 0x2260 JUMP JUMPDEST PUSH2 0x637 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x256 PUSH2 0x6D7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x263 SWAP2 SWAP1 PUSH2 0x287D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x286 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x281 SWAP2 SWAP1 PUSH2 0x23D9 JUMP JUMPDEST PUSH2 0x6FD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x293 SWAP2 SWAP1 PUSH2 0x2832 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2A4 PUSH2 0x809 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2B1 SWAP2 SWAP1 PUSH2 0x2A10 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2D4 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x2CF SWAP2 SWAP1 PUSH2 0x22B3 JUMP JUMPDEST PUSH2 0x81F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2E1 SWAP2 SWAP1 PUSH2 0x2995 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x304 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x2FF SWAP2 SWAP1 PUSH2 0x21F9 JUMP JUMPDEST PUSH2 0x9F6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x311 SWAP2 SWAP1 PUSH2 0x2995 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x334 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x32F SWAP2 SWAP1 PUSH2 0x2346 JUMP JUMPDEST PUSH2 0xA35 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x341 SWAP2 SWAP1 PUSH2 0x2995 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x364 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x35F SWAP2 SWAP1 PUSH2 0x22F3 JUMP JUMPDEST PUSH2 0xB04 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x371 SWAP2 SWAP1 PUSH2 0x2995 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x394 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x38F SWAP2 SWAP1 PUSH2 0x2346 JUMP JUMPDEST PUSH2 0xB36 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x39E PUSH2 0xBF9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3AB SWAP2 SWAP1 PUSH2 0x27B7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x3CE PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x3C9 SWAP2 SWAP1 PUSH2 0x2453 JUMP JUMPDEST PUSH2 0xC1F JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 PUSH1 0x20 MSTORE DUP2 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 POP SWAP2 POP POP SLOAD DUP2 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x485 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x47C SWAP1 PUSH2 0x295A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x490 DUP4 DUP4 DUP4 PUSH2 0x10CB JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x7 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x5 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x78FA672E DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51A SWAP3 SWAP2 SWAP1 PUSH2 0x27D2 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x532 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x546 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 0x56A SWAP2 SWAP1 PUSH2 0x24CE JUMP JUMPDEST SWAP1 POP PUSH2 0x577 DUP4 DUP4 DUP4 PUSH2 0x10CB JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE DUP2 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x598 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP2 POP SWAP2 POP POP DUP1 PUSH1 0x0 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP1 PUSH1 0x0 ADD PUSH1 0x14 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND SWAP1 POP DUP3 JUMP JUMPDEST PUSH2 0x5F5 PUSH2 0x1FB1 JUMP JUMPDEST PUSH2 0x5FE DUP3 PUSH2 0x126C JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE DUP3 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x20 MSTORE DUP2 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP3 POP SWAP3 POP POP POP SLOAD DUP2 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x6C7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x6BE SWAP1 PUSH2 0x295A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x6D2 DUP4 DUP4 DUP4 PUSH2 0x10CB JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x5 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x60 DUP3 DUP3 SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x71C JUMPI PUSH2 0x71B PUSH2 0x2E68 JUMP JUMPDEST JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x74F JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x73A JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 DUP4 SWAP1 POP DUP2 LT ISZERO PUSH2 0x802 JUMPI PUSH2 0x7D1 ADDRESS DUP6 DUP6 DUP5 DUP2 DUP2 LT PUSH2 0x777 JUMPI PUSH2 0x776 PUSH2 0x2E39 JUMP JUMPDEST JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0x789 SWAP2 SWAP1 PUSH2 0x2A2B JUMP JUMPDEST 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP PUSH2 0x1411 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x7E4 JUMPI PUSH2 0x7E3 PUSH2 0x2E39 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP DUP1 DUP1 PUSH2 0x7FA SWAP1 PUSH2 0x2D92 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x755 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x7 PUSH1 0x14 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP PUSH2 0x970 PUSH1 0x6 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP4 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x143E SWAP1 SWAP4 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8EA6014D5675F425737C93493B7AB355A73EB41CF878F7315AC58F7753BCD7DA DUP5 PUSH1 0x40 MLOAD PUSH2 0x9E4 SWAP2 SWAP1 PUSH2 0x2995 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE DUP4 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x20 MSTORE DUP3 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x20 MSTORE DUP2 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP4 POP SWAP4 POP POP POP POP SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x5 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x78FA672E DUP7 DUP6 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA95 SWAP3 SWAP2 SWAP1 PUSH2 0x27D2 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xAAD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAC1 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 0xAE5 SWAP2 SWAP1 PUSH2 0x24CE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xAF5 DUP7 DUP7 DUP7 DUP6 PUSH2 0x14C7 JUMP JUMPDEST POP SWAP1 POP DUP1 SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE DUP3 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x20 MSTORE DUP2 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP3 POP SWAP3 POP POP POP SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x5 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x78FA672E DUP6 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xB95 SWAP3 SWAP2 SWAP1 PUSH2 0x27D2 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xBAD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBC1 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 0xBE5 SWAP2 SWAP1 PUSH2 0x24CE JUMP JUMPDEST SWAP1 POP PUSH2 0xBF3 DUP5 DUP5 DUP5 DUP5 PUSH2 0x1884 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x6 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x7 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xCAF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xCA6 SWAP1 PUSH2 0x28BA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 SWAP1 POP PUSH1 0x0 PUSH2 0xCBF DUP3 PUSH2 0x126C JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xE7E JUMPI PUSH1 0x0 TIMESTAMP SWAP1 POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH8 0xFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP SWAP1 POP PUSH1 0x4 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 DUP1 PUSH1 0x1 DUP2 SLOAD ADD DUP1 DUP3 SSTORE DUP1 SWAP2 POP POP PUSH1 0x1 SWAP1 SUB SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SWAP2 SWAP1 SWAP2 SWAP1 SWAP2 POP PUSH1 0x0 DUP3 ADD MLOAD DUP2 PUSH1 0x0 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x20 DUP3 ADD MLOAD DUP2 PUSH1 0x0 ADD PUSH1 0x14 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH8 0xFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH8 0xFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP POP POP DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xD38AA1C6709087859DFA9CA795D9441A64C1FA0B1BF23D8AD02C1853B971E33C DUP5 PUSH1 0x40 MLOAD PUSH2 0xE70 SWAP2 SWAP1 PUSH2 0x2995 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 SWAP3 POP POP POP JUMPDEST PUSH1 0x0 PUSH4 0x3B9ACA00 PUSH1 0x7 PUSH1 0x14 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH4 0xFFFFFFFF AND PUSH4 0xFFFFFFFF AND DUP6 PUSH2 0xEA9 SWAP2 SWAP1 PUSH2 0x2BB6 JUMP JUMPDEST PUSH2 0xEB3 SWAP2 SWAP1 PUSH2 0x2B85 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x5 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x117D37E6 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF12 SWAP2 SWAP1 PUSH2 0x27B7 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF3E 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 0xF62 SWAP2 SWAP1 PUSH2 0x24CE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 DUP3 GT PUSH2 0xF74 JUMPI PUSH1 0x0 PUSH2 0xF94 JUMP JUMPDEST DUP2 PUSH8 0xDE0B6B3A7640000 DUP5 PUSH2 0xF89 SWAP2 SWAP1 PUSH2 0x2BB6 JUMP JUMPDEST PUSH2 0xF93 SWAP2 SWAP1 PUSH2 0x2B85 JUMP JUMPDEST JUMPDEST SWAP1 POP DUP1 PUSH1 0x3 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP7 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP7 PUSH1 0x20 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH8 0xFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x104F SWAP2 SWAP1 PUSH2 0x2B2F JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x1B0006DAFF5BB99D1383FFC4326984A27347192B77DDB40FE18EC9720D0929A8 DUP9 DUP7 DUP6 PUSH1 0x40 MLOAD PUSH2 0x10B7 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x29D9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x4 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD SWAP1 POP SWAP1 POP PUSH2 0x111A PUSH2 0x1FB1 JUMP JUMPDEST PUSH1 0x0 DUP3 GT ISZERO PUSH2 0x1258 JUMPI PUSH1 0x0 DUP3 SWAP1 POP JUMPDEST PUSH1 0x0 DUP2 GT ISZERO PUSH2 0x1252 JUMPI PUSH1 0x1 DUP2 PUSH2 0x113F SWAP2 SWAP1 PUSH2 0x2C10 JUMP JUMPDEST SWAP1 POP PUSH1 0x4 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x1192 JUMPI PUSH2 0x1191 PUSH2 0x2E39 JUMP JUMPDEST JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE SWAP1 DUP2 PUSH1 0x0 DUP3 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP3 ADD PUSH1 0x14 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH8 0xFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP SWAP2 POP PUSH2 0x123D DUP7 DUP4 DUP8 DUP8 PUSH2 0x18A6 JUMP JUMPDEST POP PUSH2 0x124D DUP6 DUP8 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x1AD5 JUMP JUMPDEST PUSH2 0x1129 JUMP JUMPDEST POP PUSH2 0x1265 JUMP JUMPDEST PUSH2 0x1264 DUP5 DUP7 PUSH1 0x0 PUSH2 0x1AD5 JUMP JUMPDEST JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1274 PUSH2 0x1FB1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x4 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 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 PUSH1 0x0 SWAP1 JUMPDEST DUP3 DUP3 LT ISZERO PUSH2 0x138B JUMPI DUP4 DUP3 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE SWAP1 DUP2 PUSH1 0x0 DUP3 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP3 ADD PUSH1 0x14 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH8 0xFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x12D5 JUMP JUMPDEST POP POP POP POP SWAP1 POP PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH1 0x0 DUP2 GT ISZERO PUSH2 0x13D0 JUMPI DUP2 PUSH1 0x1 DUP3 PUSH2 0x13AE SWAP2 SWAP1 PUSH2 0x2C10 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x13BF JUMPI PUSH2 0x13BE PUSH2 0x2E39 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP3 POP POP POP PUSH2 0x140C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP SWAP3 POP POP POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1436 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x30DF PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x1BA2 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x14C1 DUP5 PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x145F SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x27FB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH2 0x1C6F JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP8 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP8 PUSH1 0x20 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH8 0xFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x3 PUSH1 0x0 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP9 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP9 PUSH1 0x20 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH8 0xFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH1 0x0 PUSH2 0x1674 DUP8 DUP11 DUP11 PUSH1 0x0 ADD MLOAD PUSH2 0x1D36 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 EQ ISZERO PUSH2 0x1804 JUMPI PUSH1 0x0 PUSH1 0x4 PUSH1 0x0 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 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 PUSH1 0x0 SWAP1 JUMPDEST DUP3 DUP3 LT ISZERO PUSH2 0x1796 JUMPI DUP4 DUP3 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE SWAP1 DUP2 PUSH1 0x0 DUP3 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP3 ADD PUSH1 0x14 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH8 0xFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x16E0 JUMP JUMPDEST POP POP POP POP SWAP1 POP PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x17E9 JUMPI PUSH1 0x0 DUP3 PUSH1 0x1 DUP4 PUSH2 0x17BB SWAP2 SWAP1 PUSH2 0x2C10 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x17CC JUMPI PUSH2 0x17CB PUSH2 0x2E39 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH2 0x17E5 DUP11 DUP14 DUP4 PUSH1 0x0 ADD MLOAD PUSH2 0x1D36 JUMP JUMPDEST SWAP4 POP POP JUMPDEST PUSH1 0x0 DUP4 EQ ISZERO PUSH2 0x1801 JUMPI PUSH2 0x17FE DUP10 DUP13 PUSH1 0x0 PUSH2 0x1D36 JUMP JUMPDEST SWAP3 POP JUMPDEST POP POP JUMPDEST PUSH1 0x0 DUP1 DUP3 GT DUP1 ISZERO PUSH2 0x1822 JUMPI POP DUP2 DUP10 PUSH1 0x20 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND GT JUMPDEST SWAP1 POP DUP1 ISZERO DUP1 ISZERO PUSH2 0x1832 JUMPI POP PUSH1 0x0 DUP5 EQ JUMPDEST ISZERO PUSH2 0x1847 JUMPI PUSH1 0x0 DUP4 SWAP6 POP SWAP6 POP POP POP POP POP PUSH2 0x187B JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP8 DUP6 DUP6 PUSH2 0x185D SWAP2 SWAP1 PUSH2 0x2C10 JUMP JUMPDEST PUSH2 0x1867 SWAP2 SWAP1 PUSH2 0x2BB6 JUMP JUMPDEST PUSH2 0x1871 SWAP2 SWAP1 PUSH2 0x2B85 JUMP JUMPDEST DUP4 SWAP6 POP SWAP6 POP POP POP POP POP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1890 DUP5 DUP5 DUP5 DUP5 PUSH2 0x18A6 JUMP JUMPDEST POP PUSH2 0x18A0 DUP3 DUP6 DUP6 PUSH1 0x0 ADD MLOAD PUSH2 0x1AD5 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x18B7 DUP8 DUP8 DUP8 DUP8 PUSH2 0x14C7 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP1 PUSH1 0x1 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP9 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP9 PUSH1 0x20 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH8 0xFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP PUSH1 0x0 DUP3 GT ISZERO PUSH2 0x1AC8 JUMPI DUP2 PUSH1 0x0 DUP1 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP9 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x1A3E SWAP2 SWAP1 PUSH2 0x2B2F JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x7E27222C50A5510DFC61468D936B48C880BFBD05C1EB59C5BE79B06E582369DD DUP6 DUP6 PUSH1 0x40 MLOAD PUSH2 0x1ABF SWAP3 SWAP2 SWAP1 PUSH2 0x29B0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 JUMPDEST DUP2 SWAP3 POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST TIMESTAMP PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1BAD DUP5 PUSH2 0x1DFB JUMP JUMPDEST PUSH2 0x1BEC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1BE3 SWAP1 PUSH2 0x28FA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x40 MLOAD PUSH2 0x1C14 SWAP2 SWAP1 PUSH2 0x27A0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1C4F 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 0x1C54 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x1C64 DUP3 DUP3 DUP7 PUSH2 0x1E1E JUMP JUMPDEST SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1CD1 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 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E85 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD GT ISZERO PUSH2 0x1D31 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1CF1 SWAP2 SWAP1 PUSH2 0x2426 JUMP JUMPDEST PUSH2 0x1D30 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1D27 SWAP1 PUSH2 0x293A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EXTCODESIZE GT SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x1E2E JUMPI DUP3 SWAP1 POP PUSH2 0x1E7E JUMP JUMPDEST PUSH1 0x0 DUP4 MLOAD GT ISZERO PUSH2 0x1E41 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1E75 SWAP2 SWAP1 PUSH2 0x2898 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1E94 DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x1E9D JUMP JUMPDEST SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x1EE2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1ED9 SWAP1 PUSH2 0x28DA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1EEB DUP6 PUSH2 0x1DFB JUMP JUMPDEST PUSH2 0x1F2A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1F21 SWAP1 PUSH2 0x291A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x1F53 SWAP2 SWAP1 PUSH2 0x27A0 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 0x1F90 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 0x1F95 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x1FA5 DUP3 DUP3 DUP7 PUSH2 0x1E1E JUMP JUMPDEST SWAP3 POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x1FFA DUP2 PUSH2 0x303D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2016 JUMPI PUSH2 0x2015 PUSH2 0x2E9C JUMP JUMPDEST JUMPDEST DUP3 CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2033 JUMPI PUSH2 0x2032 PUSH2 0x2E97 JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x204F JUMPI PUSH2 0x204E PUSH2 0x2EB0 JUMP JUMPDEST JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x2065 DUP2 PUSH2 0x3054 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x207A DUP2 PUSH2 0x306B JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x208F DUP2 PUSH2 0x3082 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x20A4 DUP2 PUSH2 0x3099 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x20C0 JUMPI PUSH2 0x20BF PUSH2 0x2EA6 JUMP JUMPDEST JUMPDEST PUSH2 0x20CA PUSH1 0x40 PUSH2 0x2A8E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x20DA DUP5 DUP3 DUP6 ADD PUSH2 0x206B JUMP JUMPDEST PUSH1 0x0 DUP4 ADD MSTORE POP PUSH1 0x20 PUSH2 0x20EE DUP5 DUP3 DUP6 ADD PUSH2 0x2124 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x2109 DUP2 PUSH2 0x30B0 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x211E DUP2 PUSH2 0x30B0 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x2133 DUP2 PUSH2 0x30C7 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x214F JUMPI PUSH2 0x214E PUSH2 0x2EBF JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x215D DUP5 DUP3 DUP6 ADD PUSH2 0x1FEB JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x217D JUMPI PUSH2 0x217C PUSH2 0x2EBF JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x218B DUP6 DUP3 DUP7 ADD PUSH2 0x1FEB JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x219C DUP6 DUP3 DUP7 ADD PUSH2 0x1FEB JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x21BF JUMPI PUSH2 0x21BE PUSH2 0x2EBF JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x21CD DUP7 DUP3 DUP8 ADD PUSH2 0x1FEB JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x21DE DUP7 DUP3 DUP8 ADD PUSH2 0x1FEB JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x21EF DUP7 DUP3 DUP8 ADD PUSH2 0x1FEB JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2213 JUMPI PUSH2 0x2212 PUSH2 0x2EBF JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x2221 DUP8 DUP3 DUP9 ADD PUSH2 0x1FEB JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x2232 DUP8 DUP3 DUP9 ADD PUSH2 0x1FEB JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x2243 DUP8 DUP3 DUP9 ADD PUSH2 0x206B JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0x2254 DUP8 DUP3 DUP9 ADD PUSH2 0x2124 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2279 JUMPI PUSH2 0x2278 PUSH2 0x2EBF JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x2287 DUP7 DUP3 DUP8 ADD PUSH2 0x1FEB JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x2298 DUP7 DUP3 DUP8 ADD PUSH2 0x1FEB JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x22A9 DUP7 DUP3 DUP8 ADD PUSH2 0x20FA JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x22CA JUMPI PUSH2 0x22C9 PUSH2 0x2EBF JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x22D8 DUP6 DUP3 DUP7 ADD PUSH2 0x1FEB JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x22E9 DUP6 DUP3 DUP7 ADD PUSH2 0x206B JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x230C JUMPI PUSH2 0x230B PUSH2 0x2EBF JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x231A DUP7 DUP3 DUP8 ADD PUSH2 0x1FEB JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x232B DUP7 DUP3 DUP8 ADD PUSH2 0x206B JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x233C DUP7 DUP3 DUP8 ADD PUSH2 0x2124 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x80 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x235F JUMPI PUSH2 0x235E PUSH2 0x2EBF JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x236D DUP7 DUP3 DUP8 ADD PUSH2 0x1FEB JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x237E DUP7 DUP3 DUP8 ADD PUSH2 0x20AA JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0x238F DUP7 DUP3 DUP8 ADD PUSH2 0x1FEB JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x23B0 JUMPI PUSH2 0x23AF PUSH2 0x2EBF JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x23BE DUP6 DUP3 DUP7 ADD PUSH2 0x1FEB JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x23CF DUP6 DUP3 DUP7 ADD PUSH2 0x20FA JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x23F0 JUMPI PUSH2 0x23EF PUSH2 0x2EBF JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x240E JUMPI PUSH2 0x240D PUSH2 0x2EBA JUMP JUMPDEST JUMPDEST PUSH2 0x241A DUP6 DUP3 DUP7 ADD PUSH2 0x2000 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x243C JUMPI PUSH2 0x243B PUSH2 0x2EBF JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x244A DUP5 DUP3 DUP6 ADD PUSH2 0x2056 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x246F JUMPI PUSH2 0x246E PUSH2 0x2EBF JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x247D DUP9 DUP3 DUP10 ADD PUSH2 0x2080 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0x248E DUP9 DUP3 DUP10 ADD PUSH2 0x2095 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH2 0x249F DUP9 DUP3 DUP10 ADD PUSH2 0x20FA JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 PUSH2 0x24B0 DUP9 DUP3 DUP10 ADD PUSH2 0x206B JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 PUSH2 0x24C1 DUP9 DUP3 DUP10 ADD PUSH2 0x20FA JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x24E4 JUMPI PUSH2 0x24E3 PUSH2 0x2EBF JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x24F2 DUP5 DUP3 DUP6 ADD PUSH2 0x210F JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2507 DUP4 DUP4 PUSH2 0x2593 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2518 DUP2 PUSH2 0x2C44 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2529 DUP3 PUSH2 0x2AC3 JUMP JUMPDEST PUSH2 0x2533 DUP2 DUP6 PUSH2 0x2AF1 JUMP JUMPDEST SWAP4 POP DUP4 PUSH1 0x20 DUP3 MUL DUP6 ADD PUSH2 0x2545 DUP6 PUSH2 0x2AB3 JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x2581 JUMPI DUP5 DUP5 SUB DUP10 MSTORE DUP2 MLOAD PUSH2 0x2562 DUP6 DUP3 PUSH2 0x24FB JUMP JUMPDEST SWAP5 POP PUSH2 0x256D DUP4 PUSH2 0x2AE4 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP11 ADD SWAP10 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x2549 JUMP JUMPDEST POP DUP3 SWAP8 POP DUP8 SWAP6 POP POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x259E DUP3 PUSH2 0x2ACE JUMP JUMPDEST PUSH2 0x25A8 DUP2 DUP6 PUSH2 0x2B02 JUMP JUMPDEST SWAP4 POP PUSH2 0x25B8 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x2D2E JUMP JUMPDEST PUSH2 0x25C1 DUP2 PUSH2 0x2EC4 JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x25D7 DUP3 PUSH2 0x2ACE JUMP JUMPDEST PUSH2 0x25E1 DUP2 DUP6 PUSH2 0x2B13 JUMP JUMPDEST SWAP4 POP PUSH2 0x25F1 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x2D2E JUMP JUMPDEST DUP1 DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2606 DUP2 PUSH2 0x2CE6 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x2615 DUP2 PUSH2 0x2CE6 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x2624 DUP2 PUSH2 0x2D0A JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2635 DUP3 PUSH2 0x2AD9 JUMP JUMPDEST PUSH2 0x263F DUP2 DUP6 PUSH2 0x2B1E JUMP JUMPDEST SWAP4 POP PUSH2 0x264F DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x2D2E JUMP JUMPDEST PUSH2 0x2658 DUP2 PUSH2 0x2EC4 JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2670 PUSH1 0x17 DUP4 PUSH2 0x2B1E JUMP JUMPDEST SWAP2 POP PUSH2 0x267B DUP3 PUSH2 0x2ED5 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2693 PUSH1 0x26 DUP4 PUSH2 0x2B1E JUMP JUMPDEST SWAP2 POP PUSH2 0x269E DUP3 PUSH2 0x2EFE JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x26B6 PUSH1 0x26 DUP4 PUSH2 0x2B1E JUMP JUMPDEST SWAP2 POP PUSH2 0x26C1 DUP3 PUSH2 0x2F4D JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x26D9 PUSH1 0x1D DUP4 PUSH2 0x2B1E JUMP JUMPDEST SWAP2 POP PUSH2 0x26E4 DUP3 PUSH2 0x2F9C JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x26FC PUSH1 0x2A DUP4 PUSH2 0x2B1E JUMP JUMPDEST SWAP2 POP PUSH2 0x2707 DUP3 PUSH2 0x2FC5 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x271F PUSH1 0x1C DUP4 PUSH2 0x2B1E JUMP JUMPDEST SWAP2 POP PUSH2 0x272A DUP3 PUSH2 0x3014 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP3 ADD PUSH1 0x0 DUP3 ADD MLOAD PUSH2 0x274B PUSH1 0x0 DUP6 ADD DUP3 PUSH2 0x25FD JUMP JUMPDEST POP PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x275E PUSH1 0x20 DUP6 ADD DUP3 PUSH2 0x2782 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x276D DUP2 PUSH2 0x2CB8 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x277C DUP2 PUSH2 0x2CC2 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x278B DUP2 PUSH2 0x2CD2 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x279A DUP2 PUSH2 0x2CD2 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x27AC DUP3 DUP5 PUSH2 0x25CC JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x27CC PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x250F JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x27E7 PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x250F JUMP JUMPDEST PUSH2 0x27F4 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x250F JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD SWAP1 POP PUSH2 0x2810 PUSH1 0x0 DUP4 ADD DUP7 PUSH2 0x250F JUMP JUMPDEST PUSH2 0x281D PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x250F JUMP JUMPDEST PUSH2 0x282A PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x2764 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x284C DUP2 DUP5 PUSH2 0x251E JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x2869 PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x260C JUMP JUMPDEST PUSH2 0x2876 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2791 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x2892 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x261B JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x28B2 DUP2 DUP5 PUSH2 0x262A JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x28D3 DUP2 PUSH2 0x2663 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x28F3 DUP2 PUSH2 0x2686 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x2913 DUP2 PUSH2 0x26A9 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x2933 DUP2 PUSH2 0x26CC JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x2953 DUP2 PUSH2 0x26EF JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x2973 DUP2 PUSH2 0x2712 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x298F PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x2735 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x29AA PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x2764 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x29C5 PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x2764 JUMP JUMPDEST PUSH2 0x29D2 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2764 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD SWAP1 POP PUSH2 0x29EE PUSH1 0x0 DUP4 ADD DUP7 PUSH2 0x2764 JUMP JUMPDEST PUSH2 0x29FB PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x2764 JUMP JUMPDEST PUSH2 0x2A08 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x2764 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x2A25 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x2773 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SUB DUP5 CALLDATASIZE SUB SUB DUP2 SLT PUSH2 0x2A48 JUMPI PUSH2 0x2A47 PUSH2 0x2EAB JUMP JUMPDEST JUMPDEST DUP1 DUP5 ADD SWAP3 POP DUP3 CALLDATALOAD SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x2A6A JUMPI PUSH2 0x2A69 PUSH2 0x2EA1 JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP4 ADD SWAP3 POP PUSH1 0x1 DUP3 MUL CALLDATASIZE SUB DUP4 SGT ISZERO PUSH2 0x2A86 JUMPI PUSH2 0x2A85 PUSH2 0x2EB5 JUMP JUMPDEST JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2A98 PUSH2 0x2AA9 JUMP JUMPDEST SWAP1 POP PUSH2 0x2AA4 DUP3 DUP3 PUSH2 0x2D61 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2B3A DUP3 PUSH2 0x2CB8 JUMP JUMPDEST SWAP2 POP PUSH2 0x2B45 DUP4 PUSH2 0x2CB8 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x2B7A JUMPI PUSH2 0x2B79 PUSH2 0x2DDB JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2B90 DUP3 PUSH2 0x2CB8 JUMP JUMPDEST SWAP2 POP PUSH2 0x2B9B DUP4 PUSH2 0x2CB8 JUMP JUMPDEST SWAP3 POP DUP3 PUSH2 0x2BAB JUMPI PUSH2 0x2BAA PUSH2 0x2E0A JUMP JUMPDEST JUMPDEST DUP3 DUP3 DIV SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2BC1 DUP3 PUSH2 0x2CB8 JUMP JUMPDEST SWAP2 POP PUSH2 0x2BCC DUP4 PUSH2 0x2CB8 JUMP JUMPDEST SWAP3 POP DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x2C05 JUMPI PUSH2 0x2C04 PUSH2 0x2DDB JUMP JUMPDEST JUMPDEST DUP3 DUP3 MUL SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C1B DUP3 PUSH2 0x2CB8 JUMP JUMPDEST SWAP2 POP PUSH2 0x2C26 DUP4 PUSH2 0x2CB8 JUMP JUMPDEST SWAP3 POP DUP3 DUP3 LT ISZERO PUSH2 0x2C39 JUMPI PUSH2 0x2C38 PUSH2 0x2DDB JUMP JUMPDEST JUMPDEST DUP3 DUP3 SUB SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C4F DUP3 PUSH2 0x2C98 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C6D DUP3 PUSH2 0x2C44 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C7F DUP3 PUSH2 0x2C44 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C91 DUP3 PUSH2 0x2C44 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2CF1 DUP3 PUSH2 0x2CF8 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2D03 DUP3 PUSH2 0x2C98 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2D15 DUP3 PUSH2 0x2D1C JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2D27 DUP3 PUSH2 0x2C98 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2D4C JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x2D31 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x2D5B JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x2D6A DUP3 PUSH2 0x2EC4 JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x2D89 JUMPI PUSH2 0x2D88 PUSH2 0x2E68 JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2D9D DUP3 PUSH2 0x2CB8 JUMP JUMPDEST SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x2DD0 JUMPI PUSH2 0x2DCF PUSH2 0x2DDB JUMP JUMPDEST JUMPDEST PUSH1 0x1 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x475265776172642F6F6E6C792D6C697175696461746F72000000000000000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x722063616C6C0000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x6E74726163740000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x6F74207375636365656400000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x475265776172642F6F6E6C792D4761756765436F6E74726F6C6C657200000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH2 0x3046 DUP2 PUSH2 0x2C44 JUMP JUMPDEST DUP2 EQ PUSH2 0x3051 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x305D DUP2 PUSH2 0x2C56 JUMP JUMPDEST DUP2 EQ PUSH2 0x3068 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x3074 DUP2 PUSH2 0x2C62 JUMP JUMPDEST DUP2 EQ PUSH2 0x307F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x308B DUP2 PUSH2 0x2C74 JUMP JUMPDEST DUP2 EQ PUSH2 0x3096 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x30A2 DUP2 PUSH2 0x2C86 JUMP JUMPDEST DUP2 EQ PUSH2 0x30AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x30B9 DUP2 PUSH2 0x2CB8 JUMP JUMPDEST DUP2 EQ PUSH2 0x30C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x30D0 DUP2 PUSH2 0x2CD2 JUMP JUMPDEST DUP2 EQ PUSH2 0x30DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2064656C65 PUSH8 0x6174652063616C6C KECCAK256 PUSH7 0x61696C6564A264 PUSH10 0x706673582212207AA429 SUB 0xEB ADDRESS 0xC0 0xBC MOD CHAINID 0x5F 0xC4 DUP3 0xCE DIV 0xBD LOG3 DUP16 0xD8 0xE8 DUP8 MSTORE8 STATICCALL 0xDD GASLIMIT CALLDATASIZE 0x24 EXTCODECOPY 0xAA LOG1 DUP14 0xBB PUSH5 0x736F6C6343 STOP ADDMOD MOD STOP CALLER ",
							"sourceMap": "743:18720:6:-:0;;;5767:660;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5963:1;5926:39;;5934:16;5926:39;;;;5918:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;6033:1;6015:20;;:6;:20;;;;6007:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;6111:1;6088:25;;:11;:25;;;;6080:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;6177:3;6164:10;:16;;;6156:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;6239:16;6221:15;;:34;;;;;;;;;;;;;;;;;;6273:6;6265:5;;:14;;;;;;;;;;;;;;;;;;6301:10;6289:9;;:22;;;;;;;;;;;;;;;;;;6334:11;6321:10;;:24;;;;;;;;;;;;;;;;;;6396:11;6361:59;;6388:6;6361:59;;6370:16;6361:59;;;6409:10;6361:59;;;;;;:::i;:::-;;;;;;;;5767:660;;;;743:18720;;7:143:19;64:5;95:6;89:13;80:22;;111:33;138:5;111:33;:::i;:::-;70:80;;;;:::o;156:193::-;238:5;269:6;263:13;254:22;;285:58;337:5;285:58;:::i;:::-;244:105;;;;:::o;355:141::-;411:5;442:6;436:13;427:22;;458:32;484:5;458:32;:::i;:::-;417:79;;;;:::o;502:868::-;623:6;631;639;647;696:3;684:9;675:7;671:23;667:33;664:2;;;703:79;;:::i;:::-;664:2;823:1;848:89;929:7;920:6;909:9;905:22;848:89;:::i;:::-;838:99;;794:153;986:2;1012:64;1068:7;1059:6;1048:9;1044:22;1012:64;:::i;:::-;1002:74;;957:129;1125:2;1151:64;1207:7;1198:6;1187:9;1183:22;1151:64;:::i;:::-;1141:74;;1096:129;1264:2;1290:63;1345:7;1336:6;1325:9;1321:22;1290:63;:::i;:::-;1280:73;;1235:128;654:716;;;;;;;:::o;1376:366::-;1518:3;1539:67;1603:2;1598:3;1539:67;:::i;:::-;1532:74;;1615:93;1704:3;1615:93;:::i;:::-;1733:2;1728:3;1724:12;1717:19;;1522:220;;;:::o;1748:366::-;1890:3;1911:67;1975:2;1970:3;1911:67;:::i;:::-;1904:74;;1987:93;2076:3;1987:93;:::i;:::-;2105:2;2100:3;2096:12;2089:19;;1894:220;;;:::o;2120:366::-;2262:3;2283:67;2347:2;2342:3;2283:67;:::i;:::-;2276:74;;2359:93;2448:3;2359:93;:::i;:::-;2477:2;2472:3;2468:12;2461:19;;2266:220;;;:::o;2492:366::-;2634:3;2655:67;2719:2;2714:3;2655:67;:::i;:::-;2648:74;;2731:93;2820:3;2731:93;:::i;:::-;2849:2;2844:3;2840:12;2833:19;;2638:220;;;:::o;2864:115::-;2949:23;2966:5;2949:23;:::i;:::-;2944:3;2937:36;2927:52;;:::o;2985:419::-;3151:4;3189:2;3178:9;3174:18;3166:26;;3238:9;3232:4;3228:20;3224:1;3213:9;3209:17;3202:47;3266:131;3392:4;3266:131;:::i;:::-;3258:139;;3156:248;;;:::o;3410:419::-;3576:4;3614:2;3603:9;3599:18;3591:26;;3663:9;3657:4;3653:20;3649:1;3638:9;3634:17;3627:47;3691:131;3817:4;3691:131;:::i;:::-;3683:139;;3581:248;;;:::o;3835:419::-;4001:4;4039:2;4028:9;4024:18;4016:26;;4088:9;4082:4;4078:20;4074:1;4063:9;4059:17;4052:47;4116:131;4242:4;4116:131;:::i;:::-;4108:139;;4006:248;;;:::o;4260:419::-;4426:4;4464:2;4453:9;4449:18;4441:26;;4513:9;4507:4;4503:20;4499:1;4488:9;4484:17;4477:47;4541:131;4667:4;4541:131;:::i;:::-;4533:139;;4431:248;;;:::o;4685:218::-;4776:4;4814:2;4803:9;4799:18;4791:26;;4827:69;4893:1;4882:9;4878:17;4869:6;4827:69;:::i;:::-;4781:122;;;;:::o;4990:169::-;5074:11;5108:6;5103:3;5096:19;5148:4;5143:3;5139:14;5124:29;;5086:73;;;;:::o;5165:96::-;5202:7;5231:24;5249:5;5231:24;:::i;:::-;5220:35;;5210:51;;;:::o;5267:121::-;5329:7;5358:24;5376:5;5358:24;:::i;:::-;5347:35;;5337:51;;;:::o;5394:126::-;5431:7;5471:42;5464:5;5460:54;5449:65;;5439:81;;;:::o;5526:93::-;5562:7;5602:10;5595:5;5591:22;5580:33;;5570:49;;;:::o;5748:117::-;5857:1;5854;5847:12;5871:175;6011:27;6007:1;5999:6;5995:14;5988:51;5977:69;:::o;6052:180::-;6192:32;6188:1;6180:6;6176:14;6169:56;6158:74;:::o;6238:178::-;6378:30;6374:1;6366:6;6362:14;6355:54;6344:72;:::o;6422:177::-;6562:29;6558:1;6550:6;6546:14;6539:53;6528:71;:::o;6605:122::-;6678:24;6696:5;6678:24;:::i;:::-;6671:5;6668:35;6658:2;;6717:1;6714;6707:12;6658:2;6648:79;:::o;6733:172::-;6831:49;6874:5;6831:49;:::i;:::-;6824:5;6821:60;6811:2;;6895:1;6892;6885:12;6811:2;6801:104;:::o;6911:120::-;6983:23;7000:5;6983:23;:::i;:::-;6976:5;6973:34;6963:2;;7021:1;7018;7011:12;6963:2;6953:78;:::o;743:18720:6:-;;;;;;;"
						},
						"deployedBytecode": {
							"functionDebugData": {
								"@_callOptionalReturn_393": {
									"entryPoint": 7279,
									"id": 393,
									"parameterSlots": 2,
									"returnSlots": 0
								},
								"@_claimAll_3549": {
									"entryPoint": 4299,
									"id": 3549,
									"parameterSlots": 3,
									"returnSlots": 0
								},
								"@_claimRewards_3441": {
									"entryPoint": 6310,
									"id": 3441,
									"parameterSlots": 4,
									"returnSlots": 1
								},
								"@_claim_3472": {
									"entryPoint": 6276,
									"id": 3472,
									"parameterSlots": 4,
									"returnSlots": 0
								},
								"@_currentRewardToken_3177": {
									"entryPoint": 4716,
									"id": 3177,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"@_getRewards_3375": {
									"entryPoint": 5319,
									"id": 3375,
									"parameterSlots": 4,
									"returnSlots": 2
								},
								"@_getUserGaugeRewardTokenLastClaimedTimestamp_3198": {
									"entryPoint": 7478,
									"id": 3198,
									"parameterSlots": 3,
									"returnSlots": 1
								},
								"@_setUserGaugeRewardTokenLastClaimedTimestamp_3223": {
									"entryPoint": 6869,
									"id": 3223,
									"parameterSlots": 3,
									"returnSlots": 0
								},
								"@afterDecreaseGauge_3035": {
									"entryPoint": 1013,
									"id": 3035,
									"parameterSlots": 3,
									"returnSlots": 0
								},
								"@afterIncreaseGauge_3015": {
									"entryPoint": 1591,
									"id": 3015,
									"parameterSlots": 3,
									"returnSlots": 0
								},
								"@afterSwap_2995": {
									"entryPoint": 3103,
									"id": 2995,
									"parameterSlots": 5,
									"returnSlots": 0
								},
								"@claimAll_3085": {
									"entryPoint": 1211,
									"id": 3085,
									"parameterSlots": 2,
									"returnSlots": 0
								},
								"@claim_3062": {
									"entryPoint": 2870,
									"id": 3062,
									"parameterSlots": 3,
									"returnSlots": 0
								},
								"@currentRewardToken_2832": {
									"entryPoint": 1517,
									"id": 2832,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"@functionCallWithValue_553": {
									"entryPoint": 7837,
									"id": 553,
									"parameterSlots": 4,
									"returnSlots": 1
								},
								"@functionCall_483": {
									"entryPoint": 7813,
									"id": 483,
									"parameterSlots": 3,
									"returnSlots": 1
								},
								"@functionDelegateCall_622": {
									"entryPoint": 5137,
									"id": 622,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"@functionDelegateCall_657": {
									"entryPoint": 7074,
									"id": 657,
									"parameterSlots": 3,
									"returnSlots": 1
								},
								"@gaugeController_2670": {
									"entryPoint": 1751,
									"id": 2670,
									"parameterSlots": 0,
									"returnSlots": 0
								},
								"@gaugeRewardTokenExchangeRates_2653": {
									"entryPoint": 2820,
									"id": 2653,
									"parameterSlots": 0,
									"returnSlots": 0
								},
								"@gaugeRewardTokens_2666": {
									"entryPoint": 1404,
									"id": 2666,
									"parameterSlots": 0,
									"returnSlots": 0
								},
								"@getRewards_2865": {
									"entryPoint": 2613,
									"id": 2865,
									"parameterSlots": 3,
									"returnSlots": 1
								},
								"@isContract_412": {
									"entryPoint": 7675,
									"id": 412,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"@liquidator_2676": {
									"entryPoint": 1173,
									"id": 2676,
									"parameterSlots": 0,
									"returnSlots": 0
								},
								"@multicall_743": {
									"entryPoint": 1789,
									"id": 743,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"@redeem_3131": {
									"entryPoint": 2079,
									"id": 3131,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"@safeTransferFrom_171": {
									"entryPoint": 5182,
									"id": 171,
									"parameterSlots": 4,
									"returnSlots": 0
								},
								"@stakerCut_2679": {
									"entryPoint": 2057,
									"id": 2679,
									"parameterSlots": 0,
									"returnSlots": 0
								},
								"@userGaugeRewardTokenExchangeRates_2634": {
									"entryPoint": 2550,
									"id": 2634,
									"parameterSlots": 0,
									"returnSlots": 0
								},
								"@userGaugeRewardTokenLastClaimedTimestamp_2643": {
									"entryPoint": 1541,
									"id": 2643,
									"parameterSlots": 0,
									"returnSlots": 0
								},
								"@userRewardTokenBalances_2622": {
									"entryPoint": 976,
									"id": 2622,
									"parameterSlots": 0,
									"returnSlots": 0
								},
								"@vault_2673": {
									"entryPoint": 3065,
									"id": 2673,
									"parameterSlots": 0,
									"returnSlots": 0
								},
								"@verifyCallResult_688": {
									"entryPoint": 7710,
									"id": 688,
									"parameterSlots": 3,
									"returnSlots": 1
								},
								"abi_decode_t_address": {
									"entryPoint": 8171,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"abi_decode_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr": {
									"entryPoint": 8192,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 2
								},
								"abi_decode_t_bool_fromMemory": {
									"entryPoint": 8278,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"abi_decode_t_contract$_IERC20_$77": {
									"entryPoint": 8299,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"abi_decode_t_contract$_IPrizePool_$3970": {
									"entryPoint": 8320,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"abi_decode_t_contract$_ITicket_$4186": {
									"entryPoint": 8341,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"abi_decode_t_struct$_RewardToken_$2659_memory_ptr": {
									"entryPoint": 8362,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"abi_decode_t_uint256": {
									"entryPoint": 8442,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"abi_decode_t_uint256_fromMemory": {
									"entryPoint": 8463,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"abi_decode_t_uint64": {
									"entryPoint": 8484,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"abi_decode_tuple_t_address": {
									"entryPoint": 8505,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"abi_decode_tuple_t_addresst_address": {
									"entryPoint": 8550,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 2
								},
								"abi_decode_tuple_t_addresst_addresst_address": {
									"entryPoint": 8614,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 3
								},
								"abi_decode_tuple_t_addresst_addresst_contract$_IERC20_$77t_uint64": {
									"entryPoint": 8697,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 4
								},
								"abi_decode_tuple_t_addresst_addresst_uint256": {
									"entryPoint": 8800,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 3
								},
								"abi_decode_tuple_t_addresst_contract$_IERC20_$77": {
									"entryPoint": 8883,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 2
								},
								"abi_decode_tuple_t_addresst_contract$_IERC20_$77t_uint64": {
									"entryPoint": 8947,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 3
								},
								"abi_decode_tuple_t_addresst_struct$_RewardToken_$2659_memory_ptrt_address": {
									"entryPoint": 9030,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 3
								},
								"abi_decode_tuple_t_addresst_uint256": {
									"entryPoint": 9113,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 2
								},
								"abi_decode_tuple_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr": {
									"entryPoint": 9177,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 2
								},
								"abi_decode_tuple_t_bool_fromMemory": {
									"entryPoint": 9254,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"abi_decode_tuple_t_contract$_IPrizePool_$3970t_contract$_ITicket_$4186t_uint256t_contract$_IERC20_$77t_uint256": {
									"entryPoint": 9299,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 5
								},
								"abi_decode_tuple_t_uint256_fromMemory": {
									"entryPoint": 9422,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"abi_encodeUpdatedPos_t_bytes_memory_ptr_to_t_bytes_memory_ptr": {
									"entryPoint": 9467,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"abi_encode_t_address_to_t_address_fromStack": {
									"entryPoint": 9487,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 0
								},
								"abi_encode_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_fromStack": {
									"entryPoint": 9502,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr": {
									"entryPoint": 9619,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack": {
									"entryPoint": 9676,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"abi_encode_t_contract$_IERC20_$77_to_t_address": {
									"entryPoint": 9725,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 0
								},
								"abi_encode_t_contract$_IERC20_$77_to_t_address_fromStack": {
									"entryPoint": 9740,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 0
								},
								"abi_encode_t_contract$_IGaugeController_$3664_to_t_address_fromStack": {
									"entryPoint": 9755,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 0
								},
								"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack": {
									"entryPoint": 9770,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"abi_encode_t_stringliteral_3d9aad6f9cafa45f8d5356023189d3e1086a81a6694f72a8006f1b290ec90f41_to_t_string_memory_ptr_fromStack": {
									"entryPoint": 9827,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"abi_encode_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c_to_t_string_memory_ptr_fromStack": {
									"entryPoint": 9862,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack": {
									"entryPoint": 9897,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"abi_encode_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad_to_t_string_memory_ptr_fromStack": {
									"entryPoint": 9932,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"abi_encode_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd_to_t_string_memory_ptr_fromStack": {
									"entryPoint": 9967,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"abi_encode_t_stringliteral_fa0209976ed18f66239d9b649265177d5902c97497d099e3744ef8b17544aa43_to_t_string_memory_ptr_fromStack": {
									"entryPoint": 10002,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"abi_encode_t_struct$_RewardToken_$2659_memory_ptr_to_t_struct$_RewardToken_$2659_memory_ptr_fromStack": {
									"entryPoint": 10037,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 0
								},
								"abi_encode_t_uint256_to_t_uint256_fromStack": {
									"entryPoint": 10084,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 0
								},
								"abi_encode_t_uint32_to_t_uint32_fromStack": {
									"entryPoint": 10099,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 0
								},
								"abi_encode_t_uint64_to_t_uint64": {
									"entryPoint": 10114,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 0
								},
								"abi_encode_t_uint64_to_t_uint64_fromStack": {
									"entryPoint": 10129,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 0
								},
								"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": {
									"entryPoint": 10144,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
									"entryPoint": 10167,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed": {
									"entryPoint": 10194,
									"id": null,
									"parameterSlots": 3,
									"returnSlots": 1
								},
								"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed": {
									"entryPoint": 10235,
									"id": null,
									"parameterSlots": 4,
									"returnSlots": 1
								},
								"abi_encode_tuple_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__fromStack_reversed": {
									"entryPoint": 10290,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"abi_encode_tuple_t_contract$_IERC20_$77_t_uint64__to_t_address_t_uint64__fromStack_reversed": {
									"entryPoint": 10324,
									"id": null,
									"parameterSlots": 3,
									"returnSlots": 1
								},
								"abi_encode_tuple_t_contract$_IGaugeController_$3664__to_t_address__fromStack_reversed": {
									"entryPoint": 10365,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": {
									"entryPoint": 10392,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"abi_encode_tuple_t_stringliteral_3d9aad6f9cafa45f8d5356023189d3e1086a81a6694f72a8006f1b290ec90f41__to_t_string_memory_ptr__fromStack_reversed": {
									"entryPoint": 10426,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed": {
									"entryPoint": 10458,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed": {
									"entryPoint": 10490,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed": {
									"entryPoint": 10522,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed": {
									"entryPoint": 10554,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"abi_encode_tuple_t_stringliteral_fa0209976ed18f66239d9b649265177d5902c97497d099e3744ef8b17544aa43__to_t_string_memory_ptr__fromStack_reversed": {
									"entryPoint": 10586,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"abi_encode_tuple_t_struct$_RewardToken_$2659_memory_ptr__to_t_struct$_RewardToken_$2659_memory_ptr__fromStack_reversed": {
									"entryPoint": 10618,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": {
									"entryPoint": 10645,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed": {
									"entryPoint": 10672,
									"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": 10713,
									"id": null,
									"parameterSlots": 4,
									"returnSlots": 1
								},
								"abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed": {
									"entryPoint": 10768,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"access_calldata_tail_t_bytes_calldata_ptr": {
									"entryPoint": 10795,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 2
								},
								"allocate_memory": {
									"entryPoint": 10894,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"allocate_unbounded": {
									"entryPoint": 10921,
									"id": null,
									"parameterSlots": 0,
									"returnSlots": 1
								},
								"array_dataslot_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr": {
									"entryPoint": 10931,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"array_length_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr": {
									"entryPoint": 10947,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"array_length_t_bytes_memory_ptr": {
									"entryPoint": 10958,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"array_length_t_string_memory_ptr": {
									"entryPoint": 10969,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"array_nextElement_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr": {
									"entryPoint": 10980,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"array_storeLengthForEncoding_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_fromStack": {
									"entryPoint": 10993,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"array_storeLengthForEncoding_t_bytes_memory_ptr": {
									"entryPoint": 11010,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack": {
									"entryPoint": 11027,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"array_storeLengthForEncoding_t_string_memory_ptr_fromStack": {
									"entryPoint": 11038,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"checked_add_t_uint256": {
									"entryPoint": 11055,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"checked_div_t_uint256": {
									"entryPoint": 11141,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"checked_mul_t_uint256": {
									"entryPoint": 11190,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"checked_sub_t_uint256": {
									"entryPoint": 11280,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"cleanup_t_address": {
									"entryPoint": 11332,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"cleanup_t_bool": {
									"entryPoint": 11350,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"cleanup_t_contract$_IERC20_$77": {
									"entryPoint": 11362,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"cleanup_t_contract$_IPrizePool_$3970": {
									"entryPoint": 11380,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"cleanup_t_contract$_ITicket_$4186": {
									"entryPoint": 11398,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"cleanup_t_uint160": {
									"entryPoint": 11416,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"cleanup_t_uint256": {
									"entryPoint": 11448,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"cleanup_t_uint32": {
									"entryPoint": 11458,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"cleanup_t_uint64": {
									"entryPoint": 11474,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"convert_t_contract$_IERC20_$77_to_t_address": {
									"entryPoint": 11494,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"convert_t_contract$_IERC20_$77_to_t_uint160": {
									"entryPoint": 11512,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"convert_t_contract$_IGaugeController_$3664_to_t_address": {
									"entryPoint": 11530,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"convert_t_contract$_IGaugeController_$3664_to_t_uint160": {
									"entryPoint": 11548,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"copy_memory_to_memory": {
									"entryPoint": 11566,
									"id": null,
									"parameterSlots": 3,
									"returnSlots": 0
								},
								"finalize_allocation": {
									"entryPoint": 11617,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 0
								},
								"increment_t_uint256": {
									"entryPoint": 11666,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"panic_error_0x11": {
									"entryPoint": 11739,
									"id": null,
									"parameterSlots": 0,
									"returnSlots": 0
								},
								"panic_error_0x12": {
									"entryPoint": 11786,
									"id": null,
									"parameterSlots": 0,
									"returnSlots": 0
								},
								"panic_error_0x32": {
									"entryPoint": 11833,
									"id": null,
									"parameterSlots": 0,
									"returnSlots": 0
								},
								"panic_error_0x41": {
									"entryPoint": 11880,
									"id": null,
									"parameterSlots": 0,
									"returnSlots": 0
								},
								"revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490": {
									"entryPoint": 11927,
									"id": null,
									"parameterSlots": 0,
									"returnSlots": 0
								},
								"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d": {
									"entryPoint": 11932,
									"id": null,
									"parameterSlots": 0,
									"returnSlots": 0
								},
								"revert_error_1e55d03107e9c4f1b5e21c76a16fba166a461117ab153bcce65e6a4ea8e5fc8a": {
									"entryPoint": 11937,
									"id": null,
									"parameterSlots": 0,
									"returnSlots": 0
								},
								"revert_error_3538a459e4a0eb828f1aed5ebe5dc96fe59620a31d9b33e41259bb820cae769f": {
									"entryPoint": 11942,
									"id": null,
									"parameterSlots": 0,
									"returnSlots": 0
								},
								"revert_error_356d538aaf70fba12156cc466564b792649f8f3befb07b071c91142253e175ad": {
									"entryPoint": 11947,
									"id": null,
									"parameterSlots": 0,
									"returnSlots": 0
								},
								"revert_error_5e8f644817bc4960744f35c15999b6eff64ae702f94b1c46297cfd4e1aec2421": {
									"entryPoint": null,
									"id": null,
									"parameterSlots": 0,
									"returnSlots": 0
								},
								"revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef": {
									"entryPoint": 11952,
									"id": null,
									"parameterSlots": 0,
									"returnSlots": 0
								},
								"revert_error_977805620ff29572292dee35f70b0f3f3f73d3fdd0e9f4d7a901c2e43ab18a2e": {
									"entryPoint": 11957,
									"id": null,
									"parameterSlots": 0,
									"returnSlots": 0
								},
								"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db": {
									"entryPoint": 11962,
									"id": null,
									"parameterSlots": 0,
									"returnSlots": 0
								},
								"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": {
									"entryPoint": 11967,
									"id": null,
									"parameterSlots": 0,
									"returnSlots": 0
								},
								"round_up_to_mul_of_32": {
									"entryPoint": 11972,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								},
								"store_literal_in_memory_3d9aad6f9cafa45f8d5356023189d3e1086a81a6694f72a8006f1b290ec90f41": {
									"entryPoint": 11989,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 0
								},
								"store_literal_in_memory_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c": {
									"entryPoint": 12030,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 0
								},
								"store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520": {
									"entryPoint": 12109,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 0
								},
								"store_literal_in_memory_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad": {
									"entryPoint": 12188,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 0
								},
								"store_literal_in_memory_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd": {
									"entryPoint": 12229,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 0
								},
								"store_literal_in_memory_fa0209976ed18f66239d9b649265177d5902c97497d099e3744ef8b17544aa43": {
									"entryPoint": 12308,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 0
								},
								"validator_revert_t_address": {
									"entryPoint": 12349,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 0
								},
								"validator_revert_t_bool": {
									"entryPoint": 12372,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 0
								},
								"validator_revert_t_contract$_IERC20_$77": {
									"entryPoint": 12395,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 0
								},
								"validator_revert_t_contract$_IPrizePool_$3970": {
									"entryPoint": 12418,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 0
								},
								"validator_revert_t_contract$_ITicket_$4186": {
									"entryPoint": 12441,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 0
								},
								"validator_revert_t_uint256": {
									"entryPoint": 12464,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 0
								},
								"validator_revert_t_uint64": {
									"entryPoint": 12487,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 0
								}
							},
							"generatedSources": [
								{
									"ast": {
										"nodeType": "YulBlock",
										"src": "0:33078:19",
										"statements": [
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "59:87:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "69:29:19",
															"value": {
																"arguments": [
																	{
																		"name": "offset",
																		"nodeType": "YulIdentifier",
																		"src": "91:6:19"
																	}
																],
																"functionName": {
																	"name": "calldataload",
																	"nodeType": "YulIdentifier",
																	"src": "78:12:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "78:20:19"
															},
															"variableNames": [
																{
																	"name": "value",
																	"nodeType": "YulIdentifier",
																	"src": "69:5:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "134:5:19"
																	}
																],
																"functionName": {
																	"name": "validator_revert_t_address",
																	"nodeType": "YulIdentifier",
																	"src": "107:26:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "107:33:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "107:33:19"
														}
													]
												},
												"name": "abi_decode_t_address",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "offset",
														"nodeType": "YulTypedName",
														"src": "37:6:19",
														"type": ""
													},
													{
														"name": "end",
														"nodeType": "YulTypedName",
														"src": "45:3:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "53:5:19",
														"type": ""
													}
												],
												"src": "7:139:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "268:478:19",
													"statements": [
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "317:83:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [],
																			"functionName": {
																				"name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d",
																				"nodeType": "YulIdentifier",
																				"src": "319:77:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "319:79:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "319:79:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "offset",
																						"nodeType": "YulIdentifier",
																						"src": "296:6:19"
																					},
																					{
																						"kind": "number",
																						"nodeType": "YulLiteral",
																						"src": "304:4:19",
																						"type": "",
																						"value": "0x1f"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "292:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "292:17:19"
																			},
																			{
																				"name": "end",
																				"nodeType": "YulIdentifier",
																				"src": "311:3:19"
																			}
																		],
																		"functionName": {
																			"name": "slt",
																			"nodeType": "YulIdentifier",
																			"src": "288:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "288:27:19"
																	}
																],
																"functionName": {
																	"name": "iszero",
																	"nodeType": "YulIdentifier",
																	"src": "281:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "281:35:19"
															},
															"nodeType": "YulIf",
															"src": "278:2:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "409:30:19",
															"value": {
																"arguments": [
																	{
																		"name": "offset",
																		"nodeType": "YulIdentifier",
																		"src": "432:6:19"
																	}
																],
																"functionName": {
																	"name": "calldataload",
																	"nodeType": "YulIdentifier",
																	"src": "419:12:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "419:20:19"
															},
															"variableNames": [
																{
																	"name": "length",
																	"nodeType": "YulIdentifier",
																	"src": "409:6:19"
																}
															]
														},
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "482:83:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [],
																			"functionName": {
																				"name": "revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490",
																				"nodeType": "YulIdentifier",
																				"src": "484:77:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "484:79:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "484:79:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"name": "length",
																		"nodeType": "YulIdentifier",
																		"src": "454:6:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "462:18:19",
																		"type": "",
																		"value": "0xffffffffffffffff"
																	}
																],
																"functionName": {
																	"name": "gt",
																	"nodeType": "YulIdentifier",
																	"src": "451:2:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "451:30:19"
															},
															"nodeType": "YulIf",
															"src": "448:2:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "574:29:19",
															"value": {
																"arguments": [
																	{
																		"name": "offset",
																		"nodeType": "YulIdentifier",
																		"src": "590:6:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "598:4:19",
																		"type": "",
																		"value": "0x20"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "586:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "586:17:19"
															},
															"variableNames": [
																{
																	"name": "arrayPos",
																	"nodeType": "YulIdentifier",
																	"src": "574:8:19"
																}
															]
														},
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "657:83:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [],
																			"functionName": {
																				"name": "revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef",
																				"nodeType": "YulIdentifier",
																				"src": "659:77:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "659:79:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "659:79:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "arrayPos",
																				"nodeType": "YulIdentifier",
																				"src": "622:8:19"
																			},
																			{
																				"arguments": [
																					{
																						"name": "length",
																						"nodeType": "YulIdentifier",
																						"src": "636:6:19"
																					},
																					{
																						"kind": "number",
																						"nodeType": "YulLiteral",
																						"src": "644:4:19",
																						"type": "",
																						"value": "0x20"
																					}
																				],
																				"functionName": {
																					"name": "mul",
																					"nodeType": "YulIdentifier",
																					"src": "632:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "632:17:19"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "618:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "618:32:19"
																	},
																	{
																		"name": "end",
																		"nodeType": "YulIdentifier",
																		"src": "652:3:19"
																	}
																],
																"functionName": {
																	"name": "gt",
																	"nodeType": "YulIdentifier",
																	"src": "615:2:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "615:41:19"
															},
															"nodeType": "YulIf",
															"src": "612:2:19"
														}
													]
												},
												"name": "abi_decode_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "offset",
														"nodeType": "YulTypedName",
														"src": "235:6:19",
														"type": ""
													},
													{
														"name": "end",
														"nodeType": "YulTypedName",
														"src": "243:3:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "arrayPos",
														"nodeType": "YulTypedName",
														"src": "251:8:19",
														"type": ""
													},
													{
														"name": "length",
														"nodeType": "YulTypedName",
														"src": "261:6:19",
														"type": ""
													}
												],
												"src": "167:579:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "812:77:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "822:22:19",
															"value": {
																"arguments": [
																	{
																		"name": "offset",
																		"nodeType": "YulIdentifier",
																		"src": "837:6:19"
																	}
																],
																"functionName": {
																	"name": "mload",
																	"nodeType": "YulIdentifier",
																	"src": "831:5:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "831:13:19"
															},
															"variableNames": [
																{
																	"name": "value",
																	"nodeType": "YulIdentifier",
																	"src": "822:5:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "877:5:19"
																	}
																],
																"functionName": {
																	"name": "validator_revert_t_bool",
																	"nodeType": "YulIdentifier",
																	"src": "853:23:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "853:30:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "853:30:19"
														}
													]
												},
												"name": "abi_decode_t_bool_fromMemory",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "offset",
														"nodeType": "YulTypedName",
														"src": "790:6:19",
														"type": ""
													},
													{
														"name": "end",
														"nodeType": "YulTypedName",
														"src": "798:3:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "806:5:19",
														"type": ""
													}
												],
												"src": "752:137:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "960:100:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "970:29:19",
															"value": {
																"arguments": [
																	{
																		"name": "offset",
																		"nodeType": "YulIdentifier",
																		"src": "992:6:19"
																	}
																],
																"functionName": {
																	"name": "calldataload",
																	"nodeType": "YulIdentifier",
																	"src": "979:12:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "979:20:19"
															},
															"variableNames": [
																{
																	"name": "value",
																	"nodeType": "YulIdentifier",
																	"src": "970:5:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "1048:5:19"
																	}
																],
																"functionName": {
																	"name": "validator_revert_t_contract$_IERC20_$77",
																	"nodeType": "YulIdentifier",
																	"src": "1008:39:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "1008:46:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "1008:46:19"
														}
													]
												},
												"name": "abi_decode_t_contract$_IERC20_$77",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "offset",
														"nodeType": "YulTypedName",
														"src": "938:6:19",
														"type": ""
													},
													{
														"name": "end",
														"nodeType": "YulTypedName",
														"src": "946:3:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "954:5:19",
														"type": ""
													}
												],
												"src": "895:165:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "1137:106:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "1147:29:19",
															"value": {
																"arguments": [
																	{
																		"name": "offset",
																		"nodeType": "YulIdentifier",
																		"src": "1169:6:19"
																	}
																],
																"functionName": {
																	"name": "calldataload",
																	"nodeType": "YulIdentifier",
																	"src": "1156:12:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "1156:20:19"
															},
															"variableNames": [
																{
																	"name": "value",
																	"nodeType": "YulIdentifier",
																	"src": "1147:5:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "1231:5:19"
																	}
																],
																"functionName": {
																	"name": "validator_revert_t_contract$_IPrizePool_$3970",
																	"nodeType": "YulIdentifier",
																	"src": "1185:45:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "1185:52:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "1185:52:19"
														}
													]
												},
												"name": "abi_decode_t_contract$_IPrizePool_$3970",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "offset",
														"nodeType": "YulTypedName",
														"src": "1115:6:19",
														"type": ""
													},
													{
														"name": "end",
														"nodeType": "YulTypedName",
														"src": "1123:3:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "1131:5:19",
														"type": ""
													}
												],
												"src": "1066:177:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "1317:103:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "1327:29:19",
															"value": {
																"arguments": [
																	{
																		"name": "offset",
																		"nodeType": "YulIdentifier",
																		"src": "1349:6:19"
																	}
																],
																"functionName": {
																	"name": "calldataload",
																	"nodeType": "YulIdentifier",
																	"src": "1336:12:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "1336:20:19"
															},
															"variableNames": [
																{
																	"name": "value",
																	"nodeType": "YulIdentifier",
																	"src": "1327:5:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "1408:5:19"
																	}
																],
																"functionName": {
																	"name": "validator_revert_t_contract$_ITicket_$4186",
																	"nodeType": "YulIdentifier",
																	"src": "1365:42:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "1365:49:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "1365:49:19"
														}
													]
												},
												"name": "abi_decode_t_contract$_ITicket_$4186",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "offset",
														"nodeType": "YulTypedName",
														"src": "1295:6:19",
														"type": ""
													},
													{
														"name": "end",
														"nodeType": "YulTypedName",
														"src": "1303:3:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "1311:5:19",
														"type": ""
													}
												],
												"src": "1249:171:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "1548:512:19",
													"statements": [
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "1592:83:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [],
																			"functionName": {
																				"name": "revert_error_3538a459e4a0eb828f1aed5ebe5dc96fe59620a31d9b33e41259bb820cae769f",
																				"nodeType": "YulIdentifier",
																				"src": "1594:77:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "1594:79:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "1594:79:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "end",
																				"nodeType": "YulIdentifier",
																				"src": "1569:3:19"
																			},
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "1574:9:19"
																			}
																		],
																		"functionName": {
																			"name": "sub",
																			"nodeType": "YulIdentifier",
																			"src": "1565:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "1565:19:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "1586:4:19",
																		"type": "",
																		"value": "0x40"
																	}
																],
																"functionName": {
																	"name": "slt",
																	"nodeType": "YulIdentifier",
																	"src": "1561:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "1561:30:19"
															},
															"nodeType": "YulIf",
															"src": "1558:2:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "1684:30:19",
															"value": {
																"arguments": [
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "1709:4:19",
																		"type": "",
																		"value": "0x40"
																	}
																],
																"functionName": {
																	"name": "allocate_memory",
																	"nodeType": "YulIdentifier",
																	"src": "1693:15:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "1693:21:19"
															},
															"variableNames": [
																{
																	"name": "value",
																	"nodeType": "YulIdentifier",
																	"src": "1684:5:19"
																}
															]
														},
														{
															"nodeType": "YulBlock",
															"src": "1724:164:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "1760:15:19",
																	"value": {
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "1774:1:19",
																		"type": "",
																		"value": "0"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "1764:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"expression": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "value",
																						"nodeType": "YulIdentifier",
																						"src": "1800:5:19"
																					},
																					{
																						"kind": "number",
																						"nodeType": "YulLiteral",
																						"src": "1807:4:19",
																						"type": "",
																						"value": "0x00"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "1796:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "1796:16:19"
																			},
																			{
																				"arguments": [
																					{
																						"arguments": [
																							{
																								"name": "headStart",
																								"nodeType": "YulIdentifier",
																								"src": "1852:9:19"
																							},
																							{
																								"name": "offset",
																								"nodeType": "YulIdentifier",
																								"src": "1863:6:19"
																							}
																						],
																						"functionName": {
																							"name": "add",
																							"nodeType": "YulIdentifier",
																							"src": "1848:3:19"
																						},
																						"nodeType": "YulFunctionCall",
																						"src": "1848:22:19"
																					},
																					{
																						"name": "end",
																						"nodeType": "YulIdentifier",
																						"src": "1872:3:19"
																					}
																				],
																				"functionName": {
																					"name": "abi_decode_t_contract$_IERC20_$77",
																					"nodeType": "YulIdentifier",
																					"src": "1814:33:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "1814:62:19"
																			}
																		],
																		"functionName": {
																			"name": "mstore",
																			"nodeType": "YulIdentifier",
																			"src": "1789:6:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "1789:88:19"
																	},
																	"nodeType": "YulExpressionStatement",
																	"src": "1789:88:19"
																}
															]
														},
														{
															"nodeType": "YulBlock",
															"src": "1898:155:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "1938:16:19",
																	"value": {
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "1952:2:19",
																		"type": "",
																		"value": "32"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "1942:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"expression": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "value",
																						"nodeType": "YulIdentifier",
																						"src": "1979:5:19"
																					},
																					{
																						"kind": "number",
																						"nodeType": "YulLiteral",
																						"src": "1986:4:19",
																						"type": "",
																						"value": "0x20"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "1975:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "1975:16:19"
																			},
																			{
																				"arguments": [
																					{
																						"arguments": [
																							{
																								"name": "headStart",
																								"nodeType": "YulIdentifier",
																								"src": "2017:9:19"
																							},
																							{
																								"name": "offset",
																								"nodeType": "YulIdentifier",
																								"src": "2028:6:19"
																							}
																						],
																						"functionName": {
																							"name": "add",
																							"nodeType": "YulIdentifier",
																							"src": "2013:3:19"
																						},
																						"nodeType": "YulFunctionCall",
																						"src": "2013:22:19"
																					},
																					{
																						"name": "end",
																						"nodeType": "YulIdentifier",
																						"src": "2037:3:19"
																					}
																				],
																				"functionName": {
																					"name": "abi_decode_t_uint64",
																					"nodeType": "YulIdentifier",
																					"src": "1993:19:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "1993:48:19"
																			}
																		],
																		"functionName": {
																			"name": "mstore",
																			"nodeType": "YulIdentifier",
																			"src": "1968:6:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "1968:74:19"
																	},
																	"nodeType": "YulExpressionStatement",
																	"src": "1968:74:19"
																}
															]
														}
													]
												},
												"name": "abi_decode_t_struct$_RewardToken_$2659_memory_ptr",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "1523:9:19",
														"type": ""
													},
													{
														"name": "end",
														"nodeType": "YulTypedName",
														"src": "1534:3:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "1542:5:19",
														"type": ""
													}
												],
												"src": "1464:596:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "2118:87:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "2128:29:19",
															"value": {
																"arguments": [
																	{
																		"name": "offset",
																		"nodeType": "YulIdentifier",
																		"src": "2150:6:19"
																	}
																],
																"functionName": {
																	"name": "calldataload",
																	"nodeType": "YulIdentifier",
																	"src": "2137:12:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "2137:20:19"
															},
															"variableNames": [
																{
																	"name": "value",
																	"nodeType": "YulIdentifier",
																	"src": "2128:5:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "2193:5:19"
																	}
																],
																"functionName": {
																	"name": "validator_revert_t_uint256",
																	"nodeType": "YulIdentifier",
																	"src": "2166:26:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "2166:33:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "2166:33:19"
														}
													]
												},
												"name": "abi_decode_t_uint256",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "offset",
														"nodeType": "YulTypedName",
														"src": "2096:6:19",
														"type": ""
													},
													{
														"name": "end",
														"nodeType": "YulTypedName",
														"src": "2104:3:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "2112:5:19",
														"type": ""
													}
												],
												"src": "2066:139:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "2274:80:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "2284:22:19",
															"value": {
																"arguments": [
																	{
																		"name": "offset",
																		"nodeType": "YulIdentifier",
																		"src": "2299:6:19"
																	}
																],
																"functionName": {
																	"name": "mload",
																	"nodeType": "YulIdentifier",
																	"src": "2293:5:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "2293:13:19"
															},
															"variableNames": [
																{
																	"name": "value",
																	"nodeType": "YulIdentifier",
																	"src": "2284:5:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "2342:5:19"
																	}
																],
																"functionName": {
																	"name": "validator_revert_t_uint256",
																	"nodeType": "YulIdentifier",
																	"src": "2315:26:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "2315:33:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "2315:33:19"
														}
													]
												},
												"name": "abi_decode_t_uint256_fromMemory",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "offset",
														"nodeType": "YulTypedName",
														"src": "2252:6:19",
														"type": ""
													},
													{
														"name": "end",
														"nodeType": "YulTypedName",
														"src": "2260:3:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "2268:5:19",
														"type": ""
													}
												],
												"src": "2211:143:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "2411:86:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "2421:29:19",
															"value": {
																"arguments": [
																	{
																		"name": "offset",
																		"nodeType": "YulIdentifier",
																		"src": "2443:6:19"
																	}
																],
																"functionName": {
																	"name": "calldataload",
																	"nodeType": "YulIdentifier",
																	"src": "2430:12:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "2430:20:19"
															},
															"variableNames": [
																{
																	"name": "value",
																	"nodeType": "YulIdentifier",
																	"src": "2421:5:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "2485:5:19"
																	}
																],
																"functionName": {
																	"name": "validator_revert_t_uint64",
																	"nodeType": "YulIdentifier",
																	"src": "2459:25:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "2459:32:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "2459:32:19"
														}
													]
												},
												"name": "abi_decode_t_uint64",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "offset",
														"nodeType": "YulTypedName",
														"src": "2389:6:19",
														"type": ""
													},
													{
														"name": "end",
														"nodeType": "YulTypedName",
														"src": "2397:3:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "2405:5:19",
														"type": ""
													}
												],
												"src": "2360:137:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "2569:263:19",
													"statements": [
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "2615:83:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [],
																			"functionName": {
																				"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
																				"nodeType": "YulIdentifier",
																				"src": "2617:77:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "2617:79:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "2617:79:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "2590:7:19"
																			},
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "2599:9:19"
																			}
																		],
																		"functionName": {
																			"name": "sub",
																			"nodeType": "YulIdentifier",
																			"src": "2586:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "2586:23:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "2611:2:19",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "slt",
																	"nodeType": "YulIdentifier",
																	"src": "2582:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "2582:32:19"
															},
															"nodeType": "YulIf",
															"src": "2579:2:19"
														},
														{
															"nodeType": "YulBlock",
															"src": "2708:117:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "2723:15:19",
																	"value": {
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "2737:1:19",
																		"type": "",
																		"value": "0"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "2727:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"nodeType": "YulAssignment",
																	"src": "2752:63:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "2787:9:19"
																					},
																					{
																						"name": "offset",
																						"nodeType": "YulIdentifier",
																						"src": "2798:6:19"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "2783:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "2783:22:19"
																			},
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "2807:7:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_t_address",
																			"nodeType": "YulIdentifier",
																			"src": "2762:20:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "2762:53:19"
																	},
																	"variableNames": [
																		{
																			"name": "value0",
																			"nodeType": "YulIdentifier",
																			"src": "2752:6:19"
																		}
																	]
																}
															]
														}
													]
												},
												"name": "abi_decode_tuple_t_address",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "2539:9:19",
														"type": ""
													},
													{
														"name": "dataEnd",
														"nodeType": "YulTypedName",
														"src": "2550:7:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "2562:6:19",
														"type": ""
													}
												],
												"src": "2503:329:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "2921:391:19",
													"statements": [
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "2967:83:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [],
																			"functionName": {
																				"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
																				"nodeType": "YulIdentifier",
																				"src": "2969:77:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "2969:79:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "2969:79:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "2942:7:19"
																			},
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "2951:9:19"
																			}
																		],
																		"functionName": {
																			"name": "sub",
																			"nodeType": "YulIdentifier",
																			"src": "2938:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "2938:23:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "2963:2:19",
																		"type": "",
																		"value": "64"
																	}
																],
																"functionName": {
																	"name": "slt",
																	"nodeType": "YulIdentifier",
																	"src": "2934:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "2934:32:19"
															},
															"nodeType": "YulIf",
															"src": "2931:2:19"
														},
														{
															"nodeType": "YulBlock",
															"src": "3060:117:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "3075:15:19",
																	"value": {
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "3089:1:19",
																		"type": "",
																		"value": "0"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "3079:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"nodeType": "YulAssignment",
																	"src": "3104:63:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "3139:9:19"
																					},
																					{
																						"name": "offset",
																						"nodeType": "YulIdentifier",
																						"src": "3150:6:19"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "3135:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "3135:22:19"
																			},
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "3159:7:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_t_address",
																			"nodeType": "YulIdentifier",
																			"src": "3114:20:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "3114:53:19"
																	},
																	"variableNames": [
																		{
																			"name": "value0",
																			"nodeType": "YulIdentifier",
																			"src": "3104:6:19"
																		}
																	]
																}
															]
														},
														{
															"nodeType": "YulBlock",
															"src": "3187:118:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "3202:16:19",
																	"value": {
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "3216:2:19",
																		"type": "",
																		"value": "32"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "3206:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"nodeType": "YulAssignment",
																	"src": "3232:63:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "3267:9:19"
																					},
																					{
																						"name": "offset",
																						"nodeType": "YulIdentifier",
																						"src": "3278:6:19"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "3263:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "3263:22:19"
																			},
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "3287:7:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_t_address",
																			"nodeType": "YulIdentifier",
																			"src": "3242:20:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "3242:53:19"
																	},
																	"variableNames": [
																		{
																			"name": "value1",
																			"nodeType": "YulIdentifier",
																			"src": "3232:6:19"
																		}
																	]
																}
															]
														}
													]
												},
												"name": "abi_decode_tuple_t_addresst_address",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "2883:9:19",
														"type": ""
													},
													{
														"name": "dataEnd",
														"nodeType": "YulTypedName",
														"src": "2894:7:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "2906:6:19",
														"type": ""
													},
													{
														"name": "value1",
														"nodeType": "YulTypedName",
														"src": "2914:6:19",
														"type": ""
													}
												],
												"src": "2838:474:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "3418:519:19",
													"statements": [
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "3464:83:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [],
																			"functionName": {
																				"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
																				"nodeType": "YulIdentifier",
																				"src": "3466:77:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "3466:79:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "3466:79:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "3439:7:19"
																			},
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "3448:9:19"
																			}
																		],
																		"functionName": {
																			"name": "sub",
																			"nodeType": "YulIdentifier",
																			"src": "3435:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "3435:23:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "3460:2:19",
																		"type": "",
																		"value": "96"
																	}
																],
																"functionName": {
																	"name": "slt",
																	"nodeType": "YulIdentifier",
																	"src": "3431:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "3431:32:19"
															},
															"nodeType": "YulIf",
															"src": "3428:2:19"
														},
														{
															"nodeType": "YulBlock",
															"src": "3557:117:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "3572:15:19",
																	"value": {
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "3586:1:19",
																		"type": "",
																		"value": "0"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "3576:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"nodeType": "YulAssignment",
																	"src": "3601:63:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "3636:9:19"
																					},
																					{
																						"name": "offset",
																						"nodeType": "YulIdentifier",
																						"src": "3647:6:19"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "3632:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "3632:22:19"
																			},
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "3656:7:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_t_address",
																			"nodeType": "YulIdentifier",
																			"src": "3611:20:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "3611:53:19"
																	},
																	"variableNames": [
																		{
																			"name": "value0",
																			"nodeType": "YulIdentifier",
																			"src": "3601:6:19"
																		}
																	]
																}
															]
														},
														{
															"nodeType": "YulBlock",
															"src": "3684:118:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "3699:16:19",
																	"value": {
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "3713:2:19",
																		"type": "",
																		"value": "32"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "3703:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"nodeType": "YulAssignment",
																	"src": "3729:63:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "3764:9:19"
																					},
																					{
																						"name": "offset",
																						"nodeType": "YulIdentifier",
																						"src": "3775:6:19"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "3760:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "3760:22:19"
																			},
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "3784:7:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_t_address",
																			"nodeType": "YulIdentifier",
																			"src": "3739:20:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "3739:53:19"
																	},
																	"variableNames": [
																		{
																			"name": "value1",
																			"nodeType": "YulIdentifier",
																			"src": "3729:6:19"
																		}
																	]
																}
															]
														},
														{
															"nodeType": "YulBlock",
															"src": "3812:118:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "3827:16:19",
																	"value": {
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "3841:2:19",
																		"type": "",
																		"value": "64"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "3831:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"nodeType": "YulAssignment",
																	"src": "3857:63:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "3892:9:19"
																					},
																					{
																						"name": "offset",
																						"nodeType": "YulIdentifier",
																						"src": "3903:6:19"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "3888:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "3888:22:19"
																			},
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "3912:7:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_t_address",
																			"nodeType": "YulIdentifier",
																			"src": "3867:20:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "3867:53:19"
																	},
																	"variableNames": [
																		{
																			"name": "value2",
																			"nodeType": "YulIdentifier",
																			"src": "3857:6:19"
																		}
																	]
																}
															]
														}
													]
												},
												"name": "abi_decode_tuple_t_addresst_addresst_address",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "3372:9:19",
														"type": ""
													},
													{
														"name": "dataEnd",
														"nodeType": "YulTypedName",
														"src": "3383:7:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "3395:6:19",
														"type": ""
													},
													{
														"name": "value1",
														"nodeType": "YulTypedName",
														"src": "3403:6:19",
														"type": ""
													},
													{
														"name": "value2",
														"nodeType": "YulTypedName",
														"src": "3411:6:19",
														"type": ""
													}
												],
												"src": "3318:619:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "4072:660:19",
													"statements": [
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "4119:83:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [],
																			"functionName": {
																				"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
																				"nodeType": "YulIdentifier",
																				"src": "4121:77:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "4121:79:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "4121:79:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "4093:7:19"
																			},
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "4102:9:19"
																			}
																		],
																		"functionName": {
																			"name": "sub",
																			"nodeType": "YulIdentifier",
																			"src": "4089:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "4089:23:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "4114:3:19",
																		"type": "",
																		"value": "128"
																	}
																],
																"functionName": {
																	"name": "slt",
																	"nodeType": "YulIdentifier",
																	"src": "4085:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "4085:33:19"
															},
															"nodeType": "YulIf",
															"src": "4082:2:19"
														},
														{
															"nodeType": "YulBlock",
															"src": "4212:117:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "4227:15:19",
																	"value": {
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "4241:1:19",
																		"type": "",
																		"value": "0"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "4231:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"nodeType": "YulAssignment",
																	"src": "4256:63:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "4291:9:19"
																					},
																					{
																						"name": "offset",
																						"nodeType": "YulIdentifier",
																						"src": "4302:6:19"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "4287:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "4287:22:19"
																			},
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "4311:7:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_t_address",
																			"nodeType": "YulIdentifier",
																			"src": "4266:20:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "4266:53:19"
																	},
																	"variableNames": [
																		{
																			"name": "value0",
																			"nodeType": "YulIdentifier",
																			"src": "4256:6:19"
																		}
																	]
																}
															]
														},
														{
															"nodeType": "YulBlock",
															"src": "4339:118:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "4354:16:19",
																	"value": {
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "4368:2:19",
																		"type": "",
																		"value": "32"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "4358:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"nodeType": "YulAssignment",
																	"src": "4384:63:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "4419:9:19"
																					},
																					{
																						"name": "offset",
																						"nodeType": "YulIdentifier",
																						"src": "4430:6:19"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "4415:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "4415:22:19"
																			},
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "4439:7:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_t_address",
																			"nodeType": "YulIdentifier",
																			"src": "4394:20:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "4394:53:19"
																	},
																	"variableNames": [
																		{
																			"name": "value1",
																			"nodeType": "YulIdentifier",
																			"src": "4384:6:19"
																		}
																	]
																}
															]
														},
														{
															"nodeType": "YulBlock",
															"src": "4467:131:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "4482:16:19",
																	"value": {
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "4496:2:19",
																		"type": "",
																		"value": "64"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "4486:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"nodeType": "YulAssignment",
																	"src": "4512:76:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "4560:9:19"
																					},
																					{
																						"name": "offset",
																						"nodeType": "YulIdentifier",
																						"src": "4571:6:19"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "4556:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "4556:22:19"
																			},
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "4580:7:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_t_contract$_IERC20_$77",
																			"nodeType": "YulIdentifier",
																			"src": "4522:33:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "4522:66:19"
																	},
																	"variableNames": [
																		{
																			"name": "value2",
																			"nodeType": "YulIdentifier",
																			"src": "4512:6:19"
																		}
																	]
																}
															]
														},
														{
															"nodeType": "YulBlock",
															"src": "4608:117:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "4623:16:19",
																	"value": {
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "4637:2:19",
																		"type": "",
																		"value": "96"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "4627:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"nodeType": "YulAssignment",
																	"src": "4653:62:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "4687:9:19"
																					},
																					{
																						"name": "offset",
																						"nodeType": "YulIdentifier",
																						"src": "4698:6:19"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "4683:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "4683:22:19"
																			},
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "4707:7:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_t_uint64",
																			"nodeType": "YulIdentifier",
																			"src": "4663:19:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "4663:52:19"
																	},
																	"variableNames": [
																		{
																			"name": "value3",
																			"nodeType": "YulIdentifier",
																			"src": "4653:6:19"
																		}
																	]
																}
															]
														}
													]
												},
												"name": "abi_decode_tuple_t_addresst_addresst_contract$_IERC20_$77t_uint64",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "4018:9:19",
														"type": ""
													},
													{
														"name": "dataEnd",
														"nodeType": "YulTypedName",
														"src": "4029:7:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "4041:6:19",
														"type": ""
													},
													{
														"name": "value1",
														"nodeType": "YulTypedName",
														"src": "4049:6:19",
														"type": ""
													},
													{
														"name": "value2",
														"nodeType": "YulTypedName",
														"src": "4057:6:19",
														"type": ""
													},
													{
														"name": "value3",
														"nodeType": "YulTypedName",
														"src": "4065:6:19",
														"type": ""
													}
												],
												"src": "3943:789:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "4838:519:19",
													"statements": [
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "4884:83:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [],
																			"functionName": {
																				"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
																				"nodeType": "YulIdentifier",
																				"src": "4886:77:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "4886:79:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "4886:79:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "4859:7:19"
																			},
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "4868:9:19"
																			}
																		],
																		"functionName": {
																			"name": "sub",
																			"nodeType": "YulIdentifier",
																			"src": "4855:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "4855:23:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "4880:2:19",
																		"type": "",
																		"value": "96"
																	}
																],
																"functionName": {
																	"name": "slt",
																	"nodeType": "YulIdentifier",
																	"src": "4851:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "4851:32:19"
															},
															"nodeType": "YulIf",
															"src": "4848:2:19"
														},
														{
															"nodeType": "YulBlock",
															"src": "4977:117:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "4992:15:19",
																	"value": {
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "5006:1:19",
																		"type": "",
																		"value": "0"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "4996:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"nodeType": "YulAssignment",
																	"src": "5021:63:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "5056:9:19"
																					},
																					{
																						"name": "offset",
																						"nodeType": "YulIdentifier",
																						"src": "5067:6:19"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "5052:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "5052:22:19"
																			},
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "5076:7:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_t_address",
																			"nodeType": "YulIdentifier",
																			"src": "5031:20:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "5031:53:19"
																	},
																	"variableNames": [
																		{
																			"name": "value0",
																			"nodeType": "YulIdentifier",
																			"src": "5021:6:19"
																		}
																	]
																}
															]
														},
														{
															"nodeType": "YulBlock",
															"src": "5104:118:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "5119:16:19",
																	"value": {
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "5133:2:19",
																		"type": "",
																		"value": "32"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "5123:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"nodeType": "YulAssignment",
																	"src": "5149:63:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "5184:9:19"
																					},
																					{
																						"name": "offset",
																						"nodeType": "YulIdentifier",
																						"src": "5195:6:19"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "5180:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "5180:22:19"
																			},
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "5204:7:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_t_address",
																			"nodeType": "YulIdentifier",
																			"src": "5159:20:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "5159:53:19"
																	},
																	"variableNames": [
																		{
																			"name": "value1",
																			"nodeType": "YulIdentifier",
																			"src": "5149:6:19"
																		}
																	]
																}
															]
														},
														{
															"nodeType": "YulBlock",
															"src": "5232:118:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "5247:16:19",
																	"value": {
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "5261:2:19",
																		"type": "",
																		"value": "64"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "5251:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"nodeType": "YulAssignment",
																	"src": "5277:63:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "5312:9:19"
																					},
																					{
																						"name": "offset",
																						"nodeType": "YulIdentifier",
																						"src": "5323:6:19"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "5308:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "5308:22:19"
																			},
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "5332:7:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_t_uint256",
																			"nodeType": "YulIdentifier",
																			"src": "5287:20:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "5287:53:19"
																	},
																	"variableNames": [
																		{
																			"name": "value2",
																			"nodeType": "YulIdentifier",
																			"src": "5277:6:19"
																		}
																	]
																}
															]
														}
													]
												},
												"name": "abi_decode_tuple_t_addresst_addresst_uint256",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "4792:9:19",
														"type": ""
													},
													{
														"name": "dataEnd",
														"nodeType": "YulTypedName",
														"src": "4803:7:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "4815:6:19",
														"type": ""
													},
													{
														"name": "value1",
														"nodeType": "YulTypedName",
														"src": "4823:6:19",
														"type": ""
													},
													{
														"name": "value2",
														"nodeType": "YulTypedName",
														"src": "4831:6:19",
														"type": ""
													}
												],
												"src": "4738:619:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "5459:404:19",
													"statements": [
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "5505:83:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [],
																			"functionName": {
																				"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
																				"nodeType": "YulIdentifier",
																				"src": "5507:77:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "5507:79:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "5507:79:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "5480:7:19"
																			},
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "5489:9:19"
																			}
																		],
																		"functionName": {
																			"name": "sub",
																			"nodeType": "YulIdentifier",
																			"src": "5476:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "5476:23:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "5501:2:19",
																		"type": "",
																		"value": "64"
																	}
																],
																"functionName": {
																	"name": "slt",
																	"nodeType": "YulIdentifier",
																	"src": "5472:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "5472:32:19"
															},
															"nodeType": "YulIf",
															"src": "5469:2:19"
														},
														{
															"nodeType": "YulBlock",
															"src": "5598:117:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "5613:15:19",
																	"value": {
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "5627:1:19",
																		"type": "",
																		"value": "0"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "5617:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"nodeType": "YulAssignment",
																	"src": "5642:63:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "5677:9:19"
																					},
																					{
																						"name": "offset",
																						"nodeType": "YulIdentifier",
																						"src": "5688:6:19"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "5673:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "5673:22:19"
																			},
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "5697:7:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_t_address",
																			"nodeType": "YulIdentifier",
																			"src": "5652:20:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "5652:53:19"
																	},
																	"variableNames": [
																		{
																			"name": "value0",
																			"nodeType": "YulIdentifier",
																			"src": "5642:6:19"
																		}
																	]
																}
															]
														},
														{
															"nodeType": "YulBlock",
															"src": "5725:131:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "5740:16:19",
																	"value": {
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "5754:2:19",
																		"type": "",
																		"value": "32"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "5744:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"nodeType": "YulAssignment",
																	"src": "5770:76:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "5818:9:19"
																					},
																					{
																						"name": "offset",
																						"nodeType": "YulIdentifier",
																						"src": "5829:6:19"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "5814:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "5814:22:19"
																			},
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "5838:7:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_t_contract$_IERC20_$77",
																			"nodeType": "YulIdentifier",
																			"src": "5780:33:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "5780:66:19"
																	},
																	"variableNames": [
																		{
																			"name": "value1",
																			"nodeType": "YulIdentifier",
																			"src": "5770:6:19"
																		}
																	]
																}
															]
														}
													]
												},
												"name": "abi_decode_tuple_t_addresst_contract$_IERC20_$77",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "5421:9:19",
														"type": ""
													},
													{
														"name": "dataEnd",
														"nodeType": "YulTypedName",
														"src": "5432:7:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "5444:6:19",
														"type": ""
													},
													{
														"name": "value1",
														"nodeType": "YulTypedName",
														"src": "5452:6:19",
														"type": ""
													}
												],
												"src": "5363:500:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "5981:531:19",
													"statements": [
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "6027:83:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [],
																			"functionName": {
																				"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
																				"nodeType": "YulIdentifier",
																				"src": "6029:77:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "6029:79:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "6029:79:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "6002:7:19"
																			},
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "6011:9:19"
																			}
																		],
																		"functionName": {
																			"name": "sub",
																			"nodeType": "YulIdentifier",
																			"src": "5998:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "5998:23:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "6023:2:19",
																		"type": "",
																		"value": "96"
																	}
																],
																"functionName": {
																	"name": "slt",
																	"nodeType": "YulIdentifier",
																	"src": "5994:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "5994:32:19"
															},
															"nodeType": "YulIf",
															"src": "5991:2:19"
														},
														{
															"nodeType": "YulBlock",
															"src": "6120:117:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "6135:15:19",
																	"value": {
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "6149:1:19",
																		"type": "",
																		"value": "0"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "6139:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"nodeType": "YulAssignment",
																	"src": "6164:63:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "6199:9:19"
																					},
																					{
																						"name": "offset",
																						"nodeType": "YulIdentifier",
																						"src": "6210:6:19"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "6195:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "6195:22:19"
																			},
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "6219:7:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_t_address",
																			"nodeType": "YulIdentifier",
																			"src": "6174:20:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "6174:53:19"
																	},
																	"variableNames": [
																		{
																			"name": "value0",
																			"nodeType": "YulIdentifier",
																			"src": "6164:6:19"
																		}
																	]
																}
															]
														},
														{
															"nodeType": "YulBlock",
															"src": "6247:131:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "6262:16:19",
																	"value": {
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "6276:2:19",
																		"type": "",
																		"value": "32"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "6266:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"nodeType": "YulAssignment",
																	"src": "6292:76:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "6340:9:19"
																					},
																					{
																						"name": "offset",
																						"nodeType": "YulIdentifier",
																						"src": "6351:6:19"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "6336:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "6336:22:19"
																			},
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "6360:7:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_t_contract$_IERC20_$77",
																			"nodeType": "YulIdentifier",
																			"src": "6302:33:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "6302:66:19"
																	},
																	"variableNames": [
																		{
																			"name": "value1",
																			"nodeType": "YulIdentifier",
																			"src": "6292:6:19"
																		}
																	]
																}
															]
														},
														{
															"nodeType": "YulBlock",
															"src": "6388:117:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "6403:16:19",
																	"value": {
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "6417:2:19",
																		"type": "",
																		"value": "64"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "6407:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"nodeType": "YulAssignment",
																	"src": "6433:62:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "6467:9:19"
																					},
																					{
																						"name": "offset",
																						"nodeType": "YulIdentifier",
																						"src": "6478:6:19"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "6463:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "6463:22:19"
																			},
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "6487:7:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_t_uint64",
																			"nodeType": "YulIdentifier",
																			"src": "6443:19:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "6443:52:19"
																	},
																	"variableNames": [
																		{
																			"name": "value2",
																			"nodeType": "YulIdentifier",
																			"src": "6433:6:19"
																		}
																	]
																}
															]
														}
													]
												},
												"name": "abi_decode_tuple_t_addresst_contract$_IERC20_$77t_uint64",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "5935:9:19",
														"type": ""
													},
													{
														"name": "dataEnd",
														"nodeType": "YulTypedName",
														"src": "5946:7:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "5958:6:19",
														"type": ""
													},
													{
														"name": "value1",
														"nodeType": "YulTypedName",
														"src": "5966:6:19",
														"type": ""
													},
													{
														"name": "value2",
														"nodeType": "YulTypedName",
														"src": "5974:6:19",
														"type": ""
													}
												],
												"src": "5869:643:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "6647:549:19",
													"statements": [
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "6694:83:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [],
																			"functionName": {
																				"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
																				"nodeType": "YulIdentifier",
																				"src": "6696:77:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "6696:79:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "6696:79:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "6668:7:19"
																			},
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "6677:9:19"
																			}
																		],
																		"functionName": {
																			"name": "sub",
																			"nodeType": "YulIdentifier",
																			"src": "6664:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "6664:23:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "6689:3:19",
																		"type": "",
																		"value": "128"
																	}
																],
																"functionName": {
																	"name": "slt",
																	"nodeType": "YulIdentifier",
																	"src": "6660:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "6660:33:19"
															},
															"nodeType": "YulIf",
															"src": "6657:2:19"
														},
														{
															"nodeType": "YulBlock",
															"src": "6787:117:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "6802:15:19",
																	"value": {
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "6816:1:19",
																		"type": "",
																		"value": "0"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "6806:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"nodeType": "YulAssignment",
																	"src": "6831:63:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "6866:9:19"
																					},
																					{
																						"name": "offset",
																						"nodeType": "YulIdentifier",
																						"src": "6877:6:19"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "6862:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "6862:22:19"
																			},
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "6886:7:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_t_address",
																			"nodeType": "YulIdentifier",
																			"src": "6841:20:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "6841:53:19"
																	},
																	"variableNames": [
																		{
																			"name": "value0",
																			"nodeType": "YulIdentifier",
																			"src": "6831:6:19"
																		}
																	]
																}
															]
														},
														{
															"nodeType": "YulBlock",
															"src": "6914:147:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "6929:16:19",
																	"value": {
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "6943:2:19",
																		"type": "",
																		"value": "32"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "6933:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"nodeType": "YulAssignment",
																	"src": "6959:92:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "7023:9:19"
																					},
																					{
																						"name": "offset",
																						"nodeType": "YulIdentifier",
																						"src": "7034:6:19"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "7019:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "7019:22:19"
																			},
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "7043:7:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_t_struct$_RewardToken_$2659_memory_ptr",
																			"nodeType": "YulIdentifier",
																			"src": "6969:49:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "6969:82:19"
																	},
																	"variableNames": [
																		{
																			"name": "value1",
																			"nodeType": "YulIdentifier",
																			"src": "6959:6:19"
																		}
																	]
																}
															]
														},
														{
															"nodeType": "YulBlock",
															"src": "7071:118:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "7086:16:19",
																	"value": {
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "7100:2:19",
																		"type": "",
																		"value": "96"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "7090:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"nodeType": "YulAssignment",
																	"src": "7116:63:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "7151:9:19"
																					},
																					{
																						"name": "offset",
																						"nodeType": "YulIdentifier",
																						"src": "7162:6:19"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "7147:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "7147:22:19"
																			},
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "7171:7:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_t_address",
																			"nodeType": "YulIdentifier",
																			"src": "7126:20:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "7126:53:19"
																	},
																	"variableNames": [
																		{
																			"name": "value2",
																			"nodeType": "YulIdentifier",
																			"src": "7116:6:19"
																		}
																	]
																}
															]
														}
													]
												},
												"name": "abi_decode_tuple_t_addresst_struct$_RewardToken_$2659_memory_ptrt_address",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "6601:9:19",
														"type": ""
													},
													{
														"name": "dataEnd",
														"nodeType": "YulTypedName",
														"src": "6612:7:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "6624:6:19",
														"type": ""
													},
													{
														"name": "value1",
														"nodeType": "YulTypedName",
														"src": "6632:6:19",
														"type": ""
													},
													{
														"name": "value2",
														"nodeType": "YulTypedName",
														"src": "6640:6:19",
														"type": ""
													}
												],
												"src": "6518:678:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "7285:391:19",
													"statements": [
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "7331:83:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [],
																			"functionName": {
																				"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
																				"nodeType": "YulIdentifier",
																				"src": "7333:77:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "7333:79:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "7333:79:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "7306:7:19"
																			},
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "7315:9:19"
																			}
																		],
																		"functionName": {
																			"name": "sub",
																			"nodeType": "YulIdentifier",
																			"src": "7302:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "7302:23:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "7327:2:19",
																		"type": "",
																		"value": "64"
																	}
																],
																"functionName": {
																	"name": "slt",
																	"nodeType": "YulIdentifier",
																	"src": "7298:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "7298:32:19"
															},
															"nodeType": "YulIf",
															"src": "7295:2:19"
														},
														{
															"nodeType": "YulBlock",
															"src": "7424:117:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "7439:15:19",
																	"value": {
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "7453:1:19",
																		"type": "",
																		"value": "0"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "7443:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"nodeType": "YulAssignment",
																	"src": "7468:63:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "7503:9:19"
																					},
																					{
																						"name": "offset",
																						"nodeType": "YulIdentifier",
																						"src": "7514:6:19"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "7499:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "7499:22:19"
																			},
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "7523:7:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_t_address",
																			"nodeType": "YulIdentifier",
																			"src": "7478:20:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "7478:53:19"
																	},
																	"variableNames": [
																		{
																			"name": "value0",
																			"nodeType": "YulIdentifier",
																			"src": "7468:6:19"
																		}
																	]
																}
															]
														},
														{
															"nodeType": "YulBlock",
															"src": "7551:118:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "7566:16:19",
																	"value": {
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "7580:2:19",
																		"type": "",
																		"value": "32"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "7570:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"nodeType": "YulAssignment",
																	"src": "7596:63:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "7631:9:19"
																					},
																					{
																						"name": "offset",
																						"nodeType": "YulIdentifier",
																						"src": "7642:6:19"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "7627:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "7627:22:19"
																			},
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "7651:7:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_t_uint256",
																			"nodeType": "YulIdentifier",
																			"src": "7606:20:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "7606:53:19"
																	},
																	"variableNames": [
																		{
																			"name": "value1",
																			"nodeType": "YulIdentifier",
																			"src": "7596:6:19"
																		}
																	]
																}
															]
														}
													]
												},
												"name": "abi_decode_tuple_t_addresst_uint256",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "7247:9:19",
														"type": ""
													},
													{
														"name": "dataEnd",
														"nodeType": "YulTypedName",
														"src": "7258:7:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "7270:6:19",
														"type": ""
													},
													{
														"name": "value1",
														"nodeType": "YulTypedName",
														"src": "7278:6:19",
														"type": ""
													}
												],
												"src": "7202:474:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "7794:469:19",
													"statements": [
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "7840:83:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [],
																			"functionName": {
																				"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
																				"nodeType": "YulIdentifier",
																				"src": "7842:77:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "7842:79:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "7842:79:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "7815:7:19"
																			},
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "7824:9:19"
																			}
																		],
																		"functionName": {
																			"name": "sub",
																			"nodeType": "YulIdentifier",
																			"src": "7811:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "7811:23:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "7836:2:19",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "slt",
																	"nodeType": "YulIdentifier",
																	"src": "7807:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "7807:32:19"
															},
															"nodeType": "YulIf",
															"src": "7804:2:19"
														},
														{
															"nodeType": "YulBlock",
															"src": "7933:323:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "7948:45:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "7979:9:19"
																					},
																					{
																						"kind": "number",
																						"nodeType": "YulLiteral",
																						"src": "7990:1:19",
																						"type": "",
																						"value": "0"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "7975:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "7975:17:19"
																			}
																		],
																		"functionName": {
																			"name": "calldataload",
																			"nodeType": "YulIdentifier",
																			"src": "7962:12:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "7962:31:19"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "7952:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"body": {
																		"nodeType": "YulBlock",
																		"src": "8040:83:19",
																		"statements": [
																			{
																				"expression": {
																					"arguments": [],
																					"functionName": {
																						"name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
																						"nodeType": "YulIdentifier",
																						"src": "8042:77:19"
																					},
																					"nodeType": "YulFunctionCall",
																					"src": "8042:79:19"
																				},
																				"nodeType": "YulExpressionStatement",
																				"src": "8042:79:19"
																			}
																		]
																	},
																	"condition": {
																		"arguments": [
																			{
																				"name": "offset",
																				"nodeType": "YulIdentifier",
																				"src": "8012:6:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "8020:18:19",
																				"type": "",
																				"value": "0xffffffffffffffff"
																			}
																		],
																		"functionName": {
																			"name": "gt",
																			"nodeType": "YulIdentifier",
																			"src": "8009:2:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "8009:30:19"
																	},
																	"nodeType": "YulIf",
																	"src": "8006:2:19"
																},
																{
																	"nodeType": "YulAssignment",
																	"src": "8137:109:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "8218:9:19"
																					},
																					{
																						"name": "offset",
																						"nodeType": "YulIdentifier",
																						"src": "8229:6:19"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "8214:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "8214:22:19"
																			},
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "8238:7:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
																			"nodeType": "YulIdentifier",
																			"src": "8155:58:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "8155:91:19"
																	},
																	"variableNames": [
																		{
																			"name": "value0",
																			"nodeType": "YulIdentifier",
																			"src": "8137:6:19"
																		},
																		{
																			"name": "value1",
																			"nodeType": "YulIdentifier",
																			"src": "8145:6:19"
																		}
																	]
																}
															]
														}
													]
												},
												"name": "abi_decode_tuple_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "7756:9:19",
														"type": ""
													},
													{
														"name": "dataEnd",
														"nodeType": "YulTypedName",
														"src": "7767:7:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "7779:6:19",
														"type": ""
													},
													{
														"name": "value1",
														"nodeType": "YulTypedName",
														"src": "7787:6:19",
														"type": ""
													}
												],
												"src": "7682:581:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "8343:271:19",
													"statements": [
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "8389:83:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [],
																			"functionName": {
																				"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
																				"nodeType": "YulIdentifier",
																				"src": "8391:77:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "8391:79:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "8391:79:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "8364:7:19"
																			},
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "8373:9:19"
																			}
																		],
																		"functionName": {
																			"name": "sub",
																			"nodeType": "YulIdentifier",
																			"src": "8360:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "8360:23:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "8385:2:19",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "slt",
																	"nodeType": "YulIdentifier",
																	"src": "8356:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "8356:32:19"
															},
															"nodeType": "YulIf",
															"src": "8353:2:19"
														},
														{
															"nodeType": "YulBlock",
															"src": "8482:125:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "8497:15:19",
																	"value": {
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "8511:1:19",
																		"type": "",
																		"value": "0"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "8501:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"nodeType": "YulAssignment",
																	"src": "8526:71:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "8569:9:19"
																					},
																					{
																						"name": "offset",
																						"nodeType": "YulIdentifier",
																						"src": "8580:6:19"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "8565:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "8565:22:19"
																			},
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "8589:7:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_t_bool_fromMemory",
																			"nodeType": "YulIdentifier",
																			"src": "8536:28:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "8536:61:19"
																	},
																	"variableNames": [
																		{
																			"name": "value0",
																			"nodeType": "YulIdentifier",
																			"src": "8526:6:19"
																		}
																	]
																}
															]
														}
													]
												},
												"name": "abi_decode_tuple_t_bool_fromMemory",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "8313:9:19",
														"type": ""
													},
													{
														"name": "dataEnd",
														"nodeType": "YulTypedName",
														"src": "8324:7:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "8336:6:19",
														"type": ""
													}
												],
												"src": "8269:345:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "8802:825:19",
													"statements": [
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "8849:83:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [],
																			"functionName": {
																				"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
																				"nodeType": "YulIdentifier",
																				"src": "8851:77:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "8851:79:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "8851:79:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "8823:7:19"
																			},
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "8832:9:19"
																			}
																		],
																		"functionName": {
																			"name": "sub",
																			"nodeType": "YulIdentifier",
																			"src": "8819:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "8819:23:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "8844:3:19",
																		"type": "",
																		"value": "160"
																	}
																],
																"functionName": {
																	"name": "slt",
																	"nodeType": "YulIdentifier",
																	"src": "8815:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "8815:33:19"
															},
															"nodeType": "YulIf",
															"src": "8812:2:19"
														},
														{
															"nodeType": "YulBlock",
															"src": "8942:136:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "8957:15:19",
																	"value": {
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "8971:1:19",
																		"type": "",
																		"value": "0"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "8961:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"nodeType": "YulAssignment",
																	"src": "8986:82:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "9040:9:19"
																					},
																					{
																						"name": "offset",
																						"nodeType": "YulIdentifier",
																						"src": "9051:6:19"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "9036:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "9036:22:19"
																			},
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "9060:7:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_t_contract$_IPrizePool_$3970",
																			"nodeType": "YulIdentifier",
																			"src": "8996:39:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "8996:72:19"
																	},
																	"variableNames": [
																		{
																			"name": "value0",
																			"nodeType": "YulIdentifier",
																			"src": "8986:6:19"
																		}
																	]
																}
															]
														},
														{
															"nodeType": "YulBlock",
															"src": "9088:134:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "9103:16:19",
																	"value": {
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "9117:2:19",
																		"type": "",
																		"value": "32"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "9107:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"nodeType": "YulAssignment",
																	"src": "9133:79:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "9184:9:19"
																					},
																					{
																						"name": "offset",
																						"nodeType": "YulIdentifier",
																						"src": "9195:6:19"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "9180:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "9180:22:19"
																			},
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "9204:7:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_t_contract$_ITicket_$4186",
																			"nodeType": "YulIdentifier",
																			"src": "9143:36:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "9143:69:19"
																	},
																	"variableNames": [
																		{
																			"name": "value1",
																			"nodeType": "YulIdentifier",
																			"src": "9133:6:19"
																		}
																	]
																}
															]
														},
														{
															"nodeType": "YulBlock",
															"src": "9232:118:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "9247:16:19",
																	"value": {
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "9261:2:19",
																		"type": "",
																		"value": "64"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "9251:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"nodeType": "YulAssignment",
																	"src": "9277:63:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "9312:9:19"
																					},
																					{
																						"name": "offset",
																						"nodeType": "YulIdentifier",
																						"src": "9323:6:19"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "9308:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "9308:22:19"
																			},
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "9332:7:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_t_uint256",
																			"nodeType": "YulIdentifier",
																			"src": "9287:20:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "9287:53:19"
																	},
																	"variableNames": [
																		{
																			"name": "value2",
																			"nodeType": "YulIdentifier",
																			"src": "9277:6:19"
																		}
																	]
																}
															]
														},
														{
															"nodeType": "YulBlock",
															"src": "9360:131:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "9375:16:19",
																	"value": {
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "9389:2:19",
																		"type": "",
																		"value": "96"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "9379:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"nodeType": "YulAssignment",
																	"src": "9405:76:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "9453:9:19"
																					},
																					{
																						"name": "offset",
																						"nodeType": "YulIdentifier",
																						"src": "9464:6:19"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "9449:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "9449:22:19"
																			},
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "9473:7:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_t_contract$_IERC20_$77",
																			"nodeType": "YulIdentifier",
																			"src": "9415:33:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "9415:66:19"
																	},
																	"variableNames": [
																		{
																			"name": "value3",
																			"nodeType": "YulIdentifier",
																			"src": "9405:6:19"
																		}
																	]
																}
															]
														},
														{
															"nodeType": "YulBlock",
															"src": "9501:119:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "9516:17:19",
																	"value": {
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "9530:3:19",
																		"type": "",
																		"value": "128"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "9520:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"nodeType": "YulAssignment",
																	"src": "9547:63:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "9582:9:19"
																					},
																					{
																						"name": "offset",
																						"nodeType": "YulIdentifier",
																						"src": "9593:6:19"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "9578:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "9578:22:19"
																			},
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "9602:7:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_t_uint256",
																			"nodeType": "YulIdentifier",
																			"src": "9557:20:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "9557:53:19"
																	},
																	"variableNames": [
																		{
																			"name": "value4",
																			"nodeType": "YulIdentifier",
																			"src": "9547:6:19"
																		}
																	]
																}
															]
														}
													]
												},
												"name": "abi_decode_tuple_t_contract$_IPrizePool_$3970t_contract$_ITicket_$4186t_uint256t_contract$_IERC20_$77t_uint256",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "8740:9:19",
														"type": ""
													},
													{
														"name": "dataEnd",
														"nodeType": "YulTypedName",
														"src": "8751:7:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "8763:6:19",
														"type": ""
													},
													{
														"name": "value1",
														"nodeType": "YulTypedName",
														"src": "8771:6:19",
														"type": ""
													},
													{
														"name": "value2",
														"nodeType": "YulTypedName",
														"src": "8779:6:19",
														"type": ""
													},
													{
														"name": "value3",
														"nodeType": "YulTypedName",
														"src": "8787:6:19",
														"type": ""
													},
													{
														"name": "value4",
														"nodeType": "YulTypedName",
														"src": "8795:6:19",
														"type": ""
													}
												],
												"src": "8620:1007:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "9710:274:19",
													"statements": [
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "9756:83:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [],
																			"functionName": {
																				"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
																				"nodeType": "YulIdentifier",
																				"src": "9758:77:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "9758:79:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "9758:79:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "9731:7:19"
																			},
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "9740:9:19"
																			}
																		],
																		"functionName": {
																			"name": "sub",
																			"nodeType": "YulIdentifier",
																			"src": "9727:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "9727:23:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "9752:2:19",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "slt",
																	"nodeType": "YulIdentifier",
																	"src": "9723:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "9723:32:19"
															},
															"nodeType": "YulIf",
															"src": "9720:2:19"
														},
														{
															"nodeType": "YulBlock",
															"src": "9849:128:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "9864:15:19",
																	"value": {
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "9878:1:19",
																		"type": "",
																		"value": "0"
																	},
																	"variables": [
																		{
																			"name": "offset",
																			"nodeType": "YulTypedName",
																			"src": "9868:6:19",
																			"type": ""
																		}
																	]
																},
																{
																	"nodeType": "YulAssignment",
																	"src": "9893:74:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "9939:9:19"
																					},
																					{
																						"name": "offset",
																						"nodeType": "YulIdentifier",
																						"src": "9950:6:19"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "9935:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "9935:22:19"
																			},
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "9959:7:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_t_uint256_fromMemory",
																			"nodeType": "YulIdentifier",
																			"src": "9903:31:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "9903:64:19"
																	},
																	"variableNames": [
																		{
																			"name": "value0",
																			"nodeType": "YulIdentifier",
																			"src": "9893:6:19"
																		}
																	]
																}
															]
														}
													]
												},
												"name": "abi_decode_tuple_t_uint256_fromMemory",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "9680:9:19",
														"type": ""
													},
													{
														"name": "dataEnd",
														"nodeType": "YulTypedName",
														"src": "9691:7:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "9703:6:19",
														"type": ""
													}
												],
												"src": "9633:351:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "10088:94:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "10098:78:19",
															"value": {
																"arguments": [
																	{
																		"name": "value0",
																		"nodeType": "YulIdentifier",
																		"src": "10164:6:19"
																	},
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "10172:3:19"
																	}
																],
																"functionName": {
																	"name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr",
																	"nodeType": "YulIdentifier",
																	"src": "10112:51:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "10112:64:19"
															},
															"variableNames": [
																{
																	"name": "updatedPos",
																	"nodeType": "YulIdentifier",
																	"src": "10098:10:19"
																}
															]
														}
													]
												},
												"name": "abi_encodeUpdatedPos_t_bytes_memory_ptr_to_t_bytes_memory_ptr",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "10061:6:19",
														"type": ""
													},
													{
														"name": "pos",
														"nodeType": "YulTypedName",
														"src": "10069:3:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "updatedPos",
														"nodeType": "YulTypedName",
														"src": "10077:10:19",
														"type": ""
													}
												],
												"src": "9990:192:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "10253:53:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "10270:3:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "value",
																				"nodeType": "YulIdentifier",
																				"src": "10293:5:19"
																			}
																		],
																		"functionName": {
																			"name": "cleanup_t_address",
																			"nodeType": "YulIdentifier",
																			"src": "10275:17:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "10275:24:19"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "10263:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "10263:37:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "10263:37:19"
														}
													]
												},
												"name": "abi_encode_t_address_to_t_address_fromStack",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "10241:5:19",
														"type": ""
													},
													{
														"name": "pos",
														"nodeType": "YulTypedName",
														"src": "10248:3:19",
														"type": ""
													}
												],
												"src": "10188:118:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "10480:841:19",
													"statements": [
														{
															"nodeType": "YulVariableDeclaration",
															"src": "10490:77:19",
															"value": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "10561:5:19"
																	}
																],
																"functionName": {
																	"name": "array_length_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
																	"nodeType": "YulIdentifier",
																	"src": "10504:56:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "10504:63:19"
															},
															"variables": [
																{
																	"name": "length",
																	"nodeType": "YulTypedName",
																	"src": "10494:6:19",
																	"type": ""
																}
															]
														},
														{
															"nodeType": "YulAssignment",
															"src": "10576:102:19",
															"value": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "10666:3:19"
																	},
																	{
																		"name": "length",
																		"nodeType": "YulIdentifier",
																		"src": "10671:6:19"
																	}
																],
																"functionName": {
																	"name": "array_storeLengthForEncoding_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "10583:82:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "10583:95:19"
															},
															"variableNames": [
																{
																	"name": "pos",
																	"nodeType": "YulIdentifier",
																	"src": "10576:3:19"
																}
															]
														},
														{
															"nodeType": "YulVariableDeclaration",
															"src": "10687:20:19",
															"value": {
																"name": "pos",
																"nodeType": "YulIdentifier",
																"src": "10704:3:19"
															},
															"variables": [
																{
																	"name": "headStart",
																	"nodeType": "YulTypedName",
																	"src": "10691:9:19",
																	"type": ""
																}
															]
														},
														{
															"nodeType": "YulVariableDeclaration",
															"src": "10716:39:19",
															"value": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "10732:3:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "length",
																				"nodeType": "YulIdentifier",
																				"src": "10741:6:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "10749:4:19",
																				"type": "",
																				"value": "0x20"
																			}
																		],
																		"functionName": {
																			"name": "mul",
																			"nodeType": "YulIdentifier",
																			"src": "10737:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "10737:17:19"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "10728:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "10728:27:19"
															},
															"variables": [
																{
																	"name": "tail",
																	"nodeType": "YulTypedName",
																	"src": "10720:4:19",
																	"type": ""
																}
															]
														},
														{
															"nodeType": "YulVariableDeclaration",
															"src": "10764:80:19",
															"value": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "10838:5:19"
																	}
																],
																"functionName": {
																	"name": "array_dataslot_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
																	"nodeType": "YulIdentifier",
																	"src": "10779:58:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "10779:65:19"
															},
															"variables": [
																{
																	"name": "baseRef",
																	"nodeType": "YulTypedName",
																	"src": "10768:7:19",
																	"type": ""
																}
															]
														},
														{
															"nodeType": "YulVariableDeclaration",
															"src": "10853:21:19",
															"value": {
																"name": "baseRef",
																"nodeType": "YulIdentifier",
																"src": "10867:7:19"
															},
															"variables": [
																{
																	"name": "srcPtr",
																	"nodeType": "YulTypedName",
																	"src": "10857:6:19",
																	"type": ""
																}
															]
														},
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "10943:333:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [
																				{
																					"name": "pos",
																					"nodeType": "YulIdentifier",
																					"src": "10964:3:19"
																				},
																				{
																					"arguments": [
																						{
																							"name": "tail",
																							"nodeType": "YulIdentifier",
																							"src": "10973:4:19"
																						},
																						{
																							"name": "headStart",
																							"nodeType": "YulIdentifier",
																							"src": "10979:9:19"
																						}
																					],
																					"functionName": {
																						"name": "sub",
																						"nodeType": "YulIdentifier",
																						"src": "10969:3:19"
																					},
																					"nodeType": "YulFunctionCall",
																					"src": "10969:20:19"
																				}
																			],
																			"functionName": {
																				"name": "mstore",
																				"nodeType": "YulIdentifier",
																				"src": "10957:6:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "10957:33:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "10957:33:19"
																	},
																	{
																		"nodeType": "YulVariableDeclaration",
																		"src": "11003:34:19",
																		"value": {
																			"arguments": [
																				{
																					"name": "srcPtr",
																					"nodeType": "YulIdentifier",
																					"src": "11030:6:19"
																				}
																			],
																			"functionName": {
																				"name": "mload",
																				"nodeType": "YulIdentifier",
																				"src": "11024:5:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "11024:13:19"
																		},
																		"variables": [
																			{
																				"name": "elementValue0",
																				"nodeType": "YulTypedName",
																				"src": "11007:13:19",
																				"type": ""
																			}
																		]
																	},
																	{
																		"nodeType": "YulAssignment",
																		"src": "11050:90:19",
																		"value": {
																			"arguments": [
																				{
																					"name": "elementValue0",
																					"nodeType": "YulIdentifier",
																					"src": "11120:13:19"
																				},
																				{
																					"name": "tail",
																					"nodeType": "YulIdentifier",
																					"src": "11135:4:19"
																				}
																			],
																			"functionName": {
																				"name": "abi_encodeUpdatedPos_t_bytes_memory_ptr_to_t_bytes_memory_ptr",
																				"nodeType": "YulIdentifier",
																				"src": "11058:61:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "11058:82:19"
																		},
																		"variableNames": [
																			{
																				"name": "tail",
																				"nodeType": "YulIdentifier",
																				"src": "11050:4:19"
																			}
																		]
																	},
																	{
																		"nodeType": "YulAssignment",
																		"src": "11153:79:19",
																		"value": {
																			"arguments": [
																				{
																					"name": "srcPtr",
																					"nodeType": "YulIdentifier",
																					"src": "11225:6:19"
																				}
																			],
																			"functionName": {
																				"name": "array_nextElement_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
																				"nodeType": "YulIdentifier",
																				"src": "11163:61:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "11163:69:19"
																		},
																		"variableNames": [
																			{
																				"name": "srcPtr",
																				"nodeType": "YulIdentifier",
																				"src": "11153:6:19"
																			}
																		]
																	},
																	{
																		"nodeType": "YulAssignment",
																		"src": "11245:21:19",
																		"value": {
																			"arguments": [
																				{
																					"name": "pos",
																					"nodeType": "YulIdentifier",
																					"src": "11256:3:19"
																				},
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "11261:4:19",
																					"type": "",
																					"value": "0x20"
																				}
																			],
																			"functionName": {
																				"name": "add",
																				"nodeType": "YulIdentifier",
																				"src": "11252:3:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "11252:14:19"
																		},
																		"variableNames": [
																			{
																				"name": "pos",
																				"nodeType": "YulIdentifier",
																				"src": "11245:3:19"
																			}
																		]
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"name": "i",
																		"nodeType": "YulIdentifier",
																		"src": "10905:1:19"
																	},
																	{
																		"name": "length",
																		"nodeType": "YulIdentifier",
																		"src": "10908:6:19"
																	}
																],
																"functionName": {
																	"name": "lt",
																	"nodeType": "YulIdentifier",
																	"src": "10902:2:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "10902:13:19"
															},
															"nodeType": "YulForLoop",
															"post": {
																"nodeType": "YulBlock",
																"src": "10916:18:19",
																"statements": [
																	{
																		"nodeType": "YulAssignment",
																		"src": "10918:14:19",
																		"value": {
																			"arguments": [
																				{
																					"name": "i",
																					"nodeType": "YulIdentifier",
																					"src": "10927:1:19"
																				},
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "10930:1:19",
																					"type": "",
																					"value": "1"
																				}
																			],
																			"functionName": {
																				"name": "add",
																				"nodeType": "YulIdentifier",
																				"src": "10923:3:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "10923:9:19"
																		},
																		"variableNames": [
																			{
																				"name": "i",
																				"nodeType": "YulIdentifier",
																				"src": "10918:1:19"
																			}
																		]
																	}
																]
															},
															"pre": {
																"nodeType": "YulBlock",
																"src": "10887:14:19",
																"statements": [
																	{
																		"nodeType": "YulVariableDeclaration",
																		"src": "10889:10:19",
																		"value": {
																			"kind": "number",
																			"nodeType": "YulLiteral",
																			"src": "10898:1:19",
																			"type": "",
																			"value": "0"
																		},
																		"variables": [
																			{
																				"name": "i",
																				"nodeType": "YulTypedName",
																				"src": "10893:1:19",
																				"type": ""
																			}
																		]
																	}
																]
															},
															"src": "10883:393:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "11285:11:19",
															"value": {
																"name": "tail",
																"nodeType": "YulIdentifier",
																"src": "11292:4:19"
															},
															"variableNames": [
																{
																	"name": "pos",
																	"nodeType": "YulIdentifier",
																	"src": "11285:3:19"
																}
															]
														},
														{
															"nodeType": "YulAssignment",
															"src": "11305:10:19",
															"value": {
																"name": "pos",
																"nodeType": "YulIdentifier",
																"src": "11312:3:19"
															},
															"variableNames": [
																{
																	"name": "end",
																	"nodeType": "YulIdentifier",
																	"src": "11305:3:19"
																}
															]
														}
													]
												},
												"name": "abi_encode_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_fromStack",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "10459:5:19",
														"type": ""
													},
													{
														"name": "pos",
														"nodeType": "YulTypedName",
														"src": "10466:3:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "end",
														"nodeType": "YulTypedName",
														"src": "10475:3:19",
														"type": ""
													}
												],
												"src": "10338:983:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "11407:260:19",
													"statements": [
														{
															"nodeType": "YulVariableDeclaration",
															"src": "11417:52:19",
															"value": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "11463:5:19"
																	}
																],
																"functionName": {
																	"name": "array_length_t_bytes_memory_ptr",
																	"nodeType": "YulIdentifier",
																	"src": "11431:31:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "11431:38:19"
															},
															"variables": [
																{
																	"name": "length",
																	"nodeType": "YulTypedName",
																	"src": "11421:6:19",
																	"type": ""
																}
															]
														},
														{
															"nodeType": "YulAssignment",
															"src": "11478:67:19",
															"value": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "11533:3:19"
																	},
																	{
																		"name": "length",
																		"nodeType": "YulIdentifier",
																		"src": "11538:6:19"
																	}
																],
																"functionName": {
																	"name": "array_storeLengthForEncoding_t_bytes_memory_ptr",
																	"nodeType": "YulIdentifier",
																	"src": "11485:47:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "11485:60:19"
															},
															"variableNames": [
																{
																	"name": "pos",
																	"nodeType": "YulIdentifier",
																	"src": "11478:3:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "value",
																				"nodeType": "YulIdentifier",
																				"src": "11580:5:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "11587:4:19",
																				"type": "",
																				"value": "0x20"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "11576:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "11576:16:19"
																	},
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "11594:3:19"
																	},
																	{
																		"name": "length",
																		"nodeType": "YulIdentifier",
																		"src": "11599:6:19"
																	}
																],
																"functionName": {
																	"name": "copy_memory_to_memory",
																	"nodeType": "YulIdentifier",
																	"src": "11554:21:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "11554:52:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "11554:52:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "11615:46:19",
															"value": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "11626:3:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "length",
																				"nodeType": "YulIdentifier",
																				"src": "11653:6:19"
																			}
																		],
																		"functionName": {
																			"name": "round_up_to_mul_of_32",
																			"nodeType": "YulIdentifier",
																			"src": "11631:21:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "11631:29:19"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "11622:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "11622:39:19"
															},
															"variableNames": [
																{
																	"name": "end",
																	"nodeType": "YulIdentifier",
																	"src": "11615:3:19"
																}
															]
														}
													]
												},
												"name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "11388:5:19",
														"type": ""
													},
													{
														"name": "pos",
														"nodeType": "YulTypedName",
														"src": "11395:3:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "end",
														"nodeType": "YulTypedName",
														"src": "11403:3:19",
														"type": ""
													}
												],
												"src": "11327:340:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "11781:265:19",
													"statements": [
														{
															"nodeType": "YulVariableDeclaration",
															"src": "11791:52:19",
															"value": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "11837:5:19"
																	}
																],
																"functionName": {
																	"name": "array_length_t_bytes_memory_ptr",
																	"nodeType": "YulIdentifier",
																	"src": "11805:31:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "11805:38:19"
															},
															"variables": [
																{
																	"name": "length",
																	"nodeType": "YulTypedName",
																	"src": "11795:6:19",
																	"type": ""
																}
															]
														},
														{
															"nodeType": "YulAssignment",
															"src": "11852:95:19",
															"value": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "11935:3:19"
																	},
																	{
																		"name": "length",
																		"nodeType": "YulIdentifier",
																		"src": "11940:6:19"
																	}
																],
																"functionName": {
																	"name": "array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "11859:75:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "11859:88:19"
															},
															"variableNames": [
																{
																	"name": "pos",
																	"nodeType": "YulIdentifier",
																	"src": "11852:3:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "value",
																				"nodeType": "YulIdentifier",
																				"src": "11982:5:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "11989:4:19",
																				"type": "",
																				"value": "0x20"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "11978:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "11978:16:19"
																	},
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "11996:3:19"
																	},
																	{
																		"name": "length",
																		"nodeType": "YulIdentifier",
																		"src": "12001:6:19"
																	}
																],
																"functionName": {
																	"name": "copy_memory_to_memory",
																	"nodeType": "YulIdentifier",
																	"src": "11956:21:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "11956:52:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "11956:52:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "12017:23:19",
															"value": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "12028:3:19"
																	},
																	{
																		"name": "length",
																		"nodeType": "YulIdentifier",
																		"src": "12033:6:19"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "12024:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "12024:16:19"
															},
															"variableNames": [
																{
																	"name": "end",
																	"nodeType": "YulIdentifier",
																	"src": "12017:3:19"
																}
															]
														}
													]
												},
												"name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "11762:5:19",
														"type": ""
													},
													{
														"name": "pos",
														"nodeType": "YulTypedName",
														"src": "11769:3:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "end",
														"nodeType": "YulTypedName",
														"src": "11777:3:19",
														"type": ""
													}
												],
												"src": "11673:373:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "12120:79:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "12137:3:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "value",
																				"nodeType": "YulIdentifier",
																				"src": "12186:5:19"
																			}
																		],
																		"functionName": {
																			"name": "convert_t_contract$_IERC20_$77_to_t_address",
																			"nodeType": "YulIdentifier",
																			"src": "12142:43:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "12142:50:19"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "12130:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "12130:63:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "12130:63:19"
														}
													]
												},
												"name": "abi_encode_t_contract$_IERC20_$77_to_t_address",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "12108:5:19",
														"type": ""
													},
													{
														"name": "pos",
														"nodeType": "YulTypedName",
														"src": "12115:3:19",
														"type": ""
													}
												],
												"src": "12052:147:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "12283:79:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "12300:3:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "value",
																				"nodeType": "YulIdentifier",
																				"src": "12349:5:19"
																			}
																		],
																		"functionName": {
																			"name": "convert_t_contract$_IERC20_$77_to_t_address",
																			"nodeType": "YulIdentifier",
																			"src": "12305:43:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "12305:50:19"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "12293:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "12293:63:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "12293:63:19"
														}
													]
												},
												"name": "abi_encode_t_contract$_IERC20_$77_to_t_address_fromStack",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "12271:5:19",
														"type": ""
													},
													{
														"name": "pos",
														"nodeType": "YulTypedName",
														"src": "12278:3:19",
														"type": ""
													}
												],
												"src": "12205:157:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "12458:91:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "12475:3:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "value",
																				"nodeType": "YulIdentifier",
																				"src": "12536:5:19"
																			}
																		],
																		"functionName": {
																			"name": "convert_t_contract$_IGaugeController_$3664_to_t_address",
																			"nodeType": "YulIdentifier",
																			"src": "12480:55:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "12480:62:19"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "12468:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "12468:75:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "12468:75:19"
														}
													]
												},
												"name": "abi_encode_t_contract$_IGaugeController_$3664_to_t_address_fromStack",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "12446:5:19",
														"type": ""
													},
													{
														"name": "pos",
														"nodeType": "YulTypedName",
														"src": "12453:3:19",
														"type": ""
													}
												],
												"src": "12368:181:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "12647:272:19",
													"statements": [
														{
															"nodeType": "YulVariableDeclaration",
															"src": "12657:53:19",
															"value": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "12704:5:19"
																	}
																],
																"functionName": {
																	"name": "array_length_t_string_memory_ptr",
																	"nodeType": "YulIdentifier",
																	"src": "12671:32:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "12671:39:19"
															},
															"variables": [
																{
																	"name": "length",
																	"nodeType": "YulTypedName",
																	"src": "12661:6:19",
																	"type": ""
																}
															]
														},
														{
															"nodeType": "YulAssignment",
															"src": "12719:78:19",
															"value": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "12785:3:19"
																	},
																	{
																		"name": "length",
																		"nodeType": "YulIdentifier",
																		"src": "12790:6:19"
																	}
																],
																"functionName": {
																	"name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "12726:58:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "12726:71:19"
															},
															"variableNames": [
																{
																	"name": "pos",
																	"nodeType": "YulIdentifier",
																	"src": "12719:3:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "value",
																				"nodeType": "YulIdentifier",
																				"src": "12832:5:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "12839:4:19",
																				"type": "",
																				"value": "0x20"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "12828:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "12828:16:19"
																	},
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "12846:3:19"
																	},
																	{
																		"name": "length",
																		"nodeType": "YulIdentifier",
																		"src": "12851:6:19"
																	}
																],
																"functionName": {
																	"name": "copy_memory_to_memory",
																	"nodeType": "YulIdentifier",
																	"src": "12806:21:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "12806:52:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "12806:52:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "12867:46:19",
															"value": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "12878:3:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "length",
																				"nodeType": "YulIdentifier",
																				"src": "12905:6:19"
																			}
																		],
																		"functionName": {
																			"name": "round_up_to_mul_of_32",
																			"nodeType": "YulIdentifier",
																			"src": "12883:21:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "12883:29:19"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "12874:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "12874:39:19"
															},
															"variableNames": [
																{
																	"name": "end",
																	"nodeType": "YulIdentifier",
																	"src": "12867:3:19"
																}
															]
														}
													]
												},
												"name": "abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "12628:5:19",
														"type": ""
													},
													{
														"name": "pos",
														"nodeType": "YulTypedName",
														"src": "12635:3:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "end",
														"nodeType": "YulTypedName",
														"src": "12643:3:19",
														"type": ""
													}
												],
												"src": "12555:364:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "13071:220:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "13081:74:19",
															"value": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "13147:3:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "13152:2:19",
																		"type": "",
																		"value": "23"
																	}
																],
																"functionName": {
																	"name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "13088:58:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "13088:67:19"
															},
															"variableNames": [
																{
																	"name": "pos",
																	"nodeType": "YulIdentifier",
																	"src": "13081:3:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "13253:3:19"
																	}
																],
																"functionName": {
																	"name": "store_literal_in_memory_3d9aad6f9cafa45f8d5356023189d3e1086a81a6694f72a8006f1b290ec90f41",
																	"nodeType": "YulIdentifier",
																	"src": "13164:88:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "13164:93:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "13164:93:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "13266:19:19",
															"value": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "13277:3:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "13282:2:19",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "13273:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "13273:12:19"
															},
															"variableNames": [
																{
																	"name": "end",
																	"nodeType": "YulIdentifier",
																	"src": "13266:3:19"
																}
															]
														}
													]
												},
												"name": "abi_encode_t_stringliteral_3d9aad6f9cafa45f8d5356023189d3e1086a81a6694f72a8006f1b290ec90f41_to_t_string_memory_ptr_fromStack",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "pos",
														"nodeType": "YulTypedName",
														"src": "13059:3:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "end",
														"nodeType": "YulTypedName",
														"src": "13067:3:19",
														"type": ""
													}
												],
												"src": "12925:366:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "13443:220:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "13453:74:19",
															"value": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "13519:3:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "13524:2:19",
																		"type": "",
																		"value": "38"
																	}
																],
																"functionName": {
																	"name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "13460:58:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "13460:67:19"
															},
															"variableNames": [
																{
																	"name": "pos",
																	"nodeType": "YulIdentifier",
																	"src": "13453:3:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "13625:3:19"
																	}
																],
																"functionName": {
																	"name": "store_literal_in_memory_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c",
																	"nodeType": "YulIdentifier",
																	"src": "13536:88:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "13536:93:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "13536:93:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "13638:19:19",
															"value": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "13649:3:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "13654:2:19",
																		"type": "",
																		"value": "64"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "13645:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "13645:12:19"
															},
															"variableNames": [
																{
																	"name": "end",
																	"nodeType": "YulIdentifier",
																	"src": "13638:3:19"
																}
															]
														}
													]
												},
												"name": "abi_encode_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c_to_t_string_memory_ptr_fromStack",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "pos",
														"nodeType": "YulTypedName",
														"src": "13431:3:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "end",
														"nodeType": "YulTypedName",
														"src": "13439:3:19",
														"type": ""
													}
												],
												"src": "13297:366:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "13815:220:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "13825:74:19",
															"value": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "13891:3:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "13896:2:19",
																		"type": "",
																		"value": "38"
																	}
																],
																"functionName": {
																	"name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "13832:58:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "13832:67:19"
															},
															"variableNames": [
																{
																	"name": "pos",
																	"nodeType": "YulIdentifier",
																	"src": "13825:3:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "13997:3:19"
																	}
																],
																"functionName": {
																	"name": "store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520",
																	"nodeType": "YulIdentifier",
																	"src": "13908:88:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "13908:93:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "13908:93:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "14010:19:19",
															"value": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "14021:3:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "14026:2:19",
																		"type": "",
																		"value": "64"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "14017:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "14017:12:19"
															},
															"variableNames": [
																{
																	"name": "end",
																	"nodeType": "YulIdentifier",
																	"src": "14010:3:19"
																}
															]
														}
													]
												},
												"name": "abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "pos",
														"nodeType": "YulTypedName",
														"src": "13803:3:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "end",
														"nodeType": "YulTypedName",
														"src": "13811:3:19",
														"type": ""
													}
												],
												"src": "13669:366:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "14187:220:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "14197:74:19",
															"value": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "14263:3:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "14268:2:19",
																		"type": "",
																		"value": "29"
																	}
																],
																"functionName": {
																	"name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "14204:58:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "14204:67:19"
															},
															"variableNames": [
																{
																	"name": "pos",
																	"nodeType": "YulIdentifier",
																	"src": "14197:3:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "14369:3:19"
																	}
																],
																"functionName": {
																	"name": "store_literal_in_memory_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad",
																	"nodeType": "YulIdentifier",
																	"src": "14280:88:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "14280:93:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "14280:93:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "14382:19:19",
															"value": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "14393:3:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "14398:2:19",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "14389:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "14389:12:19"
															},
															"variableNames": [
																{
																	"name": "end",
																	"nodeType": "YulIdentifier",
																	"src": "14382:3:19"
																}
															]
														}
													]
												},
												"name": "abi_encode_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad_to_t_string_memory_ptr_fromStack",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "pos",
														"nodeType": "YulTypedName",
														"src": "14175:3:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "end",
														"nodeType": "YulTypedName",
														"src": "14183:3:19",
														"type": ""
													}
												],
												"src": "14041:366:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "14559:220:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "14569:74:19",
															"value": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "14635:3:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "14640:2:19",
																		"type": "",
																		"value": "42"
																	}
																],
																"functionName": {
																	"name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "14576:58:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "14576:67:19"
															},
															"variableNames": [
																{
																	"name": "pos",
																	"nodeType": "YulIdentifier",
																	"src": "14569:3:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "14741:3:19"
																	}
																],
																"functionName": {
																	"name": "store_literal_in_memory_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd",
																	"nodeType": "YulIdentifier",
																	"src": "14652:88:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "14652:93:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "14652:93:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "14754:19:19",
															"value": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "14765:3:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "14770:2:19",
																		"type": "",
																		"value": "64"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "14761:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "14761:12:19"
															},
															"variableNames": [
																{
																	"name": "end",
																	"nodeType": "YulIdentifier",
																	"src": "14754:3:19"
																}
															]
														}
													]
												},
												"name": "abi_encode_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd_to_t_string_memory_ptr_fromStack",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "pos",
														"nodeType": "YulTypedName",
														"src": "14547:3:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "end",
														"nodeType": "YulTypedName",
														"src": "14555:3:19",
														"type": ""
													}
												],
												"src": "14413:366:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "14931:220:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "14941:74:19",
															"value": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "15007:3:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "15012:2:19",
																		"type": "",
																		"value": "28"
																	}
																],
																"functionName": {
																	"name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "14948:58:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "14948:67:19"
															},
															"variableNames": [
																{
																	"name": "pos",
																	"nodeType": "YulIdentifier",
																	"src": "14941:3:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "15113:3:19"
																	}
																],
																"functionName": {
																	"name": "store_literal_in_memory_fa0209976ed18f66239d9b649265177d5902c97497d099e3744ef8b17544aa43",
																	"nodeType": "YulIdentifier",
																	"src": "15024:88:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "15024:93:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "15024:93:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "15126:19:19",
															"value": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "15137:3:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "15142:2:19",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "15133:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "15133:12:19"
															},
															"variableNames": [
																{
																	"name": "end",
																	"nodeType": "YulIdentifier",
																	"src": "15126:3:19"
																}
															]
														}
													]
												},
												"name": "abi_encode_t_stringliteral_fa0209976ed18f66239d9b649265177d5902c97497d099e3744ef8b17544aa43_to_t_string_memory_ptr_fromStack",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "pos",
														"nodeType": "YulTypedName",
														"src": "14919:3:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "end",
														"nodeType": "YulTypedName",
														"src": "14927:3:19",
														"type": ""
													}
												],
												"src": "14785:366:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "15353:408:19",
													"statements": [
														{
															"nodeType": "YulVariableDeclaration",
															"src": "15363:26:19",
															"value": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "15379:3:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "15384:4:19",
																		"type": "",
																		"value": "0x40"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "15375:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "15375:14:19"
															},
															"variables": [
																{
																	"name": "tail",
																	"nodeType": "YulTypedName",
																	"src": "15367:4:19",
																	"type": ""
																}
															]
														},
														{
															"nodeType": "YulBlock",
															"src": "15399:178:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "15435:43:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "value",
																						"nodeType": "YulIdentifier",
																						"src": "15465:5:19"
																					},
																					{
																						"kind": "number",
																						"nodeType": "YulLiteral",
																						"src": "15472:4:19",
																						"type": "",
																						"value": "0x00"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "15461:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "15461:16:19"
																			}
																		],
																		"functionName": {
																			"name": "mload",
																			"nodeType": "YulIdentifier",
																			"src": "15455:5:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "15455:23:19"
																	},
																	"variables": [
																		{
																			"name": "memberValue0",
																			"nodeType": "YulTypedName",
																			"src": "15439:12:19",
																			"type": ""
																		}
																	]
																},
																{
																	"expression": {
																		"arguments": [
																			{
																				"name": "memberValue0",
																				"nodeType": "YulIdentifier",
																				"src": "15538:12:19"
																			},
																			{
																				"arguments": [
																					{
																						"name": "pos",
																						"nodeType": "YulIdentifier",
																						"src": "15556:3:19"
																					},
																					{
																						"kind": "number",
																						"nodeType": "YulLiteral",
																						"src": "15561:4:19",
																						"type": "",
																						"value": "0x00"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "15552:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "15552:14:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_encode_t_contract$_IERC20_$77_to_t_address",
																			"nodeType": "YulIdentifier",
																			"src": "15491:46:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "15491:76:19"
																	},
																	"nodeType": "YulExpressionStatement",
																	"src": "15491:76:19"
																}
															]
														},
														{
															"nodeType": "YulBlock",
															"src": "15587:167:19",
															"statements": [
																{
																	"nodeType": "YulVariableDeclaration",
																	"src": "15627:43:19",
																	"value": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "value",
																						"nodeType": "YulIdentifier",
																						"src": "15657:5:19"
																					},
																					{
																						"kind": "number",
																						"nodeType": "YulLiteral",
																						"src": "15664:4:19",
																						"type": "",
																						"value": "0x20"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "15653:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "15653:16:19"
																			}
																		],
																		"functionName": {
																			"name": "mload",
																			"nodeType": "YulIdentifier",
																			"src": "15647:5:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "15647:23:19"
																	},
																	"variables": [
																		{
																			"name": "memberValue0",
																			"nodeType": "YulTypedName",
																			"src": "15631:12:19",
																			"type": ""
																		}
																	]
																},
																{
																	"expression": {
																		"arguments": [
																			{
																				"name": "memberValue0",
																				"nodeType": "YulIdentifier",
																				"src": "15715:12:19"
																			},
																			{
																				"arguments": [
																					{
																						"name": "pos",
																						"nodeType": "YulIdentifier",
																						"src": "15733:3:19"
																					},
																					{
																						"kind": "number",
																						"nodeType": "YulLiteral",
																						"src": "15738:4:19",
																						"type": "",
																						"value": "0x20"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "15729:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "15729:14:19"
																			}
																		],
																		"functionName": {
																			"name": "abi_encode_t_uint64_to_t_uint64",
																			"nodeType": "YulIdentifier",
																			"src": "15683:31:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "15683:61:19"
																	},
																	"nodeType": "YulExpressionStatement",
																	"src": "15683:61:19"
																}
															]
														}
													]
												},
												"name": "abi_encode_t_struct$_RewardToken_$2659_memory_ptr_to_t_struct$_RewardToken_$2659_memory_ptr_fromStack",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "15340:5:19",
														"type": ""
													},
													{
														"name": "pos",
														"nodeType": "YulTypedName",
														"src": "15347:3:19",
														"type": ""
													}
												],
												"src": "15229:532:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "15832:53:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "15849:3:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "value",
																				"nodeType": "YulIdentifier",
																				"src": "15872:5:19"
																			}
																		],
																		"functionName": {
																			"name": "cleanup_t_uint256",
																			"nodeType": "YulIdentifier",
																			"src": "15854:17:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "15854:24:19"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "15842:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "15842:37:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "15842:37:19"
														}
													]
												},
												"name": "abi_encode_t_uint256_to_t_uint256_fromStack",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "15820:5:19",
														"type": ""
													},
													{
														"name": "pos",
														"nodeType": "YulTypedName",
														"src": "15827:3:19",
														"type": ""
													}
												],
												"src": "15767:118:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "15954:52:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "15971:3:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "value",
																				"nodeType": "YulIdentifier",
																				"src": "15993:5:19"
																			}
																		],
																		"functionName": {
																			"name": "cleanup_t_uint32",
																			"nodeType": "YulIdentifier",
																			"src": "15976:16:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "15976:23:19"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "15964:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "15964:36:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "15964:36:19"
														}
													]
												},
												"name": "abi_encode_t_uint32_to_t_uint32_fromStack",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "15942:5:19",
														"type": ""
													},
													{
														"name": "pos",
														"nodeType": "YulTypedName",
														"src": "15949:3:19",
														"type": ""
													}
												],
												"src": "15891:115:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "16065:52:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "16082:3:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "value",
																				"nodeType": "YulIdentifier",
																				"src": "16104:5:19"
																			}
																		],
																		"functionName": {
																			"name": "cleanup_t_uint64",
																			"nodeType": "YulIdentifier",
																			"src": "16087:16:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "16087:23:19"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "16075:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "16075:36:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "16075:36:19"
														}
													]
												},
												"name": "abi_encode_t_uint64_to_t_uint64",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "16053:5:19",
														"type": ""
													},
													{
														"name": "pos",
														"nodeType": "YulTypedName",
														"src": "16060:3:19",
														"type": ""
													}
												],
												"src": "16012:105:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "16186:52:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "16203:3:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "value",
																				"nodeType": "YulIdentifier",
																				"src": "16225:5:19"
																			}
																		],
																		"functionName": {
																			"name": "cleanup_t_uint64",
																			"nodeType": "YulIdentifier",
																			"src": "16208:16:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "16208:23:19"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "16196:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "16196:36:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "16196:36:19"
														}
													]
												},
												"name": "abi_encode_t_uint64_to_t_uint64_fromStack",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "16174:5:19",
														"type": ""
													},
													{
														"name": "pos",
														"nodeType": "YulTypedName",
														"src": "16181:3:19",
														"type": ""
													}
												],
												"src": "16123:115:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "16378:137:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "16389:100:19",
															"value": {
																"arguments": [
																	{
																		"name": "value0",
																		"nodeType": "YulIdentifier",
																		"src": "16476:6:19"
																	},
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "16485:3:19"
																	}
																],
																"functionName": {
																	"name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "16396:79:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "16396:93:19"
															},
															"variableNames": [
																{
																	"name": "pos",
																	"nodeType": "YulIdentifier",
																	"src": "16389:3:19"
																}
															]
														},
														{
															"nodeType": "YulAssignment",
															"src": "16499:10:19",
															"value": {
																"name": "pos",
																"nodeType": "YulIdentifier",
																"src": "16506:3:19"
															},
															"variableNames": [
																{
																	"name": "end",
																	"nodeType": "YulIdentifier",
																	"src": "16499:3:19"
																}
															]
														}
													]
												},
												"name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "pos",
														"nodeType": "YulTypedName",
														"src": "16357:3:19",
														"type": ""
													},
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "16363:6:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "end",
														"nodeType": "YulTypedName",
														"src": "16374:3:19",
														"type": ""
													}
												],
												"src": "16244:271:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "16619:124:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "16629:26:19",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "16641:9:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "16652:2:19",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "16637:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "16637:18:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "16629:4:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "value0",
																		"nodeType": "YulIdentifier",
																		"src": "16709:6:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "16722:9:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "16733:1:19",
																				"type": "",
																				"value": "0"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "16718:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "16718:17:19"
																	}
																],
																"functionName": {
																	"name": "abi_encode_t_address_to_t_address_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "16665:43:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "16665:71:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "16665:71:19"
														}
													]
												},
												"name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "16591:9:19",
														"type": ""
													},
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "16603:6:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "16614:4:19",
														"type": ""
													}
												],
												"src": "16521:222:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "16875:206:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "16885:26:19",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "16897:9:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "16908:2:19",
																		"type": "",
																		"value": "64"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "16893:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "16893:18:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "16885:4:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "value0",
																		"nodeType": "YulIdentifier",
																		"src": "16965:6:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "16978:9:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "16989:1:19",
																				"type": "",
																				"value": "0"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "16974:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "16974:17:19"
																	}
																],
																"functionName": {
																	"name": "abi_encode_t_address_to_t_address_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "16921:43:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "16921:71:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "16921:71:19"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "value1",
																		"nodeType": "YulIdentifier",
																		"src": "17046:6:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "17059:9:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "17070:2:19",
																				"type": "",
																				"value": "32"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "17055:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "17055:18:19"
																	}
																],
																"functionName": {
																	"name": "abi_encode_t_address_to_t_address_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "17002:43:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "17002:72:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "17002:72:19"
														}
													]
												},
												"name": "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "16839:9:19",
														"type": ""
													},
													{
														"name": "value1",
														"nodeType": "YulTypedName",
														"src": "16851:6:19",
														"type": ""
													},
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "16859:6:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "16870:4:19",
														"type": ""
													}
												],
												"src": "16749:332:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "17241:288:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "17251:26:19",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "17263:9:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "17274:2:19",
																		"type": "",
																		"value": "96"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "17259:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "17259:18:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "17251:4:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "value0",
																		"nodeType": "YulIdentifier",
																		"src": "17331:6:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "17344:9:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "17355:1:19",
																				"type": "",
																				"value": "0"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "17340:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "17340:17:19"
																	}
																],
																"functionName": {
																	"name": "abi_encode_t_address_to_t_address_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "17287:43:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "17287:71:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "17287:71:19"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "value1",
																		"nodeType": "YulIdentifier",
																		"src": "17412:6:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "17425:9:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "17436:2:19",
																				"type": "",
																				"value": "32"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "17421:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "17421:18:19"
																	}
																],
																"functionName": {
																	"name": "abi_encode_t_address_to_t_address_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "17368:43:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "17368:72:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "17368:72:19"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "value2",
																		"nodeType": "YulIdentifier",
																		"src": "17494:6:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "17507:9:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "17518:2:19",
																				"type": "",
																				"value": "64"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "17503:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "17503:18:19"
																	}
																],
																"functionName": {
																	"name": "abi_encode_t_uint256_to_t_uint256_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "17450:43:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "17450:72:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "17450:72:19"
														}
													]
												},
												"name": "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "17197:9:19",
														"type": ""
													},
													{
														"name": "value2",
														"nodeType": "YulTypedName",
														"src": "17209:6:19",
														"type": ""
													},
													{
														"name": "value1",
														"nodeType": "YulTypedName",
														"src": "17217:6:19",
														"type": ""
													},
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "17225:6:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "17236:4:19",
														"type": ""
													}
												],
												"src": "17087:442:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "17701:243:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "17711:26:19",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "17723:9:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "17734:2:19",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "17719:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "17719:18:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "17711:4:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "17758:9:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "17769:1:19",
																				"type": "",
																				"value": "0"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "17754:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "17754:17:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "tail",
																				"nodeType": "YulIdentifier",
																				"src": "17777:4:19"
																			},
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "17783:9:19"
																			}
																		],
																		"functionName": {
																			"name": "sub",
																			"nodeType": "YulIdentifier",
																			"src": "17773:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "17773:20:19"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "17747:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "17747:47:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "17747:47:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "17803:134:19",
															"value": {
																"arguments": [
																	{
																		"name": "value0",
																		"nodeType": "YulIdentifier",
																		"src": "17923:6:19"
																	},
																	{
																		"name": "tail",
																		"nodeType": "YulIdentifier",
																		"src": "17932:4:19"
																	}
																],
																"functionName": {
																	"name": "abi_encode_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "17811:111:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "17811:126:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "17803:4:19"
																}
															]
														}
													]
												},
												"name": "abi_encode_tuple_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "17673:9:19",
														"type": ""
													},
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "17685:6:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "17696:4:19",
														"type": ""
													}
												],
												"src": "17535:409:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "18087:217:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "18097:26:19",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "18109:9:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "18120:2:19",
																		"type": "",
																		"value": "64"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "18105:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "18105:18:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "18097:4:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "value0",
																		"nodeType": "YulIdentifier",
																		"src": "18190:6:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "18203:9:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "18214:1:19",
																				"type": "",
																				"value": "0"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "18199:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "18199:17:19"
																	}
																],
																"functionName": {
																	"name": "abi_encode_t_contract$_IERC20_$77_to_t_address_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "18133:56:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "18133:84:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "18133:84:19"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "value1",
																		"nodeType": "YulIdentifier",
																		"src": "18269:6:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "18282:9:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "18293:2:19",
																				"type": "",
																				"value": "32"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "18278:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "18278:18:19"
																	}
																],
																"functionName": {
																	"name": "abi_encode_t_uint64_to_t_uint64_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "18227:41:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "18227:70:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "18227:70:19"
														}
													]
												},
												"name": "abi_encode_tuple_t_contract$_IERC20_$77_t_uint64__to_t_address_t_uint64__fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "18051:9:19",
														"type": ""
													},
													{
														"name": "value1",
														"nodeType": "YulTypedName",
														"src": "18063:6:19",
														"type": ""
													},
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "18071:6:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "18082:4:19",
														"type": ""
													}
												],
												"src": "17950:354:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "18433:149:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "18443:26:19",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "18455:9:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "18466:2:19",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "18451:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "18451:18:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "18443:4:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "value0",
																		"nodeType": "YulIdentifier",
																		"src": "18548:6:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "18561:9:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "18572:1:19",
																				"type": "",
																				"value": "0"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "18557:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "18557:17:19"
																	}
																],
																"functionName": {
																	"name": "abi_encode_t_contract$_IGaugeController_$3664_to_t_address_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "18479:68:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "18479:96:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "18479:96:19"
														}
													]
												},
												"name": "abi_encode_tuple_t_contract$_IGaugeController_$3664__to_t_address__fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "18405:9:19",
														"type": ""
													},
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "18417:6:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "18428:4:19",
														"type": ""
													}
												],
												"src": "18310:272:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "18706:195:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "18716:26:19",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "18728:9:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "18739:2:19",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "18724:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "18724:18:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "18716:4:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "18763:9:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "18774:1:19",
																				"type": "",
																				"value": "0"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "18759:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "18759:17:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "tail",
																				"nodeType": "YulIdentifier",
																				"src": "18782:4:19"
																			},
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "18788:9:19"
																			}
																		],
																		"functionName": {
																			"name": "sub",
																			"nodeType": "YulIdentifier",
																			"src": "18778:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "18778:20:19"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "18752:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "18752:47:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "18752:47:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "18808:86:19",
															"value": {
																"arguments": [
																	{
																		"name": "value0",
																		"nodeType": "YulIdentifier",
																		"src": "18880:6:19"
																	},
																	{
																		"name": "tail",
																		"nodeType": "YulIdentifier",
																		"src": "18889:4:19"
																	}
																],
																"functionName": {
																	"name": "abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "18816:63:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "18816:78:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "18808:4:19"
																}
															]
														}
													]
												},
												"name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "18678:9:19",
														"type": ""
													},
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "18690:6:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "18701:4:19",
														"type": ""
													}
												],
												"src": "18588:313:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "19078:248:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "19088:26:19",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "19100:9:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "19111:2:19",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "19096:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "19096:18:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "19088:4:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "19135:9:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "19146:1:19",
																				"type": "",
																				"value": "0"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "19131:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "19131:17:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "tail",
																				"nodeType": "YulIdentifier",
																				"src": "19154:4:19"
																			},
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "19160:9:19"
																			}
																		],
																		"functionName": {
																			"name": "sub",
																			"nodeType": "YulIdentifier",
																			"src": "19150:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "19150:20:19"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "19124:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "19124:47:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "19124:47:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "19180:139:19",
															"value": {
																"arguments": [
																	{
																		"name": "tail",
																		"nodeType": "YulIdentifier",
																		"src": "19314:4:19"
																	}
																],
																"functionName": {
																	"name": "abi_encode_t_stringliteral_3d9aad6f9cafa45f8d5356023189d3e1086a81a6694f72a8006f1b290ec90f41_to_t_string_memory_ptr_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "19188:124:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "19188:131:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "19180:4:19"
																}
															]
														}
													]
												},
												"name": "abi_encode_tuple_t_stringliteral_3d9aad6f9cafa45f8d5356023189d3e1086a81a6694f72a8006f1b290ec90f41__to_t_string_memory_ptr__fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "19058:9:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "19073:4:19",
														"type": ""
													}
												],
												"src": "18907:419:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "19503:248:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "19513:26:19",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "19525:9:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "19536:2:19",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "19521:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "19521:18:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "19513:4:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "19560:9:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "19571:1:19",
																				"type": "",
																				"value": "0"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "19556:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "19556:17:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "tail",
																				"nodeType": "YulIdentifier",
																				"src": "19579:4:19"
																			},
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "19585:9:19"
																			}
																		],
																		"functionName": {
																			"name": "sub",
																			"nodeType": "YulIdentifier",
																			"src": "19575:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "19575:20:19"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "19549:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "19549:47:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "19549:47:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "19605:139:19",
															"value": {
																"arguments": [
																	{
																		"name": "tail",
																		"nodeType": "YulIdentifier",
																		"src": "19739:4:19"
																	}
																],
																"functionName": {
																	"name": "abi_encode_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c_to_t_string_memory_ptr_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "19613:124:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "19613:131:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "19605:4:19"
																}
															]
														}
													]
												},
												"name": "abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "19483:9:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "19498:4:19",
														"type": ""
													}
												],
												"src": "19332:419:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "19928:248:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "19938:26:19",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "19950:9:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "19961:2:19",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "19946:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "19946:18:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "19938:4:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "19985:9:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "19996:1:19",
																				"type": "",
																				"value": "0"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "19981:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "19981:17:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "tail",
																				"nodeType": "YulIdentifier",
																				"src": "20004:4:19"
																			},
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "20010:9:19"
																			}
																		],
																		"functionName": {
																			"name": "sub",
																			"nodeType": "YulIdentifier",
																			"src": "20000:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "20000:20:19"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "19974:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "19974:47:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "19974:47:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "20030:139:19",
															"value": {
																"arguments": [
																	{
																		"name": "tail",
																		"nodeType": "YulIdentifier",
																		"src": "20164:4:19"
																	}
																],
																"functionName": {
																	"name": "abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "20038:124:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "20038:131:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "20030:4:19"
																}
															]
														}
													]
												},
												"name": "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "19908:9:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "19923:4:19",
														"type": ""
													}
												],
												"src": "19757:419:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "20353:248:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "20363:26:19",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "20375:9:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "20386:2:19",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "20371:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "20371:18:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "20363:4:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "20410:9:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "20421:1:19",
																				"type": "",
																				"value": "0"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "20406:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "20406:17:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "tail",
																				"nodeType": "YulIdentifier",
																				"src": "20429:4:19"
																			},
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "20435:9:19"
																			}
																		],
																		"functionName": {
																			"name": "sub",
																			"nodeType": "YulIdentifier",
																			"src": "20425:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "20425:20:19"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "20399:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "20399:47:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "20399:47:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "20455:139:19",
															"value": {
																"arguments": [
																	{
																		"name": "tail",
																		"nodeType": "YulIdentifier",
																		"src": "20589:4:19"
																	}
																],
																"functionName": {
																	"name": "abi_encode_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad_to_t_string_memory_ptr_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "20463:124:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "20463:131:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "20455:4:19"
																}
															]
														}
													]
												},
												"name": "abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "20333:9:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "20348:4:19",
														"type": ""
													}
												],
												"src": "20182:419:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "20778:248:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "20788:26:19",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "20800:9:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "20811:2:19",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "20796:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "20796:18:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "20788:4:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "20835:9:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "20846:1:19",
																				"type": "",
																				"value": "0"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "20831:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "20831:17:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "tail",
																				"nodeType": "YulIdentifier",
																				"src": "20854:4:19"
																			},
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "20860:9:19"
																			}
																		],
																		"functionName": {
																			"name": "sub",
																			"nodeType": "YulIdentifier",
																			"src": "20850:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "20850:20:19"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "20824:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "20824:47:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "20824:47:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "20880:139:19",
															"value": {
																"arguments": [
																	{
																		"name": "tail",
																		"nodeType": "YulIdentifier",
																		"src": "21014:4:19"
																	}
																],
																"functionName": {
																	"name": "abi_encode_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd_to_t_string_memory_ptr_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "20888:124:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "20888:131:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "20880:4:19"
																}
															]
														}
													]
												},
												"name": "abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "20758:9:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "20773:4:19",
														"type": ""
													}
												],
												"src": "20607:419:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "21203:248:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "21213:26:19",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "21225:9:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "21236:2:19",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "21221:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "21221:18:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "21213:4:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "21260:9:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "21271:1:19",
																				"type": "",
																				"value": "0"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "21256:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "21256:17:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "tail",
																				"nodeType": "YulIdentifier",
																				"src": "21279:4:19"
																			},
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "21285:9:19"
																			}
																		],
																		"functionName": {
																			"name": "sub",
																			"nodeType": "YulIdentifier",
																			"src": "21275:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "21275:20:19"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "21249:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "21249:47:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "21249:47:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "21305:139:19",
															"value": {
																"arguments": [
																	{
																		"name": "tail",
																		"nodeType": "YulIdentifier",
																		"src": "21439:4:19"
																	}
																],
																"functionName": {
																	"name": "abi_encode_t_stringliteral_fa0209976ed18f66239d9b649265177d5902c97497d099e3744ef8b17544aa43_to_t_string_memory_ptr_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "21313:124:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "21313:131:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "21305:4:19"
																}
															]
														}
													]
												},
												"name": "abi_encode_tuple_t_stringliteral_fa0209976ed18f66239d9b649265177d5902c97497d099e3744ef8b17544aa43__to_t_string_memory_ptr__fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "21183:9:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "21198:4:19",
														"type": ""
													}
												],
												"src": "21032:419:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "21613:182:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "21623:26:19",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "21635:9:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "21646:2:19",
																		"type": "",
																		"value": "64"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "21631:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "21631:18:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "21623:4:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "value0",
																		"nodeType": "YulIdentifier",
																		"src": "21761:6:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "21774:9:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "21785:1:19",
																				"type": "",
																				"value": "0"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "21770:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "21770:17:19"
																	}
																],
																"functionName": {
																	"name": "abi_encode_t_struct$_RewardToken_$2659_memory_ptr_to_t_struct$_RewardToken_$2659_memory_ptr_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "21659:101:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "21659:129:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "21659:129:19"
														}
													]
												},
												"name": "abi_encode_tuple_t_struct$_RewardToken_$2659_memory_ptr__to_t_struct$_RewardToken_$2659_memory_ptr__fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "21585:9:19",
														"type": ""
													},
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "21597:6:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "21608:4:19",
														"type": ""
													}
												],
												"src": "21457:338:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "21899:124:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "21909:26:19",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "21921:9:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "21932:2:19",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "21917:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "21917:18:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "21909:4:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "value0",
																		"nodeType": "YulIdentifier",
																		"src": "21989:6:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "22002:9:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "22013:1:19",
																				"type": "",
																				"value": "0"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "21998:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "21998:17:19"
																	}
																],
																"functionName": {
																	"name": "abi_encode_t_uint256_to_t_uint256_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "21945:43:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "21945:71:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "21945:71:19"
														}
													]
												},
												"name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "21871:9:19",
														"type": ""
													},
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "21883:6:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "21894:4:19",
														"type": ""
													}
												],
												"src": "21801:222:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "22155:206:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "22165:26:19",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "22177:9:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "22188:2:19",
																		"type": "",
																		"value": "64"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "22173:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "22173:18:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "22165:4:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "value0",
																		"nodeType": "YulIdentifier",
																		"src": "22245:6:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "22258:9:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "22269:1:19",
																				"type": "",
																				"value": "0"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "22254:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "22254:17:19"
																	}
																],
																"functionName": {
																	"name": "abi_encode_t_uint256_to_t_uint256_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "22201:43:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "22201:71:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "22201:71:19"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "value1",
																		"nodeType": "YulIdentifier",
																		"src": "22326:6:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "22339:9:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "22350:2:19",
																				"type": "",
																				"value": "32"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "22335:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "22335:18:19"
																	}
																],
																"functionName": {
																	"name": "abi_encode_t_uint256_to_t_uint256_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "22282:43:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "22282:72:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "22282:72:19"
														}
													]
												},
												"name": "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "22119:9:19",
														"type": ""
													},
													{
														"name": "value1",
														"nodeType": "YulTypedName",
														"src": "22131:6:19",
														"type": ""
													},
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "22139:6:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "22150:4:19",
														"type": ""
													}
												],
												"src": "22029:332:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "22521:288:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "22531:26:19",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "22543:9:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "22554:2:19",
																		"type": "",
																		"value": "96"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "22539:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "22539:18:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "22531:4:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "value0",
																		"nodeType": "YulIdentifier",
																		"src": "22611:6:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "22624:9:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "22635:1:19",
																				"type": "",
																				"value": "0"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "22620:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "22620:17:19"
																	}
																],
																"functionName": {
																	"name": "abi_encode_t_uint256_to_t_uint256_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "22567:43:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "22567:71:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "22567:71:19"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "value1",
																		"nodeType": "YulIdentifier",
																		"src": "22692:6:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "22705:9:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "22716:2:19",
																				"type": "",
																				"value": "32"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "22701:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "22701:18:19"
																	}
																],
																"functionName": {
																	"name": "abi_encode_t_uint256_to_t_uint256_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "22648:43:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "22648:72:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "22648:72:19"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "value2",
																		"nodeType": "YulIdentifier",
																		"src": "22774:6:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "22787:9:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "22798:2:19",
																				"type": "",
																				"value": "64"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "22783:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "22783:18:19"
																	}
																],
																"functionName": {
																	"name": "abi_encode_t_uint256_to_t_uint256_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "22730:43:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "22730:72:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "22730:72:19"
														}
													]
												},
												"name": "abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "22477:9:19",
														"type": ""
													},
													{
														"name": "value2",
														"nodeType": "YulTypedName",
														"src": "22489:6:19",
														"type": ""
													},
													{
														"name": "value1",
														"nodeType": "YulTypedName",
														"src": "22497:6:19",
														"type": ""
													},
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "22505:6:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "22516:4:19",
														"type": ""
													}
												],
												"src": "22367:442:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "22911:122:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "22921:26:19",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "22933:9:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "22944:2:19",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "22929:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "22929:18:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "22921:4:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "value0",
																		"nodeType": "YulIdentifier",
																		"src": "22999:6:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "23012:9:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "23023:1:19",
																				"type": "",
																				"value": "0"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "23008:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "23008:17:19"
																	}
																],
																"functionName": {
																	"name": "abi_encode_t_uint32_to_t_uint32_fromStack",
																	"nodeType": "YulIdentifier",
																	"src": "22957:41:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "22957:69:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "22957:69:19"
														}
													]
												},
												"name": "abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "22883:9:19",
														"type": ""
													},
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "22895:6:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "22906:4:19",
														"type": ""
													}
												],
												"src": "22815:218:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "23129:634:19",
													"statements": [
														{
															"nodeType": "YulVariableDeclaration",
															"src": "23139:51:19",
															"value": {
																"arguments": [
																	{
																		"name": "ptr_to_tail",
																		"nodeType": "YulIdentifier",
																		"src": "23178:11:19"
																	}
																],
																"functionName": {
																	"name": "calldataload",
																	"nodeType": "YulIdentifier",
																	"src": "23165:12:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "23165:25:19"
															},
															"variables": [
																{
																	"name": "rel_offset_of_tail",
																	"nodeType": "YulTypedName",
																	"src": "23143:18:19",
																	"type": ""
																}
															]
														},
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "23284:83:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [],
																			"functionName": {
																				"name": "revert_error_356d538aaf70fba12156cc466564b792649f8f3befb07b071c91142253e175ad",
																				"nodeType": "YulIdentifier",
																				"src": "23286:77:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "23286:79:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "23286:79:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "rel_offset_of_tail",
																				"nodeType": "YulIdentifier",
																				"src": "23213:18:19"
																			},
																			{
																				"arguments": [
																					{
																						"arguments": [
																							{
																								"arguments": [],
																								"functionName": {
																									"name": "calldatasize",
																									"nodeType": "YulIdentifier",
																									"src": "23241:12:19"
																								},
																								"nodeType": "YulFunctionCall",
																								"src": "23241:14:19"
																							},
																							{
																								"name": "base_ref",
																								"nodeType": "YulIdentifier",
																								"src": "23257:8:19"
																							}
																						],
																						"functionName": {
																							"name": "sub",
																							"nodeType": "YulIdentifier",
																							"src": "23237:3:19"
																						},
																						"nodeType": "YulFunctionCall",
																						"src": "23237:29:19"
																					},
																					{
																						"arguments": [
																							{
																								"kind": "number",
																								"nodeType": "YulLiteral",
																								"src": "23272:4:19",
																								"type": "",
																								"value": "0x20"
																							},
																							{
																								"kind": "number",
																								"nodeType": "YulLiteral",
																								"src": "23278:1:19",
																								"type": "",
																								"value": "1"
																							}
																						],
																						"functionName": {
																							"name": "sub",
																							"nodeType": "YulIdentifier",
																							"src": "23268:3:19"
																						},
																						"nodeType": "YulFunctionCall",
																						"src": "23268:12:19"
																					}
																				],
																				"functionName": {
																					"name": "sub",
																					"nodeType": "YulIdentifier",
																					"src": "23233:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "23233:48:19"
																			}
																		],
																		"functionName": {
																			"name": "slt",
																			"nodeType": "YulIdentifier",
																			"src": "23209:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "23209:73:19"
																	}
																],
																"functionName": {
																	"name": "iszero",
																	"nodeType": "YulIdentifier",
																	"src": "23202:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "23202:81:19"
															},
															"nodeType": "YulIf",
															"src": "23199:2:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "23376:41:19",
															"value": {
																"arguments": [
																	{
																		"name": "base_ref",
																		"nodeType": "YulIdentifier",
																		"src": "23388:8:19"
																	},
																	{
																		"name": "rel_offset_of_tail",
																		"nodeType": "YulIdentifier",
																		"src": "23398:18:19"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "23384:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "23384:33:19"
															},
															"variableNames": [
																{
																	"name": "addr",
																	"nodeType": "YulIdentifier",
																	"src": "23376:4:19"
																}
															]
														},
														{
															"nodeType": "YulAssignment",
															"src": "23427:28:19",
															"value": {
																"arguments": [
																	{
																		"name": "addr",
																		"nodeType": "YulIdentifier",
																		"src": "23450:4:19"
																	}
																],
																"functionName": {
																	"name": "calldataload",
																	"nodeType": "YulIdentifier",
																	"src": "23437:12:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "23437:18:19"
															},
															"variableNames": [
																{
																	"name": "length",
																	"nodeType": "YulIdentifier",
																	"src": "23427:6:19"
																}
															]
														},
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "23498:83:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [],
																			"functionName": {
																				"name": "revert_error_1e55d03107e9c4f1b5e21c76a16fba166a461117ab153bcce65e6a4ea8e5fc8a",
																				"nodeType": "YulIdentifier",
																				"src": "23500:77:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "23500:79:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "23500:79:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"name": "length",
																		"nodeType": "YulIdentifier",
																		"src": "23470:6:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "23478:18:19",
																		"type": "",
																		"value": "0xffffffffffffffff"
																	}
																],
																"functionName": {
																	"name": "gt",
																	"nodeType": "YulIdentifier",
																	"src": "23467:2:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "23467:30:19"
															},
															"nodeType": "YulIf",
															"src": "23464:2:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "23590:21:19",
															"value": {
																"arguments": [
																	{
																		"name": "addr",
																		"nodeType": "YulIdentifier",
																		"src": "23602:4:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "23608:2:19",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "23598:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "23598:13:19"
															},
															"variableNames": [
																{
																	"name": "addr",
																	"nodeType": "YulIdentifier",
																	"src": "23590:4:19"
																}
															]
														},
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "23673:83:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [],
																			"functionName": {
																				"name": "revert_error_977805620ff29572292dee35f70b0f3f3f73d3fdd0e9f4d7a901c2e43ab18a2e",
																				"nodeType": "YulIdentifier",
																				"src": "23675:77:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "23675:79:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "23675:79:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"name": "addr",
																		"nodeType": "YulIdentifier",
																		"src": "23627:4:19"
																	},
																	{
																		"arguments": [
																			{
																				"arguments": [],
																				"functionName": {
																					"name": "calldatasize",
																					"nodeType": "YulIdentifier",
																					"src": "23637:12:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "23637:14:19"
																			},
																			{
																				"arguments": [
																					{
																						"name": "length",
																						"nodeType": "YulIdentifier",
																						"src": "23657:6:19"
																					},
																					{
																						"kind": "number",
																						"nodeType": "YulLiteral",
																						"src": "23665:4:19",
																						"type": "",
																						"value": "0x01"
																					}
																				],
																				"functionName": {
																					"name": "mul",
																					"nodeType": "YulIdentifier",
																					"src": "23653:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "23653:17:19"
																			}
																		],
																		"functionName": {
																			"name": "sub",
																			"nodeType": "YulIdentifier",
																			"src": "23633:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "23633:38:19"
																	}
																],
																"functionName": {
																	"name": "sgt",
																	"nodeType": "YulIdentifier",
																	"src": "23623:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "23623:49:19"
															},
															"nodeType": "YulIf",
															"src": "23620:2:19"
														}
													]
												},
												"name": "access_calldata_tail_t_bytes_calldata_ptr",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "base_ref",
														"nodeType": "YulTypedName",
														"src": "23090:8:19",
														"type": ""
													},
													{
														"name": "ptr_to_tail",
														"nodeType": "YulTypedName",
														"src": "23100:11:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "addr",
														"nodeType": "YulTypedName",
														"src": "23116:4:19",
														"type": ""
													},
													{
														"name": "length",
														"nodeType": "YulTypedName",
														"src": "23122:6:19",
														"type": ""
													}
												],
												"src": "23039:724:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "23810:88:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "23820:30:19",
															"value": {
																"arguments": [],
																"functionName": {
																	"name": "allocate_unbounded",
																	"nodeType": "YulIdentifier",
																	"src": "23830:18:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "23830:20:19"
															},
															"variableNames": [
																{
																	"name": "memPtr",
																	"nodeType": "YulIdentifier",
																	"src": "23820:6:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "memPtr",
																		"nodeType": "YulIdentifier",
																		"src": "23879:6:19"
																	},
																	{
																		"name": "size",
																		"nodeType": "YulIdentifier",
																		"src": "23887:4:19"
																	}
																],
																"functionName": {
																	"name": "finalize_allocation",
																	"nodeType": "YulIdentifier",
																	"src": "23859:19:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "23859:33:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "23859:33:19"
														}
													]
												},
												"name": "allocate_memory",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "size",
														"nodeType": "YulTypedName",
														"src": "23794:4:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "memPtr",
														"nodeType": "YulTypedName",
														"src": "23803:6:19",
														"type": ""
													}
												],
												"src": "23769:129:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "23944:35:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "23954:19:19",
															"value": {
																"arguments": [
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "23970:2:19",
																		"type": "",
																		"value": "64"
																	}
																],
																"functionName": {
																	"name": "mload",
																	"nodeType": "YulIdentifier",
																	"src": "23964:5:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "23964:9:19"
															},
															"variableNames": [
																{
																	"name": "memPtr",
																	"nodeType": "YulIdentifier",
																	"src": "23954:6:19"
																}
															]
														}
													]
												},
												"name": "allocate_unbounded",
												"nodeType": "YulFunctionDefinition",
												"returnVariables": [
													{
														"name": "memPtr",
														"nodeType": "YulTypedName",
														"src": "23937:6:19",
														"type": ""
													}
												],
												"src": "23904:75:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "24066:60:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "24076:11:19",
															"value": {
																"name": "ptr",
																"nodeType": "YulIdentifier",
																"src": "24084:3:19"
															},
															"variableNames": [
																{
																	"name": "data",
																	"nodeType": "YulIdentifier",
																	"src": "24076:4:19"
																}
															]
														},
														{
															"nodeType": "YulAssignment",
															"src": "24097:22:19",
															"value": {
																"arguments": [
																	{
																		"name": "ptr",
																		"nodeType": "YulIdentifier",
																		"src": "24109:3:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "24114:4:19",
																		"type": "",
																		"value": "0x20"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "24105:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "24105:14:19"
															},
															"variableNames": [
																{
																	"name": "data",
																	"nodeType": "YulIdentifier",
																	"src": "24097:4:19"
																}
															]
														}
													]
												},
												"name": "array_dataslot_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "ptr",
														"nodeType": "YulTypedName",
														"src": "24053:3:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "data",
														"nodeType": "YulTypedName",
														"src": "24061:4:19",
														"type": ""
													}
												],
												"src": "23985:141:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "24215:40:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "24226:22:19",
															"value": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "24242:5:19"
																	}
																],
																"functionName": {
																	"name": "mload",
																	"nodeType": "YulIdentifier",
																	"src": "24236:5:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "24236:12:19"
															},
															"variableNames": [
																{
																	"name": "length",
																	"nodeType": "YulIdentifier",
																	"src": "24226:6:19"
																}
															]
														}
													]
												},
												"name": "array_length_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "24198:5:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "length",
														"nodeType": "YulTypedName",
														"src": "24208:6:19",
														"type": ""
													}
												],
												"src": "24132:123:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "24319:40:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "24330:22:19",
															"value": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "24346:5:19"
																	}
																],
																"functionName": {
																	"name": "mload",
																	"nodeType": "YulIdentifier",
																	"src": "24340:5:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "24340:12:19"
															},
															"variableNames": [
																{
																	"name": "length",
																	"nodeType": "YulIdentifier",
																	"src": "24330:6:19"
																}
															]
														}
													]
												},
												"name": "array_length_t_bytes_memory_ptr",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "24302:5:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "length",
														"nodeType": "YulTypedName",
														"src": "24312:6:19",
														"type": ""
													}
												],
												"src": "24261:98:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "24424:40:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "24435:22:19",
															"value": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "24451:5:19"
																	}
																],
																"functionName": {
																	"name": "mload",
																	"nodeType": "YulIdentifier",
																	"src": "24445:5:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "24445:12:19"
															},
															"variableNames": [
																{
																	"name": "length",
																	"nodeType": "YulIdentifier",
																	"src": "24435:6:19"
																}
															]
														}
													]
												},
												"name": "array_length_t_string_memory_ptr",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "24407:5:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "length",
														"nodeType": "YulTypedName",
														"src": "24417:6:19",
														"type": ""
													}
												],
												"src": "24365:99:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "24554:38:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "24564:22:19",
															"value": {
																"arguments": [
																	{
																		"name": "ptr",
																		"nodeType": "YulIdentifier",
																		"src": "24576:3:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "24581:4:19",
																		"type": "",
																		"value": "0x20"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "24572:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "24572:14:19"
															},
															"variableNames": [
																{
																	"name": "next",
																	"nodeType": "YulIdentifier",
																	"src": "24564:4:19"
																}
															]
														}
													]
												},
												"name": "array_nextElement_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "ptr",
														"nodeType": "YulTypedName",
														"src": "24541:3:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "next",
														"nodeType": "YulTypedName",
														"src": "24549:4:19",
														"type": ""
													}
												],
												"src": "24470:122:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "24718:73:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "24735:3:19"
																	},
																	{
																		"name": "length",
																		"nodeType": "YulIdentifier",
																		"src": "24740:6:19"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "24728:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "24728:19:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "24728:19:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "24756:29:19",
															"value": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "24775:3:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "24780:4:19",
																		"type": "",
																		"value": "0x20"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "24771:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "24771:14:19"
															},
															"variableNames": [
																{
																	"name": "updated_pos",
																	"nodeType": "YulIdentifier",
																	"src": "24756:11:19"
																}
															]
														}
													]
												},
												"name": "array_storeLengthForEncoding_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_fromStack",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "pos",
														"nodeType": "YulTypedName",
														"src": "24690:3:19",
														"type": ""
													},
													{
														"name": "length",
														"nodeType": "YulTypedName",
														"src": "24695:6:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "updated_pos",
														"nodeType": "YulTypedName",
														"src": "24706:11:19",
														"type": ""
													}
												],
												"src": "24598:193:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "24882:73:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "24899:3:19"
																	},
																	{
																		"name": "length",
																		"nodeType": "YulIdentifier",
																		"src": "24904:6:19"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "24892:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "24892:19:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "24892:19:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "24920:29:19",
															"value": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "24939:3:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "24944:4:19",
																		"type": "",
																		"value": "0x20"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "24935:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "24935:14:19"
															},
															"variableNames": [
																{
																	"name": "updated_pos",
																	"nodeType": "YulIdentifier",
																	"src": "24920:11:19"
																}
															]
														}
													]
												},
												"name": "array_storeLengthForEncoding_t_bytes_memory_ptr",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "pos",
														"nodeType": "YulTypedName",
														"src": "24854:3:19",
														"type": ""
													},
													{
														"name": "length",
														"nodeType": "YulTypedName",
														"src": "24859:6:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "updated_pos",
														"nodeType": "YulTypedName",
														"src": "24870:11:19",
														"type": ""
													}
												],
												"src": "24797:158:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "25074:34:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "25084:18:19",
															"value": {
																"name": "pos",
																"nodeType": "YulIdentifier",
																"src": "25099:3:19"
															},
															"variableNames": [
																{
																	"name": "updated_pos",
																	"nodeType": "YulIdentifier",
																	"src": "25084:11:19"
																}
															]
														}
													]
												},
												"name": "array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "pos",
														"nodeType": "YulTypedName",
														"src": "25046:3:19",
														"type": ""
													},
													{
														"name": "length",
														"nodeType": "YulTypedName",
														"src": "25051:6:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "updated_pos",
														"nodeType": "YulTypedName",
														"src": "25062:11:19",
														"type": ""
													}
												],
												"src": "24961:147:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "25210:73:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "25227:3:19"
																	},
																	{
																		"name": "length",
																		"nodeType": "YulIdentifier",
																		"src": "25232:6:19"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "25220:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "25220:19:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "25220:19:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "25248:29:19",
															"value": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "25267:3:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "25272:4:19",
																		"type": "",
																		"value": "0x20"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "25263:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "25263:14:19"
															},
															"variableNames": [
																{
																	"name": "updated_pos",
																	"nodeType": "YulIdentifier",
																	"src": "25248:11:19"
																}
															]
														}
													]
												},
												"name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "pos",
														"nodeType": "YulTypedName",
														"src": "25182:3:19",
														"type": ""
													},
													{
														"name": "length",
														"nodeType": "YulTypedName",
														"src": "25187:6:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "updated_pos",
														"nodeType": "YulTypedName",
														"src": "25198:11:19",
														"type": ""
													}
												],
												"src": "25114:169:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "25333:261:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "25343:25:19",
															"value": {
																"arguments": [
																	{
																		"name": "x",
																		"nodeType": "YulIdentifier",
																		"src": "25366:1:19"
																	}
																],
																"functionName": {
																	"name": "cleanup_t_uint256",
																	"nodeType": "YulIdentifier",
																	"src": "25348:17:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "25348:20:19"
															},
															"variableNames": [
																{
																	"name": "x",
																	"nodeType": "YulIdentifier",
																	"src": "25343:1:19"
																}
															]
														},
														{
															"nodeType": "YulAssignment",
															"src": "25377:25:19",
															"value": {
																"arguments": [
																	{
																		"name": "y",
																		"nodeType": "YulIdentifier",
																		"src": "25400:1:19"
																	}
																],
																"functionName": {
																	"name": "cleanup_t_uint256",
																	"nodeType": "YulIdentifier",
																	"src": "25382:17:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "25382:20:19"
															},
															"variableNames": [
																{
																	"name": "y",
																	"nodeType": "YulIdentifier",
																	"src": "25377:1:19"
																}
															]
														},
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "25540:22:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [],
																			"functionName": {
																				"name": "panic_error_0x11",
																				"nodeType": "YulIdentifier",
																				"src": "25542:16:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "25542:18:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "25542:18:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"name": "x",
																		"nodeType": "YulIdentifier",
																		"src": "25461:1:19"
																	},
																	{
																		"arguments": [
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "25468:66:19",
																				"type": "",
																				"value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
																			},
																			{
																				"name": "y",
																				"nodeType": "YulIdentifier",
																				"src": "25536:1:19"
																			}
																		],
																		"functionName": {
																			"name": "sub",
																			"nodeType": "YulIdentifier",
																			"src": "25464:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "25464:74:19"
																	}
																],
																"functionName": {
																	"name": "gt",
																	"nodeType": "YulIdentifier",
																	"src": "25458:2:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "25458:81:19"
															},
															"nodeType": "YulIf",
															"src": "25455:2:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "25572:16:19",
															"value": {
																"arguments": [
																	{
																		"name": "x",
																		"nodeType": "YulIdentifier",
																		"src": "25583:1:19"
																	},
																	{
																		"name": "y",
																		"nodeType": "YulIdentifier",
																		"src": "25586:1:19"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "25579:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "25579:9:19"
															},
															"variableNames": [
																{
																	"name": "sum",
																	"nodeType": "YulIdentifier",
																	"src": "25572:3:19"
																}
															]
														}
													]
												},
												"name": "checked_add_t_uint256",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "x",
														"nodeType": "YulTypedName",
														"src": "25320:1:19",
														"type": ""
													},
													{
														"name": "y",
														"nodeType": "YulTypedName",
														"src": "25323:1:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "sum",
														"nodeType": "YulTypedName",
														"src": "25329:3:19",
														"type": ""
													}
												],
												"src": "25289:305:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "25642:143:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "25652:25:19",
															"value": {
																"arguments": [
																	{
																		"name": "x",
																		"nodeType": "YulIdentifier",
																		"src": "25675:1:19"
																	}
																],
																"functionName": {
																	"name": "cleanup_t_uint256",
																	"nodeType": "YulIdentifier",
																	"src": "25657:17:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "25657:20:19"
															},
															"variableNames": [
																{
																	"name": "x",
																	"nodeType": "YulIdentifier",
																	"src": "25652:1:19"
																}
															]
														},
														{
															"nodeType": "YulAssignment",
															"src": "25686:25:19",
															"value": {
																"arguments": [
																	{
																		"name": "y",
																		"nodeType": "YulIdentifier",
																		"src": "25709:1:19"
																	}
																],
																"functionName": {
																	"name": "cleanup_t_uint256",
																	"nodeType": "YulIdentifier",
																	"src": "25691:17:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "25691:20:19"
															},
															"variableNames": [
																{
																	"name": "y",
																	"nodeType": "YulIdentifier",
																	"src": "25686:1:19"
																}
															]
														},
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "25733:22:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [],
																			"functionName": {
																				"name": "panic_error_0x12",
																				"nodeType": "YulIdentifier",
																				"src": "25735:16:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "25735:18:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "25735:18:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"name": "y",
																		"nodeType": "YulIdentifier",
																		"src": "25730:1:19"
																	}
																],
																"functionName": {
																	"name": "iszero",
																	"nodeType": "YulIdentifier",
																	"src": "25723:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "25723:9:19"
															},
															"nodeType": "YulIf",
															"src": "25720:2:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "25765:14:19",
															"value": {
																"arguments": [
																	{
																		"name": "x",
																		"nodeType": "YulIdentifier",
																		"src": "25774:1:19"
																	},
																	{
																		"name": "y",
																		"nodeType": "YulIdentifier",
																		"src": "25777:1:19"
																	}
																],
																"functionName": {
																	"name": "div",
																	"nodeType": "YulIdentifier",
																	"src": "25770:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "25770:9:19"
															},
															"variableNames": [
																{
																	"name": "r",
																	"nodeType": "YulIdentifier",
																	"src": "25765:1:19"
																}
															]
														}
													]
												},
												"name": "checked_div_t_uint256",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "x",
														"nodeType": "YulTypedName",
														"src": "25631:1:19",
														"type": ""
													},
													{
														"name": "y",
														"nodeType": "YulTypedName",
														"src": "25634:1:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "r",
														"nodeType": "YulTypedName",
														"src": "25640:1:19",
														"type": ""
													}
												],
												"src": "25600:185:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "25839:300:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "25849:25:19",
															"value": {
																"arguments": [
																	{
																		"name": "x",
																		"nodeType": "YulIdentifier",
																		"src": "25872:1:19"
																	}
																],
																"functionName": {
																	"name": "cleanup_t_uint256",
																	"nodeType": "YulIdentifier",
																	"src": "25854:17:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "25854:20:19"
															},
															"variableNames": [
																{
																	"name": "x",
																	"nodeType": "YulIdentifier",
																	"src": "25849:1:19"
																}
															]
														},
														{
															"nodeType": "YulAssignment",
															"src": "25883:25:19",
															"value": {
																"arguments": [
																	{
																		"name": "y",
																		"nodeType": "YulIdentifier",
																		"src": "25906:1:19"
																	}
																],
																"functionName": {
																	"name": "cleanup_t_uint256",
																	"nodeType": "YulIdentifier",
																	"src": "25888:17:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "25888:20:19"
															},
															"variableNames": [
																{
																	"name": "y",
																	"nodeType": "YulIdentifier",
																	"src": "25883:1:19"
																}
															]
														},
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "26081:22:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [],
																			"functionName": {
																				"name": "panic_error_0x11",
																				"nodeType": "YulIdentifier",
																				"src": "26083:16:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "26083:18:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "26083:18:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "x",
																						"nodeType": "YulIdentifier",
																						"src": "25993:1:19"
																					}
																				],
																				"functionName": {
																					"name": "iszero",
																					"nodeType": "YulIdentifier",
																					"src": "25986:6:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "25986:9:19"
																			}
																		],
																		"functionName": {
																			"name": "iszero",
																			"nodeType": "YulIdentifier",
																			"src": "25979:6:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "25979:17:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "y",
																				"nodeType": "YulIdentifier",
																				"src": "26001:1:19"
																			},
																			{
																				"arguments": [
																					{
																						"kind": "number",
																						"nodeType": "YulLiteral",
																						"src": "26008:66:19",
																						"type": "",
																						"value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
																					},
																					{
																						"name": "x",
																						"nodeType": "YulIdentifier",
																						"src": "26076:1:19"
																					}
																				],
																				"functionName": {
																					"name": "div",
																					"nodeType": "YulIdentifier",
																					"src": "26004:3:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "26004:74:19"
																			}
																		],
																		"functionName": {
																			"name": "gt",
																			"nodeType": "YulIdentifier",
																			"src": "25998:2:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "25998:81:19"
																	}
																],
																"functionName": {
																	"name": "and",
																	"nodeType": "YulIdentifier",
																	"src": "25975:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "25975:105:19"
															},
															"nodeType": "YulIf",
															"src": "25972:2:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "26113:20:19",
															"value": {
																"arguments": [
																	{
																		"name": "x",
																		"nodeType": "YulIdentifier",
																		"src": "26128:1:19"
																	},
																	{
																		"name": "y",
																		"nodeType": "YulIdentifier",
																		"src": "26131:1:19"
																	}
																],
																"functionName": {
																	"name": "mul",
																	"nodeType": "YulIdentifier",
																	"src": "26124:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "26124:9:19"
															},
															"variableNames": [
																{
																	"name": "product",
																	"nodeType": "YulIdentifier",
																	"src": "26113:7:19"
																}
															]
														}
													]
												},
												"name": "checked_mul_t_uint256",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "x",
														"nodeType": "YulTypedName",
														"src": "25822:1:19",
														"type": ""
													},
													{
														"name": "y",
														"nodeType": "YulTypedName",
														"src": "25825:1:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "product",
														"nodeType": "YulTypedName",
														"src": "25831:7:19",
														"type": ""
													}
												],
												"src": "25791:348:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "26190:146:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "26200:25:19",
															"value": {
																"arguments": [
																	{
																		"name": "x",
																		"nodeType": "YulIdentifier",
																		"src": "26223:1:19"
																	}
																],
																"functionName": {
																	"name": "cleanup_t_uint256",
																	"nodeType": "YulIdentifier",
																	"src": "26205:17:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "26205:20:19"
															},
															"variableNames": [
																{
																	"name": "x",
																	"nodeType": "YulIdentifier",
																	"src": "26200:1:19"
																}
															]
														},
														{
															"nodeType": "YulAssignment",
															"src": "26234:25:19",
															"value": {
																"arguments": [
																	{
																		"name": "y",
																		"nodeType": "YulIdentifier",
																		"src": "26257:1:19"
																	}
																],
																"functionName": {
																	"name": "cleanup_t_uint256",
																	"nodeType": "YulIdentifier",
																	"src": "26239:17:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "26239:20:19"
															},
															"variableNames": [
																{
																	"name": "y",
																	"nodeType": "YulIdentifier",
																	"src": "26234:1:19"
																}
															]
														},
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "26281:22:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [],
																			"functionName": {
																				"name": "panic_error_0x11",
																				"nodeType": "YulIdentifier",
																				"src": "26283:16:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "26283:18:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "26283:18:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"name": "x",
																		"nodeType": "YulIdentifier",
																		"src": "26275:1:19"
																	},
																	{
																		"name": "y",
																		"nodeType": "YulIdentifier",
																		"src": "26278:1:19"
																	}
																],
																"functionName": {
																	"name": "lt",
																	"nodeType": "YulIdentifier",
																	"src": "26272:2:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "26272:8:19"
															},
															"nodeType": "YulIf",
															"src": "26269:2:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "26313:17:19",
															"value": {
																"arguments": [
																	{
																		"name": "x",
																		"nodeType": "YulIdentifier",
																		"src": "26325:1:19"
																	},
																	{
																		"name": "y",
																		"nodeType": "YulIdentifier",
																		"src": "26328:1:19"
																	}
																],
																"functionName": {
																	"name": "sub",
																	"nodeType": "YulIdentifier",
																	"src": "26321:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "26321:9:19"
															},
															"variableNames": [
																{
																	"name": "diff",
																	"nodeType": "YulIdentifier",
																	"src": "26313:4:19"
																}
															]
														}
													]
												},
												"name": "checked_sub_t_uint256",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "x",
														"nodeType": "YulTypedName",
														"src": "26176:1:19",
														"type": ""
													},
													{
														"name": "y",
														"nodeType": "YulTypedName",
														"src": "26179:1:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "diff",
														"nodeType": "YulTypedName",
														"src": "26185:4:19",
														"type": ""
													}
												],
												"src": "26145:191:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "26387:51:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "26397:35:19",
															"value": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "26426:5:19"
																	}
																],
																"functionName": {
																	"name": "cleanup_t_uint160",
																	"nodeType": "YulIdentifier",
																	"src": "26408:17:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "26408:24:19"
															},
															"variableNames": [
																{
																	"name": "cleaned",
																	"nodeType": "YulIdentifier",
																	"src": "26397:7:19"
																}
															]
														}
													]
												},
												"name": "cleanup_t_address",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "26369:5:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "cleaned",
														"nodeType": "YulTypedName",
														"src": "26379:7:19",
														"type": ""
													}
												],
												"src": "26342:96:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "26486:48:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "26496:32:19",
															"value": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "value",
																				"nodeType": "YulIdentifier",
																				"src": "26521:5:19"
																			}
																		],
																		"functionName": {
																			"name": "iszero",
																			"nodeType": "YulIdentifier",
																			"src": "26514:6:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "26514:13:19"
																	}
																],
																"functionName": {
																	"name": "iszero",
																	"nodeType": "YulIdentifier",
																	"src": "26507:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "26507:21:19"
															},
															"variableNames": [
																{
																	"name": "cleaned",
																	"nodeType": "YulIdentifier",
																	"src": "26496:7:19"
																}
															]
														}
													]
												},
												"name": "cleanup_t_bool",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "26468:5:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "cleaned",
														"nodeType": "YulTypedName",
														"src": "26478:7:19",
														"type": ""
													}
												],
												"src": "26444:90:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "26598:51:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "26608:35:19",
															"value": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "26637:5:19"
																	}
																],
																"functionName": {
																	"name": "cleanup_t_address",
																	"nodeType": "YulIdentifier",
																	"src": "26619:17:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "26619:24:19"
															},
															"variableNames": [
																{
																	"name": "cleaned",
																	"nodeType": "YulIdentifier",
																	"src": "26608:7:19"
																}
															]
														}
													]
												},
												"name": "cleanup_t_contract$_IERC20_$77",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "26580:5:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "cleaned",
														"nodeType": "YulTypedName",
														"src": "26590:7:19",
														"type": ""
													}
												],
												"src": "26540:109:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "26719:51:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "26729:35:19",
															"value": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "26758:5:19"
																	}
																],
																"functionName": {
																	"name": "cleanup_t_address",
																	"nodeType": "YulIdentifier",
																	"src": "26740:17:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "26740:24:19"
															},
															"variableNames": [
																{
																	"name": "cleaned",
																	"nodeType": "YulIdentifier",
																	"src": "26729:7:19"
																}
															]
														}
													]
												},
												"name": "cleanup_t_contract$_IPrizePool_$3970",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "26701:5:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "cleaned",
														"nodeType": "YulTypedName",
														"src": "26711:7:19",
														"type": ""
													}
												],
												"src": "26655:115:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "26837:51:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "26847:35:19",
															"value": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "26876:5:19"
																	}
																],
																"functionName": {
																	"name": "cleanup_t_address",
																	"nodeType": "YulIdentifier",
																	"src": "26858:17:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "26858:24:19"
															},
															"variableNames": [
																{
																	"name": "cleaned",
																	"nodeType": "YulIdentifier",
																	"src": "26847:7:19"
																}
															]
														}
													]
												},
												"name": "cleanup_t_contract$_ITicket_$4186",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "26819:5:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "cleaned",
														"nodeType": "YulTypedName",
														"src": "26829:7:19",
														"type": ""
													}
												],
												"src": "26776:112:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "26939:81:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "26949:65:19",
															"value": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "26964:5:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "26971:42:19",
																		"type": "",
																		"value": "0xffffffffffffffffffffffffffffffffffffffff"
																	}
																],
																"functionName": {
																	"name": "and",
																	"nodeType": "YulIdentifier",
																	"src": "26960:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "26960:54:19"
															},
															"variableNames": [
																{
																	"name": "cleaned",
																	"nodeType": "YulIdentifier",
																	"src": "26949:7:19"
																}
															]
														}
													]
												},
												"name": "cleanup_t_uint160",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "26921:5:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "cleaned",
														"nodeType": "YulTypedName",
														"src": "26931:7:19",
														"type": ""
													}
												],
												"src": "26894:126:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "27071:32:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "27081:16:19",
															"value": {
																"name": "value",
																"nodeType": "YulIdentifier",
																"src": "27092:5:19"
															},
															"variableNames": [
																{
																	"name": "cleaned",
																	"nodeType": "YulIdentifier",
																	"src": "27081:7:19"
																}
															]
														}
													]
												},
												"name": "cleanup_t_uint256",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "27053:5:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "cleaned",
														"nodeType": "YulTypedName",
														"src": "27063:7:19",
														"type": ""
													}
												],
												"src": "27026:77:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "27153:49:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "27163:33:19",
															"value": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "27178:5:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "27185:10:19",
																		"type": "",
																		"value": "0xffffffff"
																	}
																],
																"functionName": {
																	"name": "and",
																	"nodeType": "YulIdentifier",
																	"src": "27174:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "27174:22:19"
															},
															"variableNames": [
																{
																	"name": "cleaned",
																	"nodeType": "YulIdentifier",
																	"src": "27163:7:19"
																}
															]
														}
													]
												},
												"name": "cleanup_t_uint32",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "27135:5:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "cleaned",
														"nodeType": "YulTypedName",
														"src": "27145:7:19",
														"type": ""
													}
												],
												"src": "27109:93:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "27252:57:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "27262:41:19",
															"value": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "27277:5:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "27284:18:19",
																		"type": "",
																		"value": "0xffffffffffffffff"
																	}
																],
																"functionName": {
																	"name": "and",
																	"nodeType": "YulIdentifier",
																	"src": "27273:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "27273:30:19"
															},
															"variableNames": [
																{
																	"name": "cleaned",
																	"nodeType": "YulIdentifier",
																	"src": "27262:7:19"
																}
															]
														}
													]
												},
												"name": "cleanup_t_uint64",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "27234:5:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "cleaned",
														"nodeType": "YulTypedName",
														"src": "27244:7:19",
														"type": ""
													}
												],
												"src": "27208:101:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "27388:79:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "27398:63:19",
															"value": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "27455:5:19"
																	}
																],
																"functionName": {
																	"name": "convert_t_contract$_IERC20_$77_to_t_uint160",
																	"nodeType": "YulIdentifier",
																	"src": "27411:43:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "27411:50:19"
															},
															"variableNames": [
																{
																	"name": "converted",
																	"nodeType": "YulIdentifier",
																	"src": "27398:9:19"
																}
															]
														}
													]
												},
												"name": "convert_t_contract$_IERC20_$77_to_t_address",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "27368:5:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "converted",
														"nodeType": "YulTypedName",
														"src": "27378:9:19",
														"type": ""
													}
												],
												"src": "27315:152:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "27546:53:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "27556:37:19",
															"value": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "27587:5:19"
																	}
																],
																"functionName": {
																	"name": "cleanup_t_uint160",
																	"nodeType": "YulIdentifier",
																	"src": "27569:17:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "27569:24:19"
															},
															"variableNames": [
																{
																	"name": "converted",
																	"nodeType": "YulIdentifier",
																	"src": "27556:9:19"
																}
															]
														}
													]
												},
												"name": "convert_t_contract$_IERC20_$77_to_t_uint160",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "27526:5:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "converted",
														"nodeType": "YulTypedName",
														"src": "27536:9:19",
														"type": ""
													}
												],
												"src": "27473:126:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "27690:91:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "27700:75:19",
															"value": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "27769:5:19"
																	}
																],
																"functionName": {
																	"name": "convert_t_contract$_IGaugeController_$3664_to_t_uint160",
																	"nodeType": "YulIdentifier",
																	"src": "27713:55:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "27713:62:19"
															},
															"variableNames": [
																{
																	"name": "converted",
																	"nodeType": "YulIdentifier",
																	"src": "27700:9:19"
																}
															]
														}
													]
												},
												"name": "convert_t_contract$_IGaugeController_$3664_to_t_address",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "27670:5:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "converted",
														"nodeType": "YulTypedName",
														"src": "27680:9:19",
														"type": ""
													}
												],
												"src": "27605:176:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "27872:53:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "27882:37:19",
															"value": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "27913:5:19"
																	}
																],
																"functionName": {
																	"name": "cleanup_t_uint160",
																	"nodeType": "YulIdentifier",
																	"src": "27895:17:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "27895:24:19"
															},
															"variableNames": [
																{
																	"name": "converted",
																	"nodeType": "YulIdentifier",
																	"src": "27882:9:19"
																}
															]
														}
													]
												},
												"name": "convert_t_contract$_IGaugeController_$3664_to_t_uint160",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "27852:5:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "converted",
														"nodeType": "YulTypedName",
														"src": "27862:9:19",
														"type": ""
													}
												],
												"src": "27787:138:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "27980:258:19",
													"statements": [
														{
															"nodeType": "YulVariableDeclaration",
															"src": "27990:10:19",
															"value": {
																"kind": "number",
																"nodeType": "YulLiteral",
																"src": "27999:1:19",
																"type": "",
																"value": "0"
															},
															"variables": [
																{
																	"name": "i",
																	"nodeType": "YulTypedName",
																	"src": "27994:1:19",
																	"type": ""
																}
															]
														},
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "28059:63:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [
																				{
																					"arguments": [
																						{
																							"name": "dst",
																							"nodeType": "YulIdentifier",
																							"src": "28084:3:19"
																						},
																						{
																							"name": "i",
																							"nodeType": "YulIdentifier",
																							"src": "28089:1:19"
																						}
																					],
																					"functionName": {
																						"name": "add",
																						"nodeType": "YulIdentifier",
																						"src": "28080:3:19"
																					},
																					"nodeType": "YulFunctionCall",
																					"src": "28080:11:19"
																				},
																				{
																					"arguments": [
																						{
																							"arguments": [
																								{
																									"name": "src",
																									"nodeType": "YulIdentifier",
																									"src": "28103:3:19"
																								},
																								{
																									"name": "i",
																									"nodeType": "YulIdentifier",
																									"src": "28108:1:19"
																								}
																							],
																							"functionName": {
																								"name": "add",
																								"nodeType": "YulIdentifier",
																								"src": "28099:3:19"
																							},
																							"nodeType": "YulFunctionCall",
																							"src": "28099:11:19"
																						}
																					],
																					"functionName": {
																						"name": "mload",
																						"nodeType": "YulIdentifier",
																						"src": "28093:5:19"
																					},
																					"nodeType": "YulFunctionCall",
																					"src": "28093:18:19"
																				}
																			],
																			"functionName": {
																				"name": "mstore",
																				"nodeType": "YulIdentifier",
																				"src": "28073:6:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "28073:39:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "28073:39:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"name": "i",
																		"nodeType": "YulIdentifier",
																		"src": "28020:1:19"
																	},
																	{
																		"name": "length",
																		"nodeType": "YulIdentifier",
																		"src": "28023:6:19"
																	}
																],
																"functionName": {
																	"name": "lt",
																	"nodeType": "YulIdentifier",
																	"src": "28017:2:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "28017:13:19"
															},
															"nodeType": "YulForLoop",
															"post": {
																"nodeType": "YulBlock",
																"src": "28031:19:19",
																"statements": [
																	{
																		"nodeType": "YulAssignment",
																		"src": "28033:15:19",
																		"value": {
																			"arguments": [
																				{
																					"name": "i",
																					"nodeType": "YulIdentifier",
																					"src": "28042:1:19"
																				},
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "28045:2:19",
																					"type": "",
																					"value": "32"
																				}
																			],
																			"functionName": {
																				"name": "add",
																				"nodeType": "YulIdentifier",
																				"src": "28038:3:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "28038:10:19"
																		},
																		"variableNames": [
																			{
																				"name": "i",
																				"nodeType": "YulIdentifier",
																				"src": "28033:1:19"
																			}
																		]
																	}
																]
															},
															"pre": {
																"nodeType": "YulBlock",
																"src": "28013:3:19",
																"statements": []
															},
															"src": "28009:113:19"
														},
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "28156:76:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [
																				{
																					"arguments": [
																						{
																							"name": "dst",
																							"nodeType": "YulIdentifier",
																							"src": "28206:3:19"
																						},
																						{
																							"name": "length",
																							"nodeType": "YulIdentifier",
																							"src": "28211:6:19"
																						}
																					],
																					"functionName": {
																						"name": "add",
																						"nodeType": "YulIdentifier",
																						"src": "28202:3:19"
																					},
																					"nodeType": "YulFunctionCall",
																					"src": "28202:16:19"
																				},
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "28220:1:19",
																					"type": "",
																					"value": "0"
																				}
																			],
																			"functionName": {
																				"name": "mstore",
																				"nodeType": "YulIdentifier",
																				"src": "28195:6:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "28195:27:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "28195:27:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"name": "i",
																		"nodeType": "YulIdentifier",
																		"src": "28137:1:19"
																	},
																	{
																		"name": "length",
																		"nodeType": "YulIdentifier",
																		"src": "28140:6:19"
																	}
																],
																"functionName": {
																	"name": "gt",
																	"nodeType": "YulIdentifier",
																	"src": "28134:2:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "28134:13:19"
															},
															"nodeType": "YulIf",
															"src": "28131:2:19"
														}
													]
												},
												"name": "copy_memory_to_memory",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "src",
														"nodeType": "YulTypedName",
														"src": "27962:3:19",
														"type": ""
													},
													{
														"name": "dst",
														"nodeType": "YulTypedName",
														"src": "27967:3:19",
														"type": ""
													},
													{
														"name": "length",
														"nodeType": "YulTypedName",
														"src": "27972:6:19",
														"type": ""
													}
												],
												"src": "27931:307:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "28287:238:19",
													"statements": [
														{
															"nodeType": "YulVariableDeclaration",
															"src": "28297:58:19",
															"value": {
																"arguments": [
																	{
																		"name": "memPtr",
																		"nodeType": "YulIdentifier",
																		"src": "28319:6:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "size",
																				"nodeType": "YulIdentifier",
																				"src": "28349:4:19"
																			}
																		],
																		"functionName": {
																			"name": "round_up_to_mul_of_32",
																			"nodeType": "YulIdentifier",
																			"src": "28327:21:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "28327:27:19"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "28315:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "28315:40:19"
															},
															"variables": [
																{
																	"name": "newFreePtr",
																	"nodeType": "YulTypedName",
																	"src": "28301:10:19",
																	"type": ""
																}
															]
														},
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "28466:22:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [],
																			"functionName": {
																				"name": "panic_error_0x41",
																				"nodeType": "YulIdentifier",
																				"src": "28468:16:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "28468:18:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "28468:18:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "newFreePtr",
																				"nodeType": "YulIdentifier",
																				"src": "28409:10:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "28421:18:19",
																				"type": "",
																				"value": "0xffffffffffffffff"
																			}
																		],
																		"functionName": {
																			"name": "gt",
																			"nodeType": "YulIdentifier",
																			"src": "28406:2:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "28406:34:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "newFreePtr",
																				"nodeType": "YulIdentifier",
																				"src": "28445:10:19"
																			},
																			{
																				"name": "memPtr",
																				"nodeType": "YulIdentifier",
																				"src": "28457:6:19"
																			}
																		],
																		"functionName": {
																			"name": "lt",
																			"nodeType": "YulIdentifier",
																			"src": "28442:2:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "28442:22:19"
																	}
																],
																"functionName": {
																	"name": "or",
																	"nodeType": "YulIdentifier",
																	"src": "28403:2:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "28403:62:19"
															},
															"nodeType": "YulIf",
															"src": "28400:2:19"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "28504:2:19",
																		"type": "",
																		"value": "64"
																	},
																	{
																		"name": "newFreePtr",
																		"nodeType": "YulIdentifier",
																		"src": "28508:10:19"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "28497:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "28497:22:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "28497:22:19"
														}
													]
												},
												"name": "finalize_allocation",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "memPtr",
														"nodeType": "YulTypedName",
														"src": "28273:6:19",
														"type": ""
													},
													{
														"name": "size",
														"nodeType": "YulTypedName",
														"src": "28281:4:19",
														"type": ""
													}
												],
												"src": "28244:281:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "28574:190:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "28584:33:19",
															"value": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "28611:5:19"
																	}
																],
																"functionName": {
																	"name": "cleanup_t_uint256",
																	"nodeType": "YulIdentifier",
																	"src": "28593:17:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "28593:24:19"
															},
															"variableNames": [
																{
																	"name": "value",
																	"nodeType": "YulIdentifier",
																	"src": "28584:5:19"
																}
															]
														},
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "28707:22:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [],
																			"functionName": {
																				"name": "panic_error_0x11",
																				"nodeType": "YulIdentifier",
																				"src": "28709:16:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "28709:18:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "28709:18:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "28632:5:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "28639:66:19",
																		"type": "",
																		"value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
																	}
																],
																"functionName": {
																	"name": "eq",
																	"nodeType": "YulIdentifier",
																	"src": "28629:2:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "28629:77:19"
															},
															"nodeType": "YulIf",
															"src": "28626:2:19"
														},
														{
															"nodeType": "YulAssignment",
															"src": "28738:20:19",
															"value": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "28749:5:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "28756:1:19",
																		"type": "",
																		"value": "1"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "28745:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "28745:13:19"
															},
															"variableNames": [
																{
																	"name": "ret",
																	"nodeType": "YulIdentifier",
																	"src": "28738:3:19"
																}
															]
														}
													]
												},
												"name": "increment_t_uint256",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "28560:5:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "ret",
														"nodeType": "YulTypedName",
														"src": "28570:3:19",
														"type": ""
													}
												],
												"src": "28531:233:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "28798:152:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "28815:1:19",
																		"type": "",
																		"value": "0"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "28818:77:19",
																		"type": "",
																		"value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "28808:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "28808:88:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "28808:88:19"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "28912:1:19",
																		"type": "",
																		"value": "4"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "28915:4:19",
																		"type": "",
																		"value": "0x11"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "28905:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "28905:15:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "28905:15:19"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "28936:1:19",
																		"type": "",
																		"value": "0"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "28939:4:19",
																		"type": "",
																		"value": "0x24"
																	}
																],
																"functionName": {
																	"name": "revert",
																	"nodeType": "YulIdentifier",
																	"src": "28929:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "28929:15:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "28929:15:19"
														}
													]
												},
												"name": "panic_error_0x11",
												"nodeType": "YulFunctionDefinition",
												"src": "28770:180:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "28984:152:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "29001:1:19",
																		"type": "",
																		"value": "0"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "29004:77:19",
																		"type": "",
																		"value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "28994:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "28994:88:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "28994:88:19"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "29098:1:19",
																		"type": "",
																		"value": "4"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "29101:4:19",
																		"type": "",
																		"value": "0x12"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "29091:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "29091:15:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "29091:15:19"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "29122:1:19",
																		"type": "",
																		"value": "0"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "29125:4:19",
																		"type": "",
																		"value": "0x24"
																	}
																],
																"functionName": {
																	"name": "revert",
																	"nodeType": "YulIdentifier",
																	"src": "29115:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "29115:15:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "29115:15:19"
														}
													]
												},
												"name": "panic_error_0x12",
												"nodeType": "YulFunctionDefinition",
												"src": "28956:180:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "29170:152:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "29187:1:19",
																		"type": "",
																		"value": "0"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "29190:77:19",
																		"type": "",
																		"value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "29180:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "29180:88:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "29180:88:19"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "29284:1:19",
																		"type": "",
																		"value": "4"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "29287:4:19",
																		"type": "",
																		"value": "0x32"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "29277:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "29277:15:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "29277:15:19"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "29308:1:19",
																		"type": "",
																		"value": "0"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "29311:4:19",
																		"type": "",
																		"value": "0x24"
																	}
																],
																"functionName": {
																	"name": "revert",
																	"nodeType": "YulIdentifier",
																	"src": "29301:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "29301:15:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "29301:15:19"
														}
													]
												},
												"name": "panic_error_0x32",
												"nodeType": "YulFunctionDefinition",
												"src": "29142:180:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "29356:152:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "29373:1:19",
																		"type": "",
																		"value": "0"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "29376:77:19",
																		"type": "",
																		"value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "29366:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "29366:88:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "29366:88:19"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "29470:1:19",
																		"type": "",
																		"value": "4"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "29473:4:19",
																		"type": "",
																		"value": "0x41"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "29463:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "29463:15:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "29463:15:19"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "29494:1:19",
																		"type": "",
																		"value": "0"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "29497:4:19",
																		"type": "",
																		"value": "0x24"
																	}
																],
																"functionName": {
																	"name": "revert",
																	"nodeType": "YulIdentifier",
																	"src": "29487:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "29487:15:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "29487:15:19"
														}
													]
												},
												"name": "panic_error_0x41",
												"nodeType": "YulFunctionDefinition",
												"src": "29328:180:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "29603:28:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "29620:1:19",
																		"type": "",
																		"value": "0"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "29623:1:19",
																		"type": "",
																		"value": "0"
																	}
																],
																"functionName": {
																	"name": "revert",
																	"nodeType": "YulIdentifier",
																	"src": "29613:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "29613:12:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "29613:12:19"
														}
													]
												},
												"name": "revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490",
												"nodeType": "YulFunctionDefinition",
												"src": "29514:117:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "29726:28:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "29743:1:19",
																		"type": "",
																		"value": "0"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "29746:1:19",
																		"type": "",
																		"value": "0"
																	}
																],
																"functionName": {
																	"name": "revert",
																	"nodeType": "YulIdentifier",
																	"src": "29736:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "29736:12:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "29736:12:19"
														}
													]
												},
												"name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d",
												"nodeType": "YulFunctionDefinition",
												"src": "29637:117:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "29849:28:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "29866:1:19",
																		"type": "",
																		"value": "0"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "29869:1:19",
																		"type": "",
																		"value": "0"
																	}
																],
																"functionName": {
																	"name": "revert",
																	"nodeType": "YulIdentifier",
																	"src": "29859:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "29859:12:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "29859:12:19"
														}
													]
												},
												"name": "revert_error_1e55d03107e9c4f1b5e21c76a16fba166a461117ab153bcce65e6a4ea8e5fc8a",
												"nodeType": "YulFunctionDefinition",
												"src": "29760:117:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "29972:28:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "29989:1:19",
																		"type": "",
																		"value": "0"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "29992:1:19",
																		"type": "",
																		"value": "0"
																	}
																],
																"functionName": {
																	"name": "revert",
																	"nodeType": "YulIdentifier",
																	"src": "29982:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "29982:12:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "29982:12:19"
														}
													]
												},
												"name": "revert_error_3538a459e4a0eb828f1aed5ebe5dc96fe59620a31d9b33e41259bb820cae769f",
												"nodeType": "YulFunctionDefinition",
												"src": "29883:117:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "30095:28:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "30112:1:19",
																		"type": "",
																		"value": "0"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "30115:1:19",
																		"type": "",
																		"value": "0"
																	}
																],
																"functionName": {
																	"name": "revert",
																	"nodeType": "YulIdentifier",
																	"src": "30105:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "30105:12:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "30105:12:19"
														}
													]
												},
												"name": "revert_error_356d538aaf70fba12156cc466564b792649f8f3befb07b071c91142253e175ad",
												"nodeType": "YulFunctionDefinition",
												"src": "30006:117:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "30218:28:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "30235:1:19",
																		"type": "",
																		"value": "0"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "30238:1:19",
																		"type": "",
																		"value": "0"
																	}
																],
																"functionName": {
																	"name": "revert",
																	"nodeType": "YulIdentifier",
																	"src": "30228:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "30228:12:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "30228:12:19"
														}
													]
												},
												"name": "revert_error_5e8f644817bc4960744f35c15999b6eff64ae702f94b1c46297cfd4e1aec2421",
												"nodeType": "YulFunctionDefinition",
												"src": "30129:117:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "30341:28:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "30358:1:19",
																		"type": "",
																		"value": "0"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "30361:1:19",
																		"type": "",
																		"value": "0"
																	}
																],
																"functionName": {
																	"name": "revert",
																	"nodeType": "YulIdentifier",
																	"src": "30351:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "30351:12:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "30351:12:19"
														}
													]
												},
												"name": "revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef",
												"nodeType": "YulFunctionDefinition",
												"src": "30252:117:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "30464:28:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "30481:1:19",
																		"type": "",
																		"value": "0"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "30484:1:19",
																		"type": "",
																		"value": "0"
																	}
																],
																"functionName": {
																	"name": "revert",
																	"nodeType": "YulIdentifier",
																	"src": "30474:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "30474:12:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "30474:12:19"
														}
													]
												},
												"name": "revert_error_977805620ff29572292dee35f70b0f3f3f73d3fdd0e9f4d7a901c2e43ab18a2e",
												"nodeType": "YulFunctionDefinition",
												"src": "30375:117:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "30587:28:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "30604:1:19",
																		"type": "",
																		"value": "0"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "30607:1:19",
																		"type": "",
																		"value": "0"
																	}
																],
																"functionName": {
																	"name": "revert",
																	"nodeType": "YulIdentifier",
																	"src": "30597:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "30597:12:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "30597:12:19"
														}
													]
												},
												"name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
												"nodeType": "YulFunctionDefinition",
												"src": "30498:117:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "30710:28:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "30727:1:19",
																		"type": "",
																		"value": "0"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "30730:1:19",
																		"type": "",
																		"value": "0"
																	}
																],
																"functionName": {
																	"name": "revert",
																	"nodeType": "YulIdentifier",
																	"src": "30720:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "30720:12:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "30720:12:19"
														}
													]
												},
												"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
												"nodeType": "YulFunctionDefinition",
												"src": "30621:117:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "30792:54:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "30802:38:19",
															"value": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "value",
																				"nodeType": "YulIdentifier",
																				"src": "30820:5:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "30827:2:19",
																				"type": "",
																				"value": "31"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "30816:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "30816:14:19"
																	},
																	{
																		"arguments": [
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "30836:2:19",
																				"type": "",
																				"value": "31"
																			}
																		],
																		"functionName": {
																			"name": "not",
																			"nodeType": "YulIdentifier",
																			"src": "30832:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "30832:7:19"
																	}
																],
																"functionName": {
																	"name": "and",
																	"nodeType": "YulIdentifier",
																	"src": "30812:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "30812:28:19"
															},
															"variableNames": [
																{
																	"name": "result",
																	"nodeType": "YulIdentifier",
																	"src": "30802:6:19"
																}
															]
														}
													]
												},
												"name": "round_up_to_mul_of_32",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "30775:5:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "result",
														"nodeType": "YulTypedName",
														"src": "30785:6:19",
														"type": ""
													}
												],
												"src": "30744:102:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "30958:67:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "memPtr",
																				"nodeType": "YulIdentifier",
																				"src": "30980:6:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "30988:1:19",
																				"type": "",
																				"value": "0"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "30976:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "30976:14:19"
																	},
																	{
																		"hexValue": "475265776172642f6f6e6c792d6c697175696461746f72",
																		"kind": "string",
																		"nodeType": "YulLiteral",
																		"src": "30992:25:19",
																		"type": "",
																		"value": "GReward/only-liquidator"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "30969:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "30969:49:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "30969:49:19"
														}
													]
												},
												"name": "store_literal_in_memory_3d9aad6f9cafa45f8d5356023189d3e1086a81a6694f72a8006f1b290ec90f41",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "memPtr",
														"nodeType": "YulTypedName",
														"src": "30950:6:19",
														"type": ""
													}
												],
												"src": "30852:173:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "31137:119:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "memPtr",
																				"nodeType": "YulIdentifier",
																				"src": "31159:6:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "31167:1:19",
																				"type": "",
																				"value": "0"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "31155:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "31155:14:19"
																	},
																	{
																		"hexValue": "416464726573733a20696e73756666696369656e742062616c616e636520666f",
																		"kind": "string",
																		"nodeType": "YulLiteral",
																		"src": "31171:34:19",
																		"type": "",
																		"value": "Address: insufficient balance fo"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "31148:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "31148:58:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "31148:58:19"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "memPtr",
																				"nodeType": "YulIdentifier",
																				"src": "31227:6:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "31235:2:19",
																				"type": "",
																				"value": "32"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "31223:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "31223:15:19"
																	},
																	{
																		"hexValue": "722063616c6c",
																		"kind": "string",
																		"nodeType": "YulLiteral",
																		"src": "31240:8:19",
																		"type": "",
																		"value": "r call"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "31216:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "31216:33:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "31216:33:19"
														}
													]
												},
												"name": "store_literal_in_memory_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "memPtr",
														"nodeType": "YulTypedName",
														"src": "31129:6:19",
														"type": ""
													}
												],
												"src": "31031:225:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "31368:119:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "memPtr",
																				"nodeType": "YulIdentifier",
																				"src": "31390:6:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "31398:1:19",
																				"type": "",
																				"value": "0"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "31386:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "31386:14:19"
																	},
																	{
																		"hexValue": "416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f",
																		"kind": "string",
																		"nodeType": "YulLiteral",
																		"src": "31402:34:19",
																		"type": "",
																		"value": "Address: delegate call to non-co"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "31379:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "31379:58:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "31379:58:19"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "memPtr",
																				"nodeType": "YulIdentifier",
																				"src": "31458:6:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "31466:2:19",
																				"type": "",
																				"value": "32"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "31454:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "31454:15:19"
																	},
																	{
																		"hexValue": "6e7472616374",
																		"kind": "string",
																		"nodeType": "YulLiteral",
																		"src": "31471:8:19",
																		"type": "",
																		"value": "ntract"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "31447:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "31447:33:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "31447:33:19"
														}
													]
												},
												"name": "store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "memPtr",
														"nodeType": "YulTypedName",
														"src": "31360:6:19",
														"type": ""
													}
												],
												"src": "31262:225:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "31599:73:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "memPtr",
																				"nodeType": "YulIdentifier",
																				"src": "31621:6:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "31629:1:19",
																				"type": "",
																				"value": "0"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "31617:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "31617:14:19"
																	},
																	{
																		"hexValue": "416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374",
																		"kind": "string",
																		"nodeType": "YulLiteral",
																		"src": "31633:31:19",
																		"type": "",
																		"value": "Address: call to non-contract"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "31610:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "31610:55:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "31610:55:19"
														}
													]
												},
												"name": "store_literal_in_memory_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "memPtr",
														"nodeType": "YulTypedName",
														"src": "31591:6:19",
														"type": ""
													}
												],
												"src": "31493:179:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "31784:123:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "memPtr",
																				"nodeType": "YulIdentifier",
																				"src": "31806:6:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "31814:1:19",
																				"type": "",
																				"value": "0"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "31802:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "31802:14:19"
																	},
																	{
																		"hexValue": "5361666545524332303a204552433230206f7065726174696f6e20646964206e",
																		"kind": "string",
																		"nodeType": "YulLiteral",
																		"src": "31818:34:19",
																		"type": "",
																		"value": "SafeERC20: ERC20 operation did n"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "31795:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "31795:58:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "31795:58:19"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "memPtr",
																				"nodeType": "YulIdentifier",
																				"src": "31874:6:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "31882:2:19",
																				"type": "",
																				"value": "32"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "31870:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "31870:15:19"
																	},
																	{
																		"hexValue": "6f742073756363656564",
																		"kind": "string",
																		"nodeType": "YulLiteral",
																		"src": "31887:12:19",
																		"type": "",
																		"value": "ot succeed"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "31863:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "31863:37:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "31863:37:19"
														}
													]
												},
												"name": "store_literal_in_memory_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "memPtr",
														"nodeType": "YulTypedName",
														"src": "31776:6:19",
														"type": ""
													}
												],
												"src": "31678:229:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "32019:72:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "memPtr",
																				"nodeType": "YulIdentifier",
																				"src": "32041:6:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "32049:1:19",
																				"type": "",
																				"value": "0"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "32037:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "32037:14:19"
																	},
																	{
																		"hexValue": "475265776172642f6f6e6c792d4761756765436f6e74726f6c6c6572",
																		"kind": "string",
																		"nodeType": "YulLiteral",
																		"src": "32053:30:19",
																		"type": "",
																		"value": "GReward/only-GaugeController"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "32030:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "32030:54:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "32030:54:19"
														}
													]
												},
												"name": "store_literal_in_memory_fa0209976ed18f66239d9b649265177d5902c97497d099e3744ef8b17544aa43",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "memPtr",
														"nodeType": "YulTypedName",
														"src": "32011:6:19",
														"type": ""
													}
												],
												"src": "31913:178:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "32140:79:19",
													"statements": [
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "32197:16:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "32206:1:19",
																					"type": "",
																					"value": "0"
																				},
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "32209:1:19",
																					"type": "",
																					"value": "0"
																				}
																			],
																			"functionName": {
																				"name": "revert",
																				"nodeType": "YulIdentifier",
																				"src": "32199:6:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "32199:12:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "32199:12:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "value",
																				"nodeType": "YulIdentifier",
																				"src": "32163:5:19"
																			},
																			{
																				"arguments": [
																					{
																						"name": "value",
																						"nodeType": "YulIdentifier",
																						"src": "32188:5:19"
																					}
																				],
																				"functionName": {
																					"name": "cleanup_t_address",
																					"nodeType": "YulIdentifier",
																					"src": "32170:17:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "32170:24:19"
																			}
																		],
																		"functionName": {
																			"name": "eq",
																			"nodeType": "YulIdentifier",
																			"src": "32160:2:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "32160:35:19"
																	}
																],
																"functionName": {
																	"name": "iszero",
																	"nodeType": "YulIdentifier",
																	"src": "32153:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "32153:43:19"
															},
															"nodeType": "YulIf",
															"src": "32150:2:19"
														}
													]
												},
												"name": "validator_revert_t_address",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "32133:5:19",
														"type": ""
													}
												],
												"src": "32097:122:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "32265:76:19",
													"statements": [
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "32319:16:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "32328:1:19",
																					"type": "",
																					"value": "0"
																				},
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "32331:1:19",
																					"type": "",
																					"value": "0"
																				}
																			],
																			"functionName": {
																				"name": "revert",
																				"nodeType": "YulIdentifier",
																				"src": "32321:6:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "32321:12:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "32321:12:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "value",
																				"nodeType": "YulIdentifier",
																				"src": "32288:5:19"
																			},
																			{
																				"arguments": [
																					{
																						"name": "value",
																						"nodeType": "YulIdentifier",
																						"src": "32310:5:19"
																					}
																				],
																				"functionName": {
																					"name": "cleanup_t_bool",
																					"nodeType": "YulIdentifier",
																					"src": "32295:14:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "32295:21:19"
																			}
																		],
																		"functionName": {
																			"name": "eq",
																			"nodeType": "YulIdentifier",
																			"src": "32285:2:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "32285:32:19"
																	}
																],
																"functionName": {
																	"name": "iszero",
																	"nodeType": "YulIdentifier",
																	"src": "32278:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "32278:40:19"
															},
															"nodeType": "YulIf",
															"src": "32275:2:19"
														}
													]
												},
												"name": "validator_revert_t_bool",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "32258:5:19",
														"type": ""
													}
												],
												"src": "32225:116:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "32403:92:19",
													"statements": [
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "32473:16:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "32482:1:19",
																					"type": "",
																					"value": "0"
																				},
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "32485:1:19",
																					"type": "",
																					"value": "0"
																				}
																			],
																			"functionName": {
																				"name": "revert",
																				"nodeType": "YulIdentifier",
																				"src": "32475:6:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "32475:12:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "32475:12:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "value",
																				"nodeType": "YulIdentifier",
																				"src": "32426:5:19"
																			},
																			{
																				"arguments": [
																					{
																						"name": "value",
																						"nodeType": "YulIdentifier",
																						"src": "32464:5:19"
																					}
																				],
																				"functionName": {
																					"name": "cleanup_t_contract$_IERC20_$77",
																					"nodeType": "YulIdentifier",
																					"src": "32433:30:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "32433:37:19"
																			}
																		],
																		"functionName": {
																			"name": "eq",
																			"nodeType": "YulIdentifier",
																			"src": "32423:2:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "32423:48:19"
																	}
																],
																"functionName": {
																	"name": "iszero",
																	"nodeType": "YulIdentifier",
																	"src": "32416:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "32416:56:19"
															},
															"nodeType": "YulIf",
															"src": "32413:2:19"
														}
													]
												},
												"name": "validator_revert_t_contract$_IERC20_$77",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "32396:5:19",
														"type": ""
													}
												],
												"src": "32347:148:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "32563:98:19",
													"statements": [
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "32639:16:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "32648:1:19",
																					"type": "",
																					"value": "0"
																				},
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "32651:1:19",
																					"type": "",
																					"value": "0"
																				}
																			],
																			"functionName": {
																				"name": "revert",
																				"nodeType": "YulIdentifier",
																				"src": "32641:6:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "32641:12:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "32641:12:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "value",
																				"nodeType": "YulIdentifier",
																				"src": "32586:5:19"
																			},
																			{
																				"arguments": [
																					{
																						"name": "value",
																						"nodeType": "YulIdentifier",
																						"src": "32630:5:19"
																					}
																				],
																				"functionName": {
																					"name": "cleanup_t_contract$_IPrizePool_$3970",
																					"nodeType": "YulIdentifier",
																					"src": "32593:36:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "32593:43:19"
																			}
																		],
																		"functionName": {
																			"name": "eq",
																			"nodeType": "YulIdentifier",
																			"src": "32583:2:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "32583:54:19"
																	}
																],
																"functionName": {
																	"name": "iszero",
																	"nodeType": "YulIdentifier",
																	"src": "32576:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "32576:62:19"
															},
															"nodeType": "YulIf",
															"src": "32573:2:19"
														}
													]
												},
												"name": "validator_revert_t_contract$_IPrizePool_$3970",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "32556:5:19",
														"type": ""
													}
												],
												"src": "32501:160:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "32726:95:19",
													"statements": [
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "32799:16:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "32808:1:19",
																					"type": "",
																					"value": "0"
																				},
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "32811:1:19",
																					"type": "",
																					"value": "0"
																				}
																			],
																			"functionName": {
																				"name": "revert",
																				"nodeType": "YulIdentifier",
																				"src": "32801:6:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "32801:12:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "32801:12:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "value",
																				"nodeType": "YulIdentifier",
																				"src": "32749:5:19"
																			},
																			{
																				"arguments": [
																					{
																						"name": "value",
																						"nodeType": "YulIdentifier",
																						"src": "32790:5:19"
																					}
																				],
																				"functionName": {
																					"name": "cleanup_t_contract$_ITicket_$4186",
																					"nodeType": "YulIdentifier",
																					"src": "32756:33:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "32756:40:19"
																			}
																		],
																		"functionName": {
																			"name": "eq",
																			"nodeType": "YulIdentifier",
																			"src": "32746:2:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "32746:51:19"
																	}
																],
																"functionName": {
																	"name": "iszero",
																	"nodeType": "YulIdentifier",
																	"src": "32739:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "32739:59:19"
															},
															"nodeType": "YulIf",
															"src": "32736:2:19"
														}
													]
												},
												"name": "validator_revert_t_contract$_ITicket_$4186",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "32719:5:19",
														"type": ""
													}
												],
												"src": "32667:154:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "32870:79:19",
													"statements": [
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "32927:16:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "32936:1:19",
																					"type": "",
																					"value": "0"
																				},
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "32939:1:19",
																					"type": "",
																					"value": "0"
																				}
																			],
																			"functionName": {
																				"name": "revert",
																				"nodeType": "YulIdentifier",
																				"src": "32929:6:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "32929:12:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "32929:12:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "value",
																				"nodeType": "YulIdentifier",
																				"src": "32893:5:19"
																			},
																			{
																				"arguments": [
																					{
																						"name": "value",
																						"nodeType": "YulIdentifier",
																						"src": "32918:5:19"
																					}
																				],
																				"functionName": {
																					"name": "cleanup_t_uint256",
																					"nodeType": "YulIdentifier",
																					"src": "32900:17:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "32900:24:19"
																			}
																		],
																		"functionName": {
																			"name": "eq",
																			"nodeType": "YulIdentifier",
																			"src": "32890:2:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "32890:35:19"
																	}
																],
																"functionName": {
																	"name": "iszero",
																	"nodeType": "YulIdentifier",
																	"src": "32883:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "32883:43:19"
															},
															"nodeType": "YulIf",
															"src": "32880:2:19"
														}
													]
												},
												"name": "validator_revert_t_uint256",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "32863:5:19",
														"type": ""
													}
												],
												"src": "32827:122:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "32997:78:19",
													"statements": [
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "33053:16:19",
																"statements": [
																	{
																		"expression": {
																			"arguments": [
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "33062:1:19",
																					"type": "",
																					"value": "0"
																				},
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "33065:1:19",
																					"type": "",
																					"value": "0"
																				}
																			],
																			"functionName": {
																				"name": "revert",
																				"nodeType": "YulIdentifier",
																				"src": "33055:6:19"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "33055:12:19"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "33055:12:19"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "value",
																				"nodeType": "YulIdentifier",
																				"src": "33020:5:19"
																			},
																			{
																				"arguments": [
																					{
																						"name": "value",
																						"nodeType": "YulIdentifier",
																						"src": "33044:5:19"
																					}
																				],
																				"functionName": {
																					"name": "cleanup_t_uint64",
																					"nodeType": "YulIdentifier",
																					"src": "33027:16:19"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "33027:23:19"
																			}
																		],
																		"functionName": {
																			"name": "eq",
																			"nodeType": "YulIdentifier",
																			"src": "33017:2:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "33017:34:19"
																	}
																],
																"functionName": {
																	"name": "iszero",
																	"nodeType": "YulIdentifier",
																	"src": "33010:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "33010:42:19"
															},
															"nodeType": "YulIf",
															"src": "33007:2:19"
														}
													]
												},
												"name": "validator_revert_t_uint64",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "32990:5:19",
														"type": ""
													}
												],
												"src": "32955:120:19"
											}
										]
									},
									"contents": "{\n\n    function abi_decode_t_address(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_address(value)\n    }\n\n    // bytes[]\n    function abi_decode_t_array$_t_bytes_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, 0x20)), end) { revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef() }\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_t_contract$_IERC20_$77(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_contract$_IERC20_$77(value)\n    }\n\n    function abi_decode_t_contract$_IPrizePool_$3970(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_contract$_IPrizePool_$3970(value)\n    }\n\n    function abi_decode_t_contract$_ITicket_$4186(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_contract$_ITicket_$4186(value)\n    }\n\n    // struct GaugeReward.RewardToken\n    function abi_decode_t_struct$_RewardToken_$2659_memory_ptr(headStart, end) -> value {\n        if slt(sub(end, headStart), 0x40) { revert_error_3538a459e4a0eb828f1aed5ebe5dc96fe59620a31d9b33e41259bb820cae769f() }\n        value := allocate_memory(0x40)\n\n        {\n            // token\n\n            let offset := 0\n\n            mstore(add(value, 0x00), abi_decode_t_contract$_IERC20_$77(add(headStart, offset), end))\n\n        }\n\n        {\n            // timestamp\n\n            let offset := 32\n\n            mstore(add(value, 0x20), abi_decode_t_uint64(add(headStart, offset), end))\n\n        }\n\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_t_uint256_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_uint256(value)\n    }\n\n    function abi_decode_t_uint64(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_uint64(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_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_tuple_t_addresst_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_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    function abi_decode_tuple_t_addresst_addresst_contract$_IERC20_$77t_uint64(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_contract$_IERC20_$77(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 96\n\n            value3 := abi_decode_t_uint64(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_addresst_contract$_IERC20_$77(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$_IERC20_$77(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_addresst_contract$_IERC20_$77t_uint64(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_contract$_IERC20_$77(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 64\n\n            value2 := abi_decode_t_uint64(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_addresst_struct$_RewardToken_$2659_memory_ptrt_address(headStart, dataEnd) -> value0, value1, value2 {\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_struct$_RewardToken_$2659_memory_ptr(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 96\n\n            value2 := 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 abi_decode_tuple_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1 {\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, value1 := abi_decode_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr(add(headStart, offset), dataEnd)\n        }\n\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_decode_tuple_t_contract$_IPrizePool_$3970t_contract$_ITicket_$4186t_uint256t_contract$_IERC20_$77t_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_contract$_IPrizePool_$3970(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_contract$_ITicket_$4186(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$_IERC20_$77(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 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_encodeUpdatedPos_t_bytes_memory_ptr_to_t_bytes_memory_ptr(value0, pos) -> updatedPos {\n        updatedPos := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr(value0, pos)\n    }\n\n    function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n        mstore(pos, cleanup_t_address(value))\n    }\n\n    // bytes[] -> bytes[]\n    function abi_encode_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_fromStack(value, pos)  -> end  {\n        let length := array_length_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_fromStack(pos, length)\n        let headStart := pos\n        let tail := add(pos, mul(length, 0x20))\n        let baseRef := array_dataslot_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(value)\n        let srcPtr := baseRef\n        for { let i := 0 } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, sub(tail, headStart))\n            let elementValue0 := mload(srcPtr)\n            tail := abi_encodeUpdatedPos_t_bytes_memory_ptr_to_t_bytes_memory_ptr(elementValue0, tail)\n            srcPtr := array_nextElement_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(srcPtr)\n            pos := add(pos, 0x20)\n        }\n        pos := tail\n        end := pos\n    }\n\n    function abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr(value, pos) -> end {\n        let length := array_length_t_bytes_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_bytes_memory_ptr(pos, length)\n        copy_memory_to_memory(add(value, 0x20), pos, length)\n        end := add(pos, round_up_to_mul_of_32(length))\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(add(value, 0x20), pos, length)\n        end := add(pos, length)\n    }\n\n    function abi_encode_t_contract$_IERC20_$77_to_t_address(value, pos) {\n        mstore(pos, convert_t_contract$_IERC20_$77_to_t_address(value))\n    }\n\n    function abi_encode_t_contract$_IERC20_$77_to_t_address_fromStack(value, pos) {\n        mstore(pos, convert_t_contract$_IERC20_$77_to_t_address(value))\n    }\n\n    function abi_encode_t_contract$_IGaugeController_$3664_to_t_address_fromStack(value, pos) {\n        mstore(pos, convert_t_contract$_IGaugeController_$3664_to_t_address(value))\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(add(value, 0x20), pos, length)\n        end := add(pos, round_up_to_mul_of_32(length))\n    }\n\n    function abi_encode_t_stringliteral_3d9aad6f9cafa45f8d5356023189d3e1086a81a6694f72a8006f1b290ec90f41_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 23)\n        store_literal_in_memory_3d9aad6f9cafa45f8d5356023189d3e1086a81a6694f72a8006f1b290ec90f41(pos)\n        end := add(pos, 32)\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_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_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_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_t_stringliteral_fa0209976ed18f66239d9b649265177d5902c97497d099e3744ef8b17544aa43_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 28)\n        store_literal_in_memory_fa0209976ed18f66239d9b649265177d5902c97497d099e3744ef8b17544aa43(pos)\n        end := add(pos, 32)\n    }\n\n    // struct GaugeReward.RewardToken -> struct GaugeReward.RewardToken\n    function abi_encode_t_struct$_RewardToken_$2659_memory_ptr_to_t_struct$_RewardToken_$2659_memory_ptr_fromStack(value, pos)  {\n        let tail := add(pos, 0x40)\n\n        {\n            // token\n\n            let memberValue0 := mload(add(value, 0x00))\n            abi_encode_t_contract$_IERC20_$77_to_t_address(memberValue0, add(pos, 0x00))\n        }\n\n        {\n            // timestamp\n\n            let memberValue0 := mload(add(value, 0x20))\n            abi_encode_t_uint64_to_t_uint64(memberValue0, add(pos, 0x20))\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_t_uint32_to_t_uint32_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint32(value))\n    }\n\n    function abi_encode_t_uint64_to_t_uint64(value, pos) {\n        mstore(pos, cleanup_t_uint64(value))\n    }\n\n    function abi_encode_t_uint64_to_t_uint64_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint64(value))\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 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_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__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_array$_t_bytes_memory_ptr_$dyn_memory_ptr__to_t_array$_t_bytes_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_bytes_memory_ptr_$dyn_memory_ptr_to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_fromStack(value0,  tail)\n\n    }\n\n    function abi_encode_tuple_t_contract$_IERC20_$77_t_uint64__to_t_address_t_uint64__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_contract$_IERC20_$77_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_uint64_to_t_uint64_fromStack(value1,  add(headStart, 32))\n\n    }\n\n    function abi_encode_tuple_t_contract$_IGaugeController_$3664__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_contract$_IGaugeController_$3664_to_t_address_fromStack(value0,  add(headStart, 0))\n\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_stringliteral_3d9aad6f9cafa45f8d5356023189d3e1086a81a6694f72a8006f1b290ec90f41__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_3d9aad6f9cafa45f8d5356023189d3e1086a81a6694f72a8006f1b290ec90f41_to_t_string_memory_ptr_fromStack( tail)\n\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 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 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 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_stringliteral_fa0209976ed18f66239d9b649265177d5902c97497d099e3744ef8b17544aa43__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_fa0209976ed18f66239d9b649265177d5902c97497d099e3744ef8b17544aa43_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_struct$_RewardToken_$2659_memory_ptr__to_t_struct$_RewardToken_$2659_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_struct$_RewardToken_$2659_memory_ptr_to_t_struct$_RewardToken_$2659_memory_ptr_fromStack(value0,  add(headStart, 0))\n\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_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_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_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 access_calldata_tail_t_bytes_calldata_ptr(base_ref, ptr_to_tail) -> addr, length {\n        let rel_offset_of_tail := calldataload(ptr_to_tail)\n        if iszero(slt(rel_offset_of_tail, sub(sub(calldatasize(), base_ref), sub(0x20, 1)))) { revert_error_356d538aaf70fba12156cc466564b792649f8f3befb07b071c91142253e175ad() }\n        addr := add(base_ref, rel_offset_of_tail)\n\n        length := calldataload(addr)\n        if gt(length, 0xffffffffffffffff) { revert_error_1e55d03107e9c4f1b5e21c76a16fba166a461117ab153bcce65e6a4ea8e5fc8a() }\n        addr := add(addr, 32)\n        if sgt(addr, sub(calldatasize(), mul(length, 0x01))) { revert_error_977805620ff29572292dee35f70b0f3f3f73d3fdd0e9f4d7a901c2e43ab18a2e() }\n\n    }\n\n    function allocate_memory(size) -> memPtr {\n        memPtr := allocate_unbounded()\n        finalize_allocation(memPtr, size)\n    }\n\n    function allocate_unbounded() -> memPtr {\n        memPtr := mload(64)\n    }\n\n    function array_dataslot_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(ptr) -> data {\n        data := ptr\n\n        data := add(ptr, 0x20)\n\n    }\n\n    function array_length_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function array_length_t_bytes_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function array_length_t_string_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function array_nextElement_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(ptr) -> next {\n        next := add(ptr, 0x20)\n    }\n\n    function array_storeLengthForEncoding_t_array$_t_bytes_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_storeLengthForEncoding_t_bytes_memory_ptr(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\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 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 checked_add_t_uint256(x, y) -> sum {\n        x := cleanup_t_uint256(x)\n        y := cleanup_t_uint256(y)\n\n        // overflow, if x > (maxValue - y)\n        if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n        sum := add(x, y)\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 checked_mul_t_uint256(x, y) -> product {\n        x := cleanup_t_uint256(x)\n        y := cleanup_t_uint256(y)\n\n        // overflow, if x != 0 and y > (maxValue / x)\n        if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n\n        product := mul(x, y)\n    }\n\n    function checked_sub_t_uint256(x, y) -> diff {\n        x := cleanup_t_uint256(x)\n        y := cleanup_t_uint256(y)\n\n        if lt(x, y) { panic_error_0x11() }\n\n        diff := sub(x, y)\n    }\n\n    function cleanup_t_address(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function cleanup_t_bool(value) -> cleaned {\n        cleaned := iszero(iszero(value))\n    }\n\n    function cleanup_t_contract$_IERC20_$77(value) -> cleaned {\n        cleaned := cleanup_t_address(value)\n    }\n\n    function cleanup_t_contract$_IPrizePool_$3970(value) -> cleaned {\n        cleaned := cleanup_t_address(value)\n    }\n\n    function cleanup_t_contract$_ITicket_$4186(value) -> cleaned {\n        cleaned := cleanup_t_address(value)\n    }\n\n    function cleanup_t_uint160(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function cleanup_t_uint256(value) -> cleaned {\n        cleaned := value\n    }\n\n    function cleanup_t_uint32(value) -> cleaned {\n        cleaned := and(value, 0xffffffff)\n    }\n\n    function cleanup_t_uint64(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffff)\n    }\n\n    function convert_t_contract$_IERC20_$77_to_t_address(value) -> converted {\n        converted := convert_t_contract$_IERC20_$77_to_t_uint160(value)\n    }\n\n    function convert_t_contract$_IERC20_$77_to_t_uint160(value) -> converted {\n        converted := cleanup_t_uint160(value)\n    }\n\n    function convert_t_contract$_IGaugeController_$3664_to_t_address(value) -> converted {\n        converted := convert_t_contract$_IGaugeController_$3664_to_t_uint160(value)\n    }\n\n    function convert_t_contract$_IGaugeController_$3664_to_t_uint160(value) -> converted {\n        converted := cleanup_t_uint160(value)\n    }\n\n    function copy_memory_to_memory(src, dst, length) {\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        if gt(i, length)\n        {\n            // clear end\n            mstore(add(dst, length), 0)\n        }\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 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 panic_error_0x11() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n\n    function panic_error_0x12() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n\n    function panic_error_0x32() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n\n    function panic_error_0x41() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n\n    function revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490() {\n        revert(0, 0)\n    }\n\n    function revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() {\n        revert(0, 0)\n    }\n\n    function revert_error_1e55d03107e9c4f1b5e21c76a16fba166a461117ab153bcce65e6a4ea8e5fc8a() {\n        revert(0, 0)\n    }\n\n    function revert_error_3538a459e4a0eb828f1aed5ebe5dc96fe59620a31d9b33e41259bb820cae769f() {\n        revert(0, 0)\n    }\n\n    function revert_error_356d538aaf70fba12156cc466564b792649f8f3befb07b071c91142253e175ad() {\n        revert(0, 0)\n    }\n\n    function revert_error_5e8f644817bc4960744f35c15999b6eff64ae702f94b1c46297cfd4e1aec2421() {\n        revert(0, 0)\n    }\n\n    function revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef() {\n        revert(0, 0)\n    }\n\n    function revert_error_977805620ff29572292dee35f70b0f3f3f73d3fdd0e9f4d7a901c2e43ab18a2e() {\n        revert(0, 0)\n    }\n\n    function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n        revert(0, 0)\n    }\n\n    function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\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 store_literal_in_memory_3d9aad6f9cafa45f8d5356023189d3e1086a81a6694f72a8006f1b290ec90f41(memPtr) {\n\n        mstore(add(memPtr, 0), \"GReward/only-liquidator\")\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 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 store_literal_in_memory_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad(memPtr) {\n\n        mstore(add(memPtr, 0), \"Address: call to non-contract\")\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 store_literal_in_memory_fa0209976ed18f66239d9b649265177d5902c97497d099e3744ef8b17544aa43(memPtr) {\n\n        mstore(add(memPtr, 0), \"GReward/only-GaugeController\")\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 validator_revert_t_bool(value) {\n        if iszero(eq(value, cleanup_t_bool(value))) { revert(0, 0) }\n    }\n\n    function validator_revert_t_contract$_IERC20_$77(value) {\n        if iszero(eq(value, cleanup_t_contract$_IERC20_$77(value))) { revert(0, 0) }\n    }\n\n    function validator_revert_t_contract$_IPrizePool_$3970(value) {\n        if iszero(eq(value, cleanup_t_contract$_IPrizePool_$3970(value))) { revert(0, 0) }\n    }\n\n    function validator_revert_t_contract$_ITicket_$4186(value) {\n        if iszero(eq(value, cleanup_t_contract$_ITicket_$4186(value))) { 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 validator_revert_t_uint64(value) {\n        if iszero(eq(value, cleanup_t_uint64(value))) { revert(0, 0) }\n    }\n\n}\n",
									"id": 19,
									"language": "Yul",
									"name": "#utility.yul"
								}
							],
							"immutableReferences": {},
							"linkReferences": {},
							"object": "608060405234801561001057600080fd5b50600436106101165760003560e01c8063ac9650d8116100a2578063f00b199711610071578063f00b19971461031a578063f1883e5d1461034a578063f741e08f1461037a578063fbfa77cf14610396578063fd401628146103b457610116565b8063ac9650d81461026c578063ac9fb71d1461029c578063bba06f27146102ba578063e5f744b8146102ea57610116565b80635902fc3b116100e95780635902fc3b146101a15780636e8fc2d3146101d257806381d7af2e1461020257806395cebcd41461023257806399eecb3b1461024e57610116565b806306302ef11461011b578063316619301461014b5780634046ebae146101675780635767bba514610185575b600080fd5b610135600480360381019061013091906122b3565b6103d0565b6040516101429190612995565b60405180910390f35b61016560048036038101906101609190612260565b6103f5565b005b61016f610495565b60405161017c91906127b7565b60405180910390f35b61019f600480360381019061019a9190612166565b6104bb565b005b6101bb60048036038101906101b69190612399565b61057c565b6040516101c9929190612854565b60405180910390f35b6101ec60048036038101906101e79190612139565b6105ed565b6040516101f9919061297a565b60405180910390f35b61021c600480360381019061021791906121a6565b610605565b6040516102299190612995565b60405180910390f35b61024c60048036038101906102479190612260565b610637565b005b6102566106d7565b604051610263919061287d565b60405180910390f35b610286600480360381019061028191906123d9565b6106fd565b6040516102939190612832565b60405180910390f35b6102a4610809565b6040516102b19190612a10565b60405180910390f35b6102d460048036038101906102cf91906122b3565b61081f565b6040516102e19190612995565b60405180910390f35b61030460048036038101906102ff91906121f9565b6109f6565b6040516103119190612995565b60405180910390f35b610334600480360381019061032f9190612346565b610a35565b6040516103419190612995565b60405180910390f35b610364600480360381019061035f91906122f3565b610b04565b6040516103719190612995565b60405180910390f35b610394600480360381019061038f9190612346565b610b36565b005b61039e610bf9565b6040516103ab91906127b7565b60405180910390f35b6103ce60048036038101906103c99190612453565b610c1f565b005b6000602052816000526040600020602052806000526040600020600091509150505481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047c9061295a565b60405180910390fd5b6104908383836110cb565b505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166378fa672e84846040518363ffffffff1660e01b815260040161051a9291906127d2565b60206040518083038186803b15801561053257600080fd5b505afa158015610546573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061056a91906124ce565b90506105778383836110cb565b505050565b6004602052816000526040600020818154811061059857600080fd5b90600052602060002001600091509150508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900467ffffffffffffffff16905082565b6105f5611fb1565b6105fe8261126c565b9050919050565b600260205282600052604060002060205281600052604060002060205280600052604060002060009250925050505481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106be9061295a565b60405180910390fd5b6106d28383836110cb565b505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60608282905067ffffffffffffffff81111561071c5761071b612e68565b5b60405190808252806020026020018201604052801561074f57816020015b606081526020019060019003908161073a5790505b50905060005b83839050811015610802576107d13085858481811061077757610776612e39565b5b90506020028101906107899190612a2b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611411565b8282815181106107e4576107e3612e39565b5b602002602001018190525080806107fa90612d92565b915050610755565b5092915050565b600760149054906101000a900463ffffffff1681565b6000806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610970600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685838673ffffffffffffffffffffffffffffffffffffffff1661143e909392919063ffffffff16565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8ea6014d5675f425737c93493b7ab355a73eb41cf878f7315ac58f7753bcd7da846040516109e49190612995565b60405180910390a48091505092915050565b60016020528360005260406000206020528260005260406000206020528160005260406000206020528060005260406000206000935093505050505481565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166378fa672e86856040518363ffffffff1660e01b8152600401610a959291906127d2565b60206040518083038186803b158015610aad57600080fd5b505afa158015610ac1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae591906124ce565b90506000610af5868686856114c7565b50905080925050509392505050565b600360205282600052604060002060205281600052604060002060205280600052604060002060009250925050505481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166378fa672e85846040518363ffffffff1660e01b8152600401610b959291906127d2565b60206040518083038186803b158015610bad57600080fd5b505afa158015610bc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be591906124ce565b9050610bf384848484611884565b50505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca6906128ba565b60405180910390fd5b60008490506000610cbf8261126c565b9050806000015173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614610e7e576000429050600060405180604001604052808773ffffffffffffffffffffffffffffffffffffffff1681526020018367ffffffffffffffff168152509050600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050508573ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fd38aa1c6709087859dfa9ca795d9441a64c1fa0b1bf23d8ad02c1853b971e33c84604051610e709190612995565b60405180910390a380925050505b6000633b9aca00600760149054906101000a900463ffffffff1663ffffffff1685610ea99190612bb6565b610eb39190612b85565b90506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663117d37e6856040518263ffffffff1660e01b8152600401610f1291906127b7565b60206040518083038186803b158015610f2a57600080fd5b505afa158015610f3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6291906124ce565b90506000808211610f74576000610f94565b81670de0b6b3a764000084610f899190612bb6565b610f939190612b85565b5b905080600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000866000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000866020015167ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600082825461104f9190612b2f565b925050819055508673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f1b0006daff5bb99d1383ffc4326984a27347192b77ddb40fe18ec9720d0929a88886856040516110b7939291906129d9565b60405180910390a350505050505050505050565b6000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050905061111a611fb1565b60008211156112585760008290505b60008111156112525760018161113f9190612c10565b9050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020818154811061119257611191612e39565b5b906000526020600020016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681525050915061123d868387876118a6565b5061124d85878460000151611ad5565b611129565b50611265565b61126484866000611ad5565b5b5050505050565b611274611fb1565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561138b578382906000526020600020016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681525050815260200190600101906112d5565b50505050905060008151905060008111156113d057816001826113ae9190612c10565b815181106113bf576113be612e39565b5b60200260200101519250505061140c565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff16815250925050505b919050565b606061143683836040518060600160405280602781526020016130df60279139611ba2565b905092915050565b6114c1846323b872dd60e01b85858560405160240161145f939291906127fb565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611c6f565b50505050565b6000806000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000876000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000876020015167ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000205490506000600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000886000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000886020015167ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000205490506000611674878a8a60000151611d36565b90506000811415611804576000600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015611796578382906000526020600020016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681525050815260200190600101906116e0565b50505050905060008151905060018111156117e9576000826001836117bb9190612c10565b815181106117cc576117cb612e39565b5b602002602001015190506117e58a8d8360000151611d36565b9350505b6000831415611801576117fe898c6000611d36565b92505b50505b60008082118015611822575081896020015167ffffffffffffffff16115b9050801580156118325750600084145b1561184757600083955095505050505061187b565b670de0b6b3a764000087858561185d9190612c10565b6118679190612bb6565b6118719190612b85565b8395509550505050505b94509492505050565b611890848484846118a6565b506118a082858560000151611ad5565b50505050565b60008060006118b7878787876114c7565b9150915080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000886000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000886020015167ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020819055506000821115611ac857816000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000886000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a3e9190612b2f565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16866000015173ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f7e27222c50a5510dfc61468d936b48c880bfbd05c1eb59c5be79b06e582369dd8585604051611abf9291906129b0565b60405180910390a45b8192505050949350505050565b4267ffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6060611bad84611dfb565b611bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be3906128fa565b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1685604051611c1491906127a0565b600060405180830381855af49150503d8060008114611c4f576040519150601f19603f3d011682016040523d82523d6000602084013e611c54565b606091505b5091509150611c64828286611e1e565b925050509392505050565b6000611cd1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611e859092919063ffffffff16565b9050600081511115611d315780806020019051810190611cf19190612426565b611d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d279061293a565b60405180910390fd5b5b505050565b6000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60608315611e2e57829050611e7e565b600083511115611e415782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e759190612898565b60405180910390fd5b9392505050565b6060611e948484600085611e9d565b90509392505050565b606082471015611ee2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed9906128da565b60405180910390fd5b611eeb85611dfb565b611f2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f219061291a565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611f5391906127a0565b60006040518083038185875af1925050503d8060008114611f90576040519150601f19603f3d011682016040523d82523d6000602084013e611f95565b606091505b5091509150611fa5828286611e1e565b92505050949350505050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b600081359050611ffa8161303d565b92915050565b60008083601f84011261201657612015612e9c565b5b8235905067ffffffffffffffff81111561203357612032612e97565b5b60208301915083602082028301111561204f5761204e612eb0565b5b9250929050565b60008151905061206581613054565b92915050565b60008135905061207a8161306b565b92915050565b60008135905061208f81613082565b92915050565b6000813590506120a481613099565b92915050565b6000604082840312156120c0576120bf612ea6565b5b6120ca6040612a8e565b905060006120da8482850161206b565b60008301525060206120ee84828501612124565b60208301525092915050565b600081359050612109816130b0565b92915050565b60008151905061211e816130b0565b92915050565b600081359050612133816130c7565b92915050565b60006020828403121561214f5761214e612ebf565b5b600061215d84828501611feb565b91505092915050565b6000806040838503121561217d5761217c612ebf565b5b600061218b85828601611feb565b925050602061219c85828601611feb565b9150509250929050565b6000806000606084860312156121bf576121be612ebf565b5b60006121cd86828701611feb565b93505060206121de86828701611feb565b92505060406121ef86828701611feb565b9150509250925092565b6000806000806080858703121561221357612212612ebf565b5b600061222187828801611feb565b945050602061223287828801611feb565b93505060406122438782880161206b565b925050606061225487828801612124565b91505092959194509250565b60008060006060848603121561227957612278612ebf565b5b600061228786828701611feb565b935050602061229886828701611feb565b92505060406122a9868287016120fa565b9150509250925092565b600080604083850312156122ca576122c9612ebf565b5b60006122d885828601611feb565b92505060206122e98582860161206b565b9150509250929050565b60008060006060848603121561230c5761230b612ebf565b5b600061231a86828701611feb565b935050602061232b8682870161206b565b925050604061233c86828701612124565b9150509250925092565b60008060006080848603121561235f5761235e612ebf565b5b600061236d86828701611feb565b935050602061237e868287016120aa565b925050606061238f86828701611feb565b9150509250925092565b600080604083850312156123b0576123af612ebf565b5b60006123be85828601611feb565b92505060206123cf858286016120fa565b9150509250929050565b600080602083850312156123f0576123ef612ebf565b5b600083013567ffffffffffffffff81111561240e5761240d612eba565b5b61241a85828601612000565b92509250509250929050565b60006020828403121561243c5761243b612ebf565b5b600061244a84828501612056565b91505092915050565b600080600080600060a0868803121561246f5761246e612ebf565b5b600061247d88828901612080565b955050602061248e88828901612095565b945050604061249f888289016120fa565b93505060606124b08882890161206b565b92505060806124c1888289016120fa565b9150509295509295909350565b6000602082840312156124e4576124e3612ebf565b5b60006124f28482850161210f565b91505092915050565b60006125078383612593565b905092915050565b61251881612c44565b82525050565b600061252982612ac3565b6125338185612af1565b93508360208202850161254585612ab3565b8060005b85811015612581578484038952815161256285826124fb565b945061256d83612ae4565b925060208a01995050600181019050612549565b50829750879550505050505092915050565b600061259e82612ace565b6125a88185612b02565b93506125b8818560208601612d2e565b6125c181612ec4565b840191505092915050565b60006125d782612ace565b6125e18185612b13565b93506125f1818560208601612d2e565b80840191505092915050565b61260681612ce6565b82525050565b61261581612ce6565b82525050565b61262481612d0a565b82525050565b600061263582612ad9565b61263f8185612b1e565b935061264f818560208601612d2e565b61265881612ec4565b840191505092915050565b6000612670601783612b1e565b915061267b82612ed5565b602082019050919050565b6000612693602683612b1e565b915061269e82612efe565b604082019050919050565b60006126b6602683612b1e565b91506126c182612f4d565b604082019050919050565b60006126d9601d83612b1e565b91506126e482612f9c565b602082019050919050565b60006126fc602a83612b1e565b915061270782612fc5565b604082019050919050565b600061271f601c83612b1e565b915061272a82613014565b602082019050919050565b60408201600082015161274b60008501826125fd565b50602082015161275e6020850182612782565b50505050565b61276d81612cb8565b82525050565b61277c81612cc2565b82525050565b61278b81612cd2565b82525050565b61279a81612cd2565b82525050565b60006127ac82846125cc565b915081905092915050565b60006020820190506127cc600083018461250f565b92915050565b60006040820190506127e7600083018561250f565b6127f4602083018461250f565b9392505050565b6000606082019050612810600083018661250f565b61281d602083018561250f565b61282a6040830184612764565b949350505050565b6000602082019050818103600083015261284c818461251e565b905092915050565b6000604082019050612869600083018561260c565b6128766020830184612791565b9392505050565b6000602082019050612892600083018461261b565b92915050565b600060208201905081810360008301526128b2818461262a565b905092915050565b600060208201905081810360008301526128d381612663565b9050919050565b600060208201905081810360008301526128f381612686565b9050919050565b60006020820190508181036000830152612913816126a9565b9050919050565b60006020820190508181036000830152612933816126cc565b9050919050565b60006020820190508181036000830152612953816126ef565b9050919050565b6000602082019050818103600083015261297381612712565b9050919050565b600060408201905061298f6000830184612735565b92915050565b60006020820190506129aa6000830184612764565b92915050565b60006040820190506129c56000830185612764565b6129d26020830184612764565b9392505050565b60006060820190506129ee6000830186612764565b6129fb6020830185612764565b612a086040830184612764565b949350505050565b6000602082019050612a256000830184612773565b92915050565b60008083356001602003843603038112612a4857612a47612eab565b5b80840192508235915067ffffffffffffffff821115612a6a57612a69612ea1565b5b602083019250600182023603831315612a8657612a85612eb5565b5b509250929050565b6000612a98612aa9565b9050612aa48282612d61565b919050565b6000604051905090565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000612b3a82612cb8565b9150612b4583612cb8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612b7a57612b79612ddb565b5b828201905092915050565b6000612b9082612cb8565b9150612b9b83612cb8565b925082612bab57612baa612e0a565b5b828204905092915050565b6000612bc182612cb8565b9150612bcc83612cb8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612c0557612c04612ddb565b5b828202905092915050565b6000612c1b82612cb8565b9150612c2683612cb8565b925082821015612c3957612c38612ddb565b5b828203905092915050565b6000612c4f82612c98565b9050919050565b60008115159050919050565b6000612c6d82612c44565b9050919050565b6000612c7f82612c44565b9050919050565b6000612c9182612c44565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b6000612cf182612cf8565b9050919050565b6000612d0382612c98565b9050919050565b6000612d1582612d1c565b9050919050565b6000612d2782612c98565b9050919050565b60005b83811015612d4c578082015181840152602081019050612d31565b83811115612d5b576000848401525b50505050565b612d6a82612ec4565b810181811067ffffffffffffffff82111715612d8957612d88612e68565b5b80604052505050565b6000612d9d82612cb8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612dd057612dcf612ddb565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f475265776172642f6f6e6c792d6c697175696461746f72000000000000000000600082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f475265776172642f6f6e6c792d4761756765436f6e74726f6c6c657200000000600082015250565b61304681612c44565b811461305157600080fd5b50565b61305d81612c56565b811461306857600080fd5b50565b61307481612c62565b811461307f57600080fd5b50565b61308b81612c74565b811461309657600080fd5b50565b6130a281612c86565b81146130ad57600080fd5b50565b6130b981612cb8565b81146130c457600080fd5b50565b6130d081612cd2565b81146130db57600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212207aa42903eb30c0bc06465fc482ce04bda38fd8e88753fadd4536243caaa18dbb64736f6c63430008060033",
							"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 0xAC9650D8 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xF00B1997 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xF00B1997 EQ PUSH2 0x31A JUMPI DUP1 PUSH4 0xF1883E5D EQ PUSH2 0x34A JUMPI DUP1 PUSH4 0xF741E08F EQ PUSH2 0x37A JUMPI DUP1 PUSH4 0xFBFA77CF EQ PUSH2 0x396 JUMPI DUP1 PUSH4 0xFD401628 EQ PUSH2 0x3B4 JUMPI PUSH2 0x116 JUMP JUMPDEST DUP1 PUSH4 0xAC9650D8 EQ PUSH2 0x26C JUMPI DUP1 PUSH4 0xAC9FB71D EQ PUSH2 0x29C JUMPI DUP1 PUSH4 0xBBA06F27 EQ PUSH2 0x2BA JUMPI DUP1 PUSH4 0xE5F744B8 EQ PUSH2 0x2EA JUMPI PUSH2 0x116 JUMP JUMPDEST DUP1 PUSH4 0x5902FC3B GT PUSH2 0xE9 JUMPI DUP1 PUSH4 0x5902FC3B EQ PUSH2 0x1A1 JUMPI DUP1 PUSH4 0x6E8FC2D3 EQ PUSH2 0x1D2 JUMPI DUP1 PUSH4 0x81D7AF2E EQ PUSH2 0x202 JUMPI DUP1 PUSH4 0x95CEBCD4 EQ PUSH2 0x232 JUMPI DUP1 PUSH4 0x99EECB3B EQ PUSH2 0x24E JUMPI PUSH2 0x116 JUMP JUMPDEST DUP1 PUSH4 0x6302EF1 EQ PUSH2 0x11B JUMPI DUP1 PUSH4 0x31661930 EQ PUSH2 0x14B JUMPI DUP1 PUSH4 0x4046EBAE EQ PUSH2 0x167 JUMPI DUP1 PUSH4 0x5767BBA5 EQ PUSH2 0x185 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x135 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x130 SWAP2 SWAP1 PUSH2 0x22B3 JUMP JUMPDEST PUSH2 0x3D0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x142 SWAP2 SWAP1 PUSH2 0x2995 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x165 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x160 SWAP2 SWAP1 PUSH2 0x2260 JUMP JUMPDEST PUSH2 0x3F5 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x16F PUSH2 0x495 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x17C SWAP2 SWAP1 PUSH2 0x27B7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x19F PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x19A SWAP2 SWAP1 PUSH2 0x2166 JUMP JUMPDEST PUSH2 0x4BB JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1BB PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x1B6 SWAP2 SWAP1 PUSH2 0x2399 JUMP JUMPDEST PUSH2 0x57C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1C9 SWAP3 SWAP2 SWAP1 PUSH2 0x2854 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1EC PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x1E7 SWAP2 SWAP1 PUSH2 0x2139 JUMP JUMPDEST PUSH2 0x5ED JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1F9 SWAP2 SWAP1 PUSH2 0x297A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x21C PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x217 SWAP2 SWAP1 PUSH2 0x21A6 JUMP JUMPDEST PUSH2 0x605 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x229 SWAP2 SWAP1 PUSH2 0x2995 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x24C PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x247 SWAP2 SWAP1 PUSH2 0x2260 JUMP JUMPDEST PUSH2 0x637 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x256 PUSH2 0x6D7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x263 SWAP2 SWAP1 PUSH2 0x287D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x286 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x281 SWAP2 SWAP1 PUSH2 0x23D9 JUMP JUMPDEST PUSH2 0x6FD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x293 SWAP2 SWAP1 PUSH2 0x2832 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2A4 PUSH2 0x809 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2B1 SWAP2 SWAP1 PUSH2 0x2A10 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2D4 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x2CF SWAP2 SWAP1 PUSH2 0x22B3 JUMP JUMPDEST PUSH2 0x81F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2E1 SWAP2 SWAP1 PUSH2 0x2995 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x304 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x2FF SWAP2 SWAP1 PUSH2 0x21F9 JUMP JUMPDEST PUSH2 0x9F6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x311 SWAP2 SWAP1 PUSH2 0x2995 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x334 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x32F SWAP2 SWAP1 PUSH2 0x2346 JUMP JUMPDEST PUSH2 0xA35 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x341 SWAP2 SWAP1 PUSH2 0x2995 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x364 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x35F SWAP2 SWAP1 PUSH2 0x22F3 JUMP JUMPDEST PUSH2 0xB04 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x371 SWAP2 SWAP1 PUSH2 0x2995 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x394 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x38F SWAP2 SWAP1 PUSH2 0x2346 JUMP JUMPDEST PUSH2 0xB36 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x39E PUSH2 0xBF9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3AB SWAP2 SWAP1 PUSH2 0x27B7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x3CE PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x3C9 SWAP2 SWAP1 PUSH2 0x2453 JUMP JUMPDEST PUSH2 0xC1F JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 PUSH1 0x20 MSTORE DUP2 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 POP SWAP2 POP POP SLOAD DUP2 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x485 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x47C SWAP1 PUSH2 0x295A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x490 DUP4 DUP4 DUP4 PUSH2 0x10CB JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x7 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x5 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x78FA672E DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51A SWAP3 SWAP2 SWAP1 PUSH2 0x27D2 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x532 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x546 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 0x56A SWAP2 SWAP1 PUSH2 0x24CE JUMP JUMPDEST SWAP1 POP PUSH2 0x577 DUP4 DUP4 DUP4 PUSH2 0x10CB JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE DUP2 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x598 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP2 POP SWAP2 POP POP DUP1 PUSH1 0x0 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP1 PUSH1 0x0 ADD PUSH1 0x14 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND SWAP1 POP DUP3 JUMP JUMPDEST PUSH2 0x5F5 PUSH2 0x1FB1 JUMP JUMPDEST PUSH2 0x5FE DUP3 PUSH2 0x126C JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE DUP3 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x20 MSTORE DUP2 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP3 POP SWAP3 POP POP POP SLOAD DUP2 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x6C7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x6BE SWAP1 PUSH2 0x295A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x6D2 DUP4 DUP4 DUP4 PUSH2 0x10CB JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x5 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x60 DUP3 DUP3 SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x71C JUMPI PUSH2 0x71B PUSH2 0x2E68 JUMP JUMPDEST JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x74F JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x73A JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 DUP4 SWAP1 POP DUP2 LT ISZERO PUSH2 0x802 JUMPI PUSH2 0x7D1 ADDRESS DUP6 DUP6 DUP5 DUP2 DUP2 LT PUSH2 0x777 JUMPI PUSH2 0x776 PUSH2 0x2E39 JUMP JUMPDEST JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0x789 SWAP2 SWAP1 PUSH2 0x2A2B JUMP JUMPDEST 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP PUSH2 0x1411 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x7E4 JUMPI PUSH2 0x7E3 PUSH2 0x2E39 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP DUP1 DUP1 PUSH2 0x7FA SWAP1 PUSH2 0x2D92 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x755 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x7 PUSH1 0x14 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP PUSH2 0x970 PUSH1 0x6 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP4 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x143E SWAP1 SWAP4 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8EA6014D5675F425737C93493B7AB355A73EB41CF878F7315AC58F7753BCD7DA DUP5 PUSH1 0x40 MLOAD PUSH2 0x9E4 SWAP2 SWAP1 PUSH2 0x2995 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE DUP4 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x20 MSTORE DUP3 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x20 MSTORE DUP2 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP4 POP SWAP4 POP POP POP POP SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x5 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x78FA672E DUP7 DUP6 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA95 SWAP3 SWAP2 SWAP1 PUSH2 0x27D2 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xAAD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAC1 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 0xAE5 SWAP2 SWAP1 PUSH2 0x24CE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xAF5 DUP7 DUP7 DUP7 DUP6 PUSH2 0x14C7 JUMP JUMPDEST POP SWAP1 POP DUP1 SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE DUP3 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x20 MSTORE DUP2 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP3 POP SWAP3 POP POP POP SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x5 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x78FA672E DUP6 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xB95 SWAP3 SWAP2 SWAP1 PUSH2 0x27D2 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xBAD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBC1 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 0xBE5 SWAP2 SWAP1 PUSH2 0x24CE JUMP JUMPDEST SWAP1 POP PUSH2 0xBF3 DUP5 DUP5 DUP5 DUP5 PUSH2 0x1884 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x6 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x7 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xCAF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xCA6 SWAP1 PUSH2 0x28BA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 SWAP1 POP PUSH1 0x0 PUSH2 0xCBF DUP3 PUSH2 0x126C JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xE7E JUMPI PUSH1 0x0 TIMESTAMP SWAP1 POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH8 0xFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP SWAP1 POP PUSH1 0x4 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 DUP1 PUSH1 0x1 DUP2 SLOAD ADD DUP1 DUP3 SSTORE DUP1 SWAP2 POP POP PUSH1 0x1 SWAP1 SUB SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SWAP2 SWAP1 SWAP2 SWAP1 SWAP2 POP PUSH1 0x0 DUP3 ADD MLOAD DUP2 PUSH1 0x0 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x20 DUP3 ADD MLOAD DUP2 PUSH1 0x0 ADD PUSH1 0x14 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH8 0xFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH8 0xFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP POP POP DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xD38AA1C6709087859DFA9CA795D9441A64C1FA0B1BF23D8AD02C1853B971E33C DUP5 PUSH1 0x40 MLOAD PUSH2 0xE70 SWAP2 SWAP1 PUSH2 0x2995 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 SWAP3 POP POP POP JUMPDEST PUSH1 0x0 PUSH4 0x3B9ACA00 PUSH1 0x7 PUSH1 0x14 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH4 0xFFFFFFFF AND PUSH4 0xFFFFFFFF AND DUP6 PUSH2 0xEA9 SWAP2 SWAP1 PUSH2 0x2BB6 JUMP JUMPDEST PUSH2 0xEB3 SWAP2 SWAP1 PUSH2 0x2B85 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x5 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x117D37E6 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF12 SWAP2 SWAP1 PUSH2 0x27B7 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF3E 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 0xF62 SWAP2 SWAP1 PUSH2 0x24CE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 DUP3 GT PUSH2 0xF74 JUMPI PUSH1 0x0 PUSH2 0xF94 JUMP JUMPDEST DUP2 PUSH8 0xDE0B6B3A7640000 DUP5 PUSH2 0xF89 SWAP2 SWAP1 PUSH2 0x2BB6 JUMP JUMPDEST PUSH2 0xF93 SWAP2 SWAP1 PUSH2 0x2B85 JUMP JUMPDEST JUMPDEST SWAP1 POP DUP1 PUSH1 0x3 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP7 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP7 PUSH1 0x20 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH8 0xFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x104F SWAP2 SWAP1 PUSH2 0x2B2F JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x1B0006DAFF5BB99D1383FFC4326984A27347192B77DDB40FE18EC9720D0929A8 DUP9 DUP7 DUP6 PUSH1 0x40 MLOAD PUSH2 0x10B7 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x29D9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x4 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD SWAP1 POP SWAP1 POP PUSH2 0x111A PUSH2 0x1FB1 JUMP JUMPDEST PUSH1 0x0 DUP3 GT ISZERO PUSH2 0x1258 JUMPI PUSH1 0x0 DUP3 SWAP1 POP JUMPDEST PUSH1 0x0 DUP2 GT ISZERO PUSH2 0x1252 JUMPI PUSH1 0x1 DUP2 PUSH2 0x113F SWAP2 SWAP1 PUSH2 0x2C10 JUMP JUMPDEST SWAP1 POP PUSH1 0x4 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x1192 JUMPI PUSH2 0x1191 PUSH2 0x2E39 JUMP JUMPDEST JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE SWAP1 DUP2 PUSH1 0x0 DUP3 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP3 ADD PUSH1 0x14 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH8 0xFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP SWAP2 POP PUSH2 0x123D DUP7 DUP4 DUP8 DUP8 PUSH2 0x18A6 JUMP JUMPDEST POP PUSH2 0x124D DUP6 DUP8 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x1AD5 JUMP JUMPDEST PUSH2 0x1129 JUMP JUMPDEST POP PUSH2 0x1265 JUMP JUMPDEST PUSH2 0x1264 DUP5 DUP7 PUSH1 0x0 PUSH2 0x1AD5 JUMP JUMPDEST JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1274 PUSH2 0x1FB1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x4 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 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 PUSH1 0x0 SWAP1 JUMPDEST DUP3 DUP3 LT ISZERO PUSH2 0x138B JUMPI DUP4 DUP3 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE SWAP1 DUP2 PUSH1 0x0 DUP3 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP3 ADD PUSH1 0x14 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH8 0xFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x12D5 JUMP JUMPDEST POP POP POP POP SWAP1 POP PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH1 0x0 DUP2 GT ISZERO PUSH2 0x13D0 JUMPI DUP2 PUSH1 0x1 DUP3 PUSH2 0x13AE SWAP2 SWAP1 PUSH2 0x2C10 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x13BF JUMPI PUSH2 0x13BE PUSH2 0x2E39 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP3 POP POP POP PUSH2 0x140C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP SWAP3 POP POP POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1436 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x30DF PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x1BA2 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x14C1 DUP5 PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x145F SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x27FB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH2 0x1C6F JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP8 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP8 PUSH1 0x20 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH8 0xFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x3 PUSH1 0x0 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP9 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP9 PUSH1 0x20 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH8 0xFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH1 0x0 PUSH2 0x1674 DUP8 DUP11 DUP11 PUSH1 0x0 ADD MLOAD PUSH2 0x1D36 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 EQ ISZERO PUSH2 0x1804 JUMPI PUSH1 0x0 PUSH1 0x4 PUSH1 0x0 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 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 PUSH1 0x0 SWAP1 JUMPDEST DUP3 DUP3 LT ISZERO PUSH2 0x1796 JUMPI DUP4 DUP3 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE SWAP1 DUP2 PUSH1 0x0 DUP3 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP3 ADD PUSH1 0x14 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH8 0xFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x16E0 JUMP JUMPDEST POP POP POP POP SWAP1 POP PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x17E9 JUMPI PUSH1 0x0 DUP3 PUSH1 0x1 DUP4 PUSH2 0x17BB SWAP2 SWAP1 PUSH2 0x2C10 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x17CC JUMPI PUSH2 0x17CB PUSH2 0x2E39 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH2 0x17E5 DUP11 DUP14 DUP4 PUSH1 0x0 ADD MLOAD PUSH2 0x1D36 JUMP JUMPDEST SWAP4 POP POP JUMPDEST PUSH1 0x0 DUP4 EQ ISZERO PUSH2 0x1801 JUMPI PUSH2 0x17FE DUP10 DUP13 PUSH1 0x0 PUSH2 0x1D36 JUMP JUMPDEST SWAP3 POP JUMPDEST POP POP JUMPDEST PUSH1 0x0 DUP1 DUP3 GT DUP1 ISZERO PUSH2 0x1822 JUMPI POP DUP2 DUP10 PUSH1 0x20 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND GT JUMPDEST SWAP1 POP DUP1 ISZERO DUP1 ISZERO PUSH2 0x1832 JUMPI POP PUSH1 0x0 DUP5 EQ JUMPDEST ISZERO PUSH2 0x1847 JUMPI PUSH1 0x0 DUP4 SWAP6 POP SWAP6 POP POP POP POP POP PUSH2 0x187B JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP8 DUP6 DUP6 PUSH2 0x185D SWAP2 SWAP1 PUSH2 0x2C10 JUMP JUMPDEST PUSH2 0x1867 SWAP2 SWAP1 PUSH2 0x2BB6 JUMP JUMPDEST PUSH2 0x1871 SWAP2 SWAP1 PUSH2 0x2B85 JUMP JUMPDEST DUP4 SWAP6 POP SWAP6 POP POP POP POP POP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1890 DUP5 DUP5 DUP5 DUP5 PUSH2 0x18A6 JUMP JUMPDEST POP PUSH2 0x18A0 DUP3 DUP6 DUP6 PUSH1 0x0 ADD MLOAD PUSH2 0x1AD5 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x18B7 DUP8 DUP8 DUP8 DUP8 PUSH2 0x14C7 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP1 PUSH1 0x1 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP9 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP9 PUSH1 0x20 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH8 0xFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP PUSH1 0x0 DUP3 GT ISZERO PUSH2 0x1AC8 JUMPI DUP2 PUSH1 0x0 DUP1 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP9 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x1A3E SWAP2 SWAP1 PUSH2 0x2B2F JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x7E27222C50A5510DFC61468D936B48C880BFBD05C1EB59C5BE79B06E582369DD DUP6 DUP6 PUSH1 0x40 MLOAD PUSH2 0x1ABF SWAP3 SWAP2 SWAP1 PUSH2 0x29B0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 JUMPDEST DUP2 SWAP3 POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST TIMESTAMP PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1BAD DUP5 PUSH2 0x1DFB JUMP JUMPDEST PUSH2 0x1BEC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1BE3 SWAP1 PUSH2 0x28FA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x40 MLOAD PUSH2 0x1C14 SWAP2 SWAP1 PUSH2 0x27A0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1C4F 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 0x1C54 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x1C64 DUP3 DUP3 DUP7 PUSH2 0x1E1E JUMP JUMPDEST SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1CD1 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 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E85 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD GT ISZERO PUSH2 0x1D31 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1CF1 SWAP2 SWAP1 PUSH2 0x2426 JUMP JUMPDEST PUSH2 0x1D30 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1D27 SWAP1 PUSH2 0x293A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EXTCODESIZE GT SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x1E2E JUMPI DUP3 SWAP1 POP PUSH2 0x1E7E JUMP JUMPDEST PUSH1 0x0 DUP4 MLOAD GT ISZERO PUSH2 0x1E41 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1E75 SWAP2 SWAP1 PUSH2 0x2898 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1E94 DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x1E9D JUMP JUMPDEST SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x1EE2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1ED9 SWAP1 PUSH2 0x28DA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1EEB DUP6 PUSH2 0x1DFB JUMP JUMPDEST PUSH2 0x1F2A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1F21 SWAP1 PUSH2 0x291A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x1F53 SWAP2 SWAP1 PUSH2 0x27A0 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 0x1F90 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 0x1F95 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x1FA5 DUP3 DUP3 DUP7 PUSH2 0x1E1E JUMP JUMPDEST SWAP3 POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x1FFA DUP2 PUSH2 0x303D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2016 JUMPI PUSH2 0x2015 PUSH2 0x2E9C JUMP JUMPDEST JUMPDEST DUP3 CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2033 JUMPI PUSH2 0x2032 PUSH2 0x2E97 JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x204F JUMPI PUSH2 0x204E PUSH2 0x2EB0 JUMP JUMPDEST JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x2065 DUP2 PUSH2 0x3054 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x207A DUP2 PUSH2 0x306B JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x208F DUP2 PUSH2 0x3082 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x20A4 DUP2 PUSH2 0x3099 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x20C0 JUMPI PUSH2 0x20BF PUSH2 0x2EA6 JUMP JUMPDEST JUMPDEST PUSH2 0x20CA PUSH1 0x40 PUSH2 0x2A8E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x20DA DUP5 DUP3 DUP6 ADD PUSH2 0x206B JUMP JUMPDEST PUSH1 0x0 DUP4 ADD MSTORE POP PUSH1 0x20 PUSH2 0x20EE DUP5 DUP3 DUP6 ADD PUSH2 0x2124 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x2109 DUP2 PUSH2 0x30B0 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x211E DUP2 PUSH2 0x30B0 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x2133 DUP2 PUSH2 0x30C7 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x214F JUMPI PUSH2 0x214E PUSH2 0x2EBF JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x215D DUP5 DUP3 DUP6 ADD PUSH2 0x1FEB JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x217D JUMPI PUSH2 0x217C PUSH2 0x2EBF JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x218B DUP6 DUP3 DUP7 ADD PUSH2 0x1FEB JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x219C DUP6 DUP3 DUP7 ADD PUSH2 0x1FEB JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x21BF JUMPI PUSH2 0x21BE PUSH2 0x2EBF JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x21CD DUP7 DUP3 DUP8 ADD PUSH2 0x1FEB JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x21DE DUP7 DUP3 DUP8 ADD PUSH2 0x1FEB JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x21EF DUP7 DUP3 DUP8 ADD PUSH2 0x1FEB JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2213 JUMPI PUSH2 0x2212 PUSH2 0x2EBF JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x2221 DUP8 DUP3 DUP9 ADD PUSH2 0x1FEB JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x2232 DUP8 DUP3 DUP9 ADD PUSH2 0x1FEB JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x2243 DUP8 DUP3 DUP9 ADD PUSH2 0x206B JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0x2254 DUP8 DUP3 DUP9 ADD PUSH2 0x2124 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2279 JUMPI PUSH2 0x2278 PUSH2 0x2EBF JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x2287 DUP7 DUP3 DUP8 ADD PUSH2 0x1FEB JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x2298 DUP7 DUP3 DUP8 ADD PUSH2 0x1FEB JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x22A9 DUP7 DUP3 DUP8 ADD PUSH2 0x20FA JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x22CA JUMPI PUSH2 0x22C9 PUSH2 0x2EBF JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x22D8 DUP6 DUP3 DUP7 ADD PUSH2 0x1FEB JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x22E9 DUP6 DUP3 DUP7 ADD PUSH2 0x206B JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x230C JUMPI PUSH2 0x230B PUSH2 0x2EBF JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x231A DUP7 DUP3 DUP8 ADD PUSH2 0x1FEB JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x232B DUP7 DUP3 DUP8 ADD PUSH2 0x206B JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x233C DUP7 DUP3 DUP8 ADD PUSH2 0x2124 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x80 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x235F JUMPI PUSH2 0x235E PUSH2 0x2EBF JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x236D DUP7 DUP3 DUP8 ADD PUSH2 0x1FEB JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x237E DUP7 DUP3 DUP8 ADD PUSH2 0x20AA JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0x238F DUP7 DUP3 DUP8 ADD PUSH2 0x1FEB JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x23B0 JUMPI PUSH2 0x23AF PUSH2 0x2EBF JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x23BE DUP6 DUP3 DUP7 ADD PUSH2 0x1FEB JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x23CF DUP6 DUP3 DUP7 ADD PUSH2 0x20FA JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x23F0 JUMPI PUSH2 0x23EF PUSH2 0x2EBF JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x240E JUMPI PUSH2 0x240D PUSH2 0x2EBA JUMP JUMPDEST JUMPDEST PUSH2 0x241A DUP6 DUP3 DUP7 ADD PUSH2 0x2000 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x243C JUMPI PUSH2 0x243B PUSH2 0x2EBF JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x244A DUP5 DUP3 DUP6 ADD PUSH2 0x2056 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x246F JUMPI PUSH2 0x246E PUSH2 0x2EBF JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x247D DUP9 DUP3 DUP10 ADD PUSH2 0x2080 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0x248E DUP9 DUP3 DUP10 ADD PUSH2 0x2095 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH2 0x249F DUP9 DUP3 DUP10 ADD PUSH2 0x20FA JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 PUSH2 0x24B0 DUP9 DUP3 DUP10 ADD PUSH2 0x206B JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 PUSH2 0x24C1 DUP9 DUP3 DUP10 ADD PUSH2 0x20FA JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x24E4 JUMPI PUSH2 0x24E3 PUSH2 0x2EBF JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x24F2 DUP5 DUP3 DUP6 ADD PUSH2 0x210F JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2507 DUP4 DUP4 PUSH2 0x2593 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2518 DUP2 PUSH2 0x2C44 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2529 DUP3 PUSH2 0x2AC3 JUMP JUMPDEST PUSH2 0x2533 DUP2 DUP6 PUSH2 0x2AF1 JUMP JUMPDEST SWAP4 POP DUP4 PUSH1 0x20 DUP3 MUL DUP6 ADD PUSH2 0x2545 DUP6 PUSH2 0x2AB3 JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x2581 JUMPI DUP5 DUP5 SUB DUP10 MSTORE DUP2 MLOAD PUSH2 0x2562 DUP6 DUP3 PUSH2 0x24FB JUMP JUMPDEST SWAP5 POP PUSH2 0x256D DUP4 PUSH2 0x2AE4 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP11 ADD SWAP10 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x2549 JUMP JUMPDEST POP DUP3 SWAP8 POP DUP8 SWAP6 POP POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x259E DUP3 PUSH2 0x2ACE JUMP JUMPDEST PUSH2 0x25A8 DUP2 DUP6 PUSH2 0x2B02 JUMP JUMPDEST SWAP4 POP PUSH2 0x25B8 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x2D2E JUMP JUMPDEST PUSH2 0x25C1 DUP2 PUSH2 0x2EC4 JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x25D7 DUP3 PUSH2 0x2ACE JUMP JUMPDEST PUSH2 0x25E1 DUP2 DUP6 PUSH2 0x2B13 JUMP JUMPDEST SWAP4 POP PUSH2 0x25F1 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x2D2E JUMP JUMPDEST DUP1 DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2606 DUP2 PUSH2 0x2CE6 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x2615 DUP2 PUSH2 0x2CE6 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x2624 DUP2 PUSH2 0x2D0A JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2635 DUP3 PUSH2 0x2AD9 JUMP JUMPDEST PUSH2 0x263F DUP2 DUP6 PUSH2 0x2B1E JUMP JUMPDEST SWAP4 POP PUSH2 0x264F DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x2D2E JUMP JUMPDEST PUSH2 0x2658 DUP2 PUSH2 0x2EC4 JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2670 PUSH1 0x17 DUP4 PUSH2 0x2B1E JUMP JUMPDEST SWAP2 POP PUSH2 0x267B DUP3 PUSH2 0x2ED5 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2693 PUSH1 0x26 DUP4 PUSH2 0x2B1E JUMP JUMPDEST SWAP2 POP PUSH2 0x269E DUP3 PUSH2 0x2EFE JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x26B6 PUSH1 0x26 DUP4 PUSH2 0x2B1E JUMP JUMPDEST SWAP2 POP PUSH2 0x26C1 DUP3 PUSH2 0x2F4D JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x26D9 PUSH1 0x1D DUP4 PUSH2 0x2B1E JUMP JUMPDEST SWAP2 POP PUSH2 0x26E4 DUP3 PUSH2 0x2F9C JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x26FC PUSH1 0x2A DUP4 PUSH2 0x2B1E JUMP JUMPDEST SWAP2 POP PUSH2 0x2707 DUP3 PUSH2 0x2FC5 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x271F PUSH1 0x1C DUP4 PUSH2 0x2B1E JUMP JUMPDEST SWAP2 POP PUSH2 0x272A DUP3 PUSH2 0x3014 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP3 ADD PUSH1 0x0 DUP3 ADD MLOAD PUSH2 0x274B PUSH1 0x0 DUP6 ADD DUP3 PUSH2 0x25FD JUMP JUMPDEST POP PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x275E PUSH1 0x20 DUP6 ADD DUP3 PUSH2 0x2782 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x276D DUP2 PUSH2 0x2CB8 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x277C DUP2 PUSH2 0x2CC2 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x278B DUP2 PUSH2 0x2CD2 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x279A DUP2 PUSH2 0x2CD2 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x27AC DUP3 DUP5 PUSH2 0x25CC JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x27CC PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x250F JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x27E7 PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x250F JUMP JUMPDEST PUSH2 0x27F4 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x250F JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD SWAP1 POP PUSH2 0x2810 PUSH1 0x0 DUP4 ADD DUP7 PUSH2 0x250F JUMP JUMPDEST PUSH2 0x281D PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x250F JUMP JUMPDEST PUSH2 0x282A PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x2764 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x284C DUP2 DUP5 PUSH2 0x251E JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x2869 PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x260C JUMP JUMPDEST PUSH2 0x2876 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2791 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x2892 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x261B JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x28B2 DUP2 DUP5 PUSH2 0x262A JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x28D3 DUP2 PUSH2 0x2663 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x28F3 DUP2 PUSH2 0x2686 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x2913 DUP2 PUSH2 0x26A9 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x2933 DUP2 PUSH2 0x26CC JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x2953 DUP2 PUSH2 0x26EF JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x2973 DUP2 PUSH2 0x2712 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x298F PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x2735 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x29AA PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x2764 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x29C5 PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x2764 JUMP JUMPDEST PUSH2 0x29D2 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2764 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD SWAP1 POP PUSH2 0x29EE PUSH1 0x0 DUP4 ADD DUP7 PUSH2 0x2764 JUMP JUMPDEST PUSH2 0x29FB PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x2764 JUMP JUMPDEST PUSH2 0x2A08 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x2764 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x2A25 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x2773 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SUB DUP5 CALLDATASIZE SUB SUB DUP2 SLT PUSH2 0x2A48 JUMPI PUSH2 0x2A47 PUSH2 0x2EAB JUMP JUMPDEST JUMPDEST DUP1 DUP5 ADD SWAP3 POP DUP3 CALLDATALOAD SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x2A6A JUMPI PUSH2 0x2A69 PUSH2 0x2EA1 JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP4 ADD SWAP3 POP PUSH1 0x1 DUP3 MUL CALLDATASIZE SUB DUP4 SGT ISZERO PUSH2 0x2A86 JUMPI PUSH2 0x2A85 PUSH2 0x2EB5 JUMP JUMPDEST JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2A98 PUSH2 0x2AA9 JUMP JUMPDEST SWAP1 POP PUSH2 0x2AA4 DUP3 DUP3 PUSH2 0x2D61 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2B3A DUP3 PUSH2 0x2CB8 JUMP JUMPDEST SWAP2 POP PUSH2 0x2B45 DUP4 PUSH2 0x2CB8 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x2B7A JUMPI PUSH2 0x2B79 PUSH2 0x2DDB JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2B90 DUP3 PUSH2 0x2CB8 JUMP JUMPDEST SWAP2 POP PUSH2 0x2B9B DUP4 PUSH2 0x2CB8 JUMP JUMPDEST SWAP3 POP DUP3 PUSH2 0x2BAB JUMPI PUSH2 0x2BAA PUSH2 0x2E0A JUMP JUMPDEST JUMPDEST DUP3 DUP3 DIV SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2BC1 DUP3 PUSH2 0x2CB8 JUMP JUMPDEST SWAP2 POP PUSH2 0x2BCC DUP4 PUSH2 0x2CB8 JUMP JUMPDEST SWAP3 POP DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x2C05 JUMPI PUSH2 0x2C04 PUSH2 0x2DDB JUMP JUMPDEST JUMPDEST DUP3 DUP3 MUL SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C1B DUP3 PUSH2 0x2CB8 JUMP JUMPDEST SWAP2 POP PUSH2 0x2C26 DUP4 PUSH2 0x2CB8 JUMP JUMPDEST SWAP3 POP DUP3 DUP3 LT ISZERO PUSH2 0x2C39 JUMPI PUSH2 0x2C38 PUSH2 0x2DDB JUMP JUMPDEST JUMPDEST DUP3 DUP3 SUB SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C4F DUP3 PUSH2 0x2C98 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C6D DUP3 PUSH2 0x2C44 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C7F DUP3 PUSH2 0x2C44 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C91 DUP3 PUSH2 0x2C44 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2CF1 DUP3 PUSH2 0x2CF8 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2D03 DUP3 PUSH2 0x2C98 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2D15 DUP3 PUSH2 0x2D1C JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2D27 DUP3 PUSH2 0x2C98 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2D4C JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x2D31 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x2D5B JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x2D6A DUP3 PUSH2 0x2EC4 JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x2D89 JUMPI PUSH2 0x2D88 PUSH2 0x2E68 JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2D9D DUP3 PUSH2 0x2CB8 JUMP JUMPDEST SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x2DD0 JUMPI PUSH2 0x2DCF PUSH2 0x2DDB JUMP JUMPDEST JUMPDEST PUSH1 0x1 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x475265776172642F6F6E6C792D6C697175696461746F72000000000000000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x722063616C6C0000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x6E74726163740000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x6F74207375636365656400000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x475265776172642F6F6E6C792D4761756765436F6E74726F6C6C657200000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH2 0x3046 DUP2 PUSH2 0x2C44 JUMP JUMPDEST DUP2 EQ PUSH2 0x3051 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x305D DUP2 PUSH2 0x2C56 JUMP JUMPDEST DUP2 EQ PUSH2 0x3068 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x3074 DUP2 PUSH2 0x2C62 JUMP JUMPDEST DUP2 EQ PUSH2 0x307F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x308B DUP2 PUSH2 0x2C74 JUMP JUMPDEST DUP2 EQ PUSH2 0x3096 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x30A2 DUP2 PUSH2 0x2C86 JUMP JUMPDEST DUP2 EQ PUSH2 0x30AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x30B9 DUP2 PUSH2 0x2CB8 JUMP JUMPDEST DUP2 EQ PUSH2 0x30C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x30D0 DUP2 PUSH2 0x2CD2 JUMP JUMPDEST DUP2 EQ PUSH2 0x30DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2064656C65 PUSH8 0x6174652063616C6C KECCAK256 PUSH7 0x61696C6564A264 PUSH10 0x706673582212207AA429 SUB 0xEB ADDRESS 0xC0 0xBC MOD CHAINID 0x5F 0xC4 DUP3 0xCE DIV 0xBD LOG3 DUP16 0xD8 0xE8 DUP8 MSTORE8 STATICCALL 0xDD GASLIMIT CALLDATASIZE 0x24 EXTCODECOPY 0xAA LOG1 DUP14 0xBB PUSH5 0x736F6C6343 STOP ADDMOD MOD STOP CALLER ",
							"sourceMap": "743:18720:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1024:77;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9630:212;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2644:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10591:198;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2341:58;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;6703:138;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1582:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9379:212;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2455:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;407:308:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2778:23:6;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11090:351;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1285:134;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7166:351;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1873:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10119:269;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2540:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8011:1329;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1024:77;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9630:212::-;19394:15;;;;;;;;;;;19372:38;;:10;:38;;;19364:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;9793:42:::1;9803:6;9811:5;9818:16;9793:9;:42::i;:::-;9630:212:::0;;;:::o;2644:25::-;;;;;;;;;;;;;:::o;10591:198::-;10659:21;10683:15;;;;;;;;;;;:35;;;10719:6;10727:5;10683:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10659:74;;10743:39;10753:6;10761:5;10768:13;10743:9;:39::i;:::-;10649:140;10591:198;;:::o;2341:58::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6703:138::-;6770:18;;:::i;:::-;6807:27;6827:6;6807:19;:27::i;:::-;6800:34;;6703:138;;;:::o;1582:123::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9379:212::-;19394:15;;;;;;;;;;;19372:38;;:10;:38;;;19364:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;9542:42:::1;9552:6;9560:5;9567:16;9542:9;:42::i;:::-;9379:212:::0;;;:::o;2455:39::-;;;;;;;;;;;;;:::o;407:308:4:-;475:22;531:4;;:11;;519:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;509:34;;558:9;553:132;577:4;;:11;;573:1;:15;553:132;;;622:52;659:4;666;;671:1;666:7;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;622:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:28;:52::i;:::-;609:7;617:1;609:10;;;;;;;;:::i;:::-;;;;;;;:65;;;;590:3;;;;;:::i;:::-;;;;553:132;;;;407:308;;;;:::o;2778:23:6:-;;;;;;;;;;;;;:::o;11090:351::-;11154:7;11173:16;11192:23;:30;11216:5;11192:30;;;;;;;;;;;;;;;:38;11223:6;11192:38;;;;;;;;;;;;;;;;11173:57;;11282:1;11241:23;:30;11265:5;11241:30;;;;;;;;;;;;;;;:38;11272:6;11241:38;;;;;;;;;;;;;;;:42;;;;11293:47;11317:5;;;;;;;;;;;11324;11331:8;11293:6;:23;;;;:47;;;;;;:::i;:::-;11391:6;11356:52;;11384:5;11356:52;;11372:10;11356:52;;;11399:8;11356:52;;;;;;:::i;:::-;;;;;;;;11426:8;11419:15;;;11090:351;;;;:::o;1285:134::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7166:351::-;7303:7;7322:21;7346:15;;;;;;;;;;;:35;;;7382:6;7390:5;7346:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7322:74;;7407:16;7429:55;7441:6;7449:12;7463:5;7470:13;7429:11;:55::i;:::-;7406:78;;;7502:8;7495:15;;;;7166:351;;;;;:::o;1873:110::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10119:269::-;10247:21;10271:15;;;;;;;;;;;:35;;;10307:6;10315:5;10271:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10247:74;;10331:50;10338:6;10346:12;10360:5;10367:13;10331:6;:50::i;:::-;10237:151;10119:269;;;:::o;2540:20::-;;;;;;;;;;;;;:::o;8011:1329::-;8201:10;;;;;;;;;;;8187:24;;:10;:24;;;8179:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;8250:14;8275:7;8250:33;;8294:31;8328:27;8348:6;8328:19;:27::i;:::-;8294:61;;8380:12;:18;;;8370:28;;:6;:28;;;8366:445;;8414:25;8442:15;8414:43;;8472:34;8509:112;;;;;;;;8546:6;8509:112;;;;;;8588:17;8509:112;;;;;8472:149;;8636:17;:25;8654:6;8636:25;;;;;;;;;;;;;;;8667:15;8636:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8729:6;8703:52;;8721:6;8703:52;;;8737:17;8703:52;;;;;;:::i;:::-;;;;;;;;8785:15;8770:30;;8400:411;;8366:445;8821:21;8874:3;8861:9;;;;;;;;;;;8846:24;;:12;:24;;;;:::i;:::-;8845:32;;;;:::i;:::-;8821:56;;8887:21;8911:15;;;;;;;;;;;:31;;;8943:6;8911:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8887:63;;9028:21;9068:1;9052:13;:17;:62;;9113:1;9052:62;;;9097:13;9089:4;9073:13;:20;;;;:::i;:::-;9072:38;;;;:::i;:::-;9052:62;9028:86;;9232:13;9125:29;:37;9155:6;9125:37;;;;;;;;;;;;;;;:57;9163:12;:18;;;9125:57;;;;;;;;;;;;;;;:103;9196:12;:22;;;9125:103;;;;;;;;;;;;;;;;:120;;;;;;;:::i;:::-;;;;;;;;9282:6;9261:72;;9274:6;9261:72;;;9290:12;9304:13;9319;9261:72;;;;;;;;:::i;:::-;;;;;;;;8169:1171;;;;;8011:1329;;;;;:::o;18281:930::-;18403:32;18438:17;:25;18456:6;18438:25;;;;;;;;;;;;;;;:32;;;;18403:67;;18481:31;;:::i;:::-;18554:1;18527:24;:28;18523:682;;;18571:9;18583:24;18571:36;;18622:376;18633:1;18629;:5;18622:376;;;18662:1;18658;:5;;;;:::i;:::-;18654:9;;18696:17;:25;18714:6;18696:25;;;;;;;;;;;;;;;18722:1;18696:28;;;;;;;;:::i;:::-;;;;;;;;;18681:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18742:57;18756:6;18764:12;18778:5;18785:13;18742;:57::i;:::-;;18817:166;18883:5;18910:6;18946:12;:18;;;18817:44;:166::i;:::-;18622:376;;;18557:451;18523:682;;;19123:71;19168:5;19175:6;19191:1;19123:44;:71::i;:::-;18523:682;18393:818;;18281:930;;;:::o;11716:438::-;11784:18;;:::i;:::-;11814:39;11856:17;:25;11874:6;11856:25;;;;;;;;;;;;;;;11814:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11891:32;11926:18;:25;11891:60;;11993:1;11966:24;:28;11962:186;;;12017:18;12063:1;12036:24;:28;;;;:::i;:::-;12017:48;;;;;;;;:::i;:::-;;;;;;;;12010:55;;;;;;11962:186;12103:34;;;;;;;;12130:1;12103:34;;;;;;12135:1;12103:34;;;;;12096:41;;;;11716:438;;;;:::o;6570:198:3:-;6653:12;6684:77;6705:6;6713:4;6684:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;6677:84;;6570:198;;;;:::o;974:241:2:-;1112:96;1132:5;1162:27;;;1191:4;1197:2;1201:5;1139:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1112:19;:96::i;:::-;974:241;;;;:::o;13961:2308:6:-;14130:16;14148:21;14181:29;14213:33;:40;14247:5;14213:40;;;;;;;;;;;;;;;:48;14254:6;14213:48;;;;;;;;;;;;;;;:90;14275:12;:18;;;14213:90;;;;;;;;;;;;;;;:114;14304:12;:22;;;14213:114;;;;;;;;;;;;;;;;14181:146;;14338:28;14369:29;:37;14399:6;14369:37;;;;;;;;;;;;;;;:57;14407:12;:18;;;14369:57;;;;;;;;;;;;;;;:103;14440:12;:22;;;14369:103;;;;;;;;;;;;;;;;14338:134;;14483:33;14519:134;14577:5;14596:6;14624:12;:18;;;14519:44;:134::i;:::-;14483:170;;14697:1;14668:25;:30;14664:1061;;;14714:39;14756:17;:25;14774:6;14756:25;;;;;;;;;;;;;;;14714:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14795:32;14830:18;:25;14795:60;;14901:1;14874:24;:28;14870:495;;;14922:39;14964:18;15031:1;15004:24;:28;;;;:::i;:::-;14964:86;;;;;;;;:::i;:::-;;;;;;;;14922:128;;15176:174;15242:5;15269:6;15305:20;:26;;;15176:44;:174::i;:::-;15148:202;;14904:461;14870:495;15412:1;15383:25;:30;15379:336;;;15551:149;15617:5;15644:6;15680:1;15551:44;:149::i;:::-;15523:177;;15379:336;14700:1025;;14664:1061;15735:30;15796:1;15768:25;:29;:95;;;;;15838:25;15813:12;:22;;;:50;;;15768:95;15735:128;;15944:25;15943:26;:56;;;;;15998:1;15973:21;:26;15943:56;15939:119;;;16023:1;16026:20;16015:32;;;;;;;;;;15939:119;16214:4;16197:13;16172:21;16149:20;:44;;;;:::i;:::-;16148:62;;;;:::i;:::-;16147:71;;;;:::i;:::-;16232:20;16068:194;;;;;;;;13961:2308;;;;;;;;:::o;17625:322::-;17785:57;17799:6;17807:12;17821:5;17828:13;17785;:57::i;:::-;;17852:88;17897:5;17904:6;17920:12;:18;;;17852:44;:88::i;:::-;17625:322;;;;:::o;16584:724::-;16750:7;16770:16;16788:21;16813:113;16838:6;16858:12;16884:5;16903:13;16813:11;:113::i;:::-;16769:157;;;;17054:13;16937:33;:40;16971:5;16937:40;;;;;;;;;;;;;;;:48;16978:6;16937:48;;;;;;;;;;;;;;;:68;16986:12;:18;;;16937:68;;;;;;;;;;;;;;;:114;17019:12;:22;;;16937:114;;;;;;;;;;;;;;;:130;;;;17093:1;17082:8;:12;17078:198;;;17164:8;17110:23;:30;17134:5;17110:30;;;;;;;;;;;;;;;:50;17141:12;:18;;;17110:50;;;;;;;;;;;;;;;;:62;;;;;;;:::i;:::-;;;;;;;;17234:5;17191:74;;17214:12;:18;;;17191:74;;17206:6;17191:74;;;17241:8;17251:13;17191:74;;;;;;;:::i;:::-;;;;;;;;17078:198;17293:8;17286:15;;;;16584:724;;;;;;:::o;13205:294::-;13467:15;13368:124;;:40;:47;13409:5;13368:47;;;;;;;;;;;;;;;:55;13416:6;13368:55;;;;;;;;;;;;;;;:76;13424:19;13368:76;;;;;;;;;;;;;;;:124;;;;13205:294;;;:::o;6954:387:3:-;7095:12;7127:18;7138:6;7127:10;:18::i;:::-;7119:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;7200:12;7214:23;7241:6;:19;;7261:4;7241:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7199:67;;;;7283:51;7300:7;7309:10;7321:12;7283:16;:51::i;:::-;7276:58;;;;6954:387;;;;;:::o;3747:706:2:-;4166:23;4192:69;4220:4;4192:69;;;;;;;;;;;;;;;;;4200:5;4192:27;;;;:69;;;;;:::i;:::-;4166:95;;4295:1;4275:10;:17;:21;4271:176;;;4370:10;4359:30;;;;;;;;;;;;:::i;:::-;4351:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4271:176;3817:636;3747:706;;:::o;12579:276:6:-;12746:7;12772:40;:47;12813:5;12772:47;;;;;;;;;;;;;;;:55;12820:6;12772:55;;;;;;;;;;;;;;;:76;12828:19;12772:76;;;;;;;;;;;;;;;;12765:83;;12579:276;;;;;:::o;1175:320:3:-;1235:4;1487:1;1465:7;:19;;;:23;1458:30;;1175:320;;;:::o;7561:742::-;7707:12;7735:7;7731:566;;;7765:10;7758:17;;;;7731:566;7896:1;7876:10;:17;:21;7872:415;;;8120:10;8114:17;8180:15;8167:10;8163:2;8159:19;8152:44;7872:415;8259:12;8252:20;;;;;;;;;;;:::i;:::-;;;;;;;;7561:742;;;;;;:::o;3861:223::-;3994:12;4025:52;4047:6;4055:4;4061:1;4064:12;4025:21;:52::i;:::-;4018:59;;3861:223;;;;;:::o;4948:499::-;5113:12;5170:5;5145:21;:30;;5137:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;5236:18;5247:6;5236:10;:18::i;:::-;5228:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;5300:12;5314:23;5341:6;:11;;5360:5;5367:4;5341:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5299:73;;;;5389:51;5406:7;5415:10;5427:12;5389:16;:51::i;:::-;5382:58;;;;4948:499;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;:::o;7:139:19:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;167:579::-;251:8;261:6;311:3;304:4;296:6;292:17;288:27;278:2;;319:79;;:::i;:::-;278:2;432:6;419:20;409:30;;462:18;454:6;451:30;448:2;;;484:79;;:::i;:::-;448:2;598:4;590:6;586:17;574:29;;652:3;644:4;636:6;632:17;622:8;618:32;615:41;612:2;;;659:79;;:::i;:::-;612:2;268:478;;;;;:::o;752:137::-;806:5;837:6;831:13;822:22;;853:30;877:5;853:30;:::i;:::-;812:77;;;;:::o;895:165::-;954:5;992:6;979:20;970:29;;1008:46;1048:5;1008:46;:::i;:::-;960:100;;;;:::o;1066:177::-;1131:5;1169:6;1156:20;1147:29;;1185:52;1231:5;1185:52;:::i;:::-;1137:106;;;;:::o;1249:171::-;1311:5;1349:6;1336:20;1327:29;;1365:49;1408:5;1365:49;:::i;:::-;1317:103;;;;:::o;1464:596::-;1542:5;1586:4;1574:9;1569:3;1565:19;1561:30;1558:2;;;1594:79;;:::i;:::-;1558:2;1693:21;1709:4;1693:21;:::i;:::-;1684:30;;1774:1;1814:62;1872:3;1863:6;1852:9;1848:22;1814:62;:::i;:::-;1807:4;1800:5;1796:16;1789:88;1724:164;1952:2;1993:48;2037:3;2028:6;2017:9;2013:22;1993:48;:::i;:::-;1986:4;1979:5;1975:16;1968:74;1898:155;1548:512;;;;:::o;2066:139::-;2112:5;2150:6;2137:20;2128:29;;2166:33;2193:5;2166:33;:::i;:::-;2118:87;;;;:::o;2211:143::-;2268:5;2299:6;2293:13;2284:22;;2315:33;2342:5;2315:33;:::i;:::-;2274:80;;;;:::o;2360:137::-;2405:5;2443:6;2430:20;2421:29;;2459:32;2485:5;2459:32;:::i;:::-;2411:86;;;;:::o;2503:329::-;2562:6;2611:2;2599:9;2590:7;2586:23;2582:32;2579:2;;;2617:79;;:::i;:::-;2579:2;2737:1;2762:53;2807:7;2798:6;2787:9;2783:22;2762:53;:::i;:::-;2752:63;;2708:117;2569:263;;;;:::o;2838:474::-;2906:6;2914;2963:2;2951:9;2942:7;2938:23;2934:32;2931:2;;;2969:79;;:::i;:::-;2931:2;3089:1;3114:53;3159:7;3150:6;3139:9;3135:22;3114:53;:::i;:::-;3104:63;;3060:117;3216:2;3242:53;3287:7;3278:6;3267:9;3263:22;3242:53;:::i;:::-;3232:63;;3187:118;2921:391;;;;;:::o;3318:619::-;3395:6;3403;3411;3460:2;3448:9;3439:7;3435:23;3431:32;3428:2;;;3466:79;;:::i;:::-;3428:2;3586:1;3611:53;3656:7;3647:6;3636:9;3632:22;3611:53;:::i;:::-;3601:63;;3557:117;3713:2;3739:53;3784:7;3775:6;3764:9;3760:22;3739:53;:::i;:::-;3729:63;;3684:118;3841:2;3867:53;3912:7;3903:6;3892:9;3888:22;3867:53;:::i;:::-;3857:63;;3812:118;3418:519;;;;;:::o;3943:789::-;4041:6;4049;4057;4065;4114:3;4102:9;4093:7;4089:23;4085:33;4082:2;;;4121:79;;:::i;:::-;4082:2;4241:1;4266:53;4311:7;4302:6;4291:9;4287:22;4266:53;:::i;:::-;4256:63;;4212:117;4368:2;4394:53;4439:7;4430:6;4419:9;4415:22;4394:53;:::i;:::-;4384:63;;4339:118;4496:2;4522:66;4580:7;4571:6;4560:9;4556:22;4522:66;:::i;:::-;4512:76;;4467:131;4637:2;4663:52;4707:7;4698:6;4687:9;4683:22;4663:52;:::i;:::-;4653:62;;4608:117;4072:660;;;;;;;:::o;4738:619::-;4815:6;4823;4831;4880:2;4868:9;4859:7;4855:23;4851:32;4848:2;;;4886:79;;:::i;:::-;4848:2;5006:1;5031:53;5076:7;5067:6;5056:9;5052:22;5031:53;:::i;:::-;5021:63;;4977:117;5133:2;5159:53;5204:7;5195:6;5184:9;5180:22;5159:53;:::i;:::-;5149:63;;5104:118;5261:2;5287:53;5332:7;5323:6;5312:9;5308:22;5287:53;:::i;:::-;5277:63;;5232:118;4838:519;;;;;:::o;5363:500::-;5444:6;5452;5501:2;5489:9;5480:7;5476:23;5472:32;5469:2;;;5507:79;;:::i;:::-;5469:2;5627:1;5652:53;5697:7;5688:6;5677:9;5673:22;5652:53;:::i;:::-;5642:63;;5598:117;5754:2;5780:66;5838:7;5829:6;5818:9;5814:22;5780:66;:::i;:::-;5770:76;;5725:131;5459:404;;;;;:::o;5869:643::-;5958:6;5966;5974;6023:2;6011:9;6002:7;5998:23;5994:32;5991:2;;;6029:79;;:::i;:::-;5991:2;6149:1;6174:53;6219:7;6210:6;6199:9;6195:22;6174:53;:::i;:::-;6164:63;;6120:117;6276:2;6302:66;6360:7;6351:6;6340:9;6336:22;6302:66;:::i;:::-;6292:76;;6247:131;6417:2;6443:52;6487:7;6478:6;6467:9;6463:22;6443:52;:::i;:::-;6433:62;;6388:117;5981:531;;;;;:::o;6518:678::-;6624:6;6632;6640;6689:3;6677:9;6668:7;6664:23;6660:33;6657:2;;;6696:79;;:::i;:::-;6657:2;6816:1;6841:53;6886:7;6877:6;6866:9;6862:22;6841:53;:::i;:::-;6831:63;;6787:117;6943:2;6969:82;7043:7;7034:6;7023:9;7019:22;6969:82;:::i;:::-;6959:92;;6914:147;7100:2;7126:53;7171:7;7162:6;7151:9;7147:22;7126:53;:::i;:::-;7116:63;;7071:118;6647:549;;;;;:::o;7202:474::-;7270:6;7278;7327:2;7315:9;7306:7;7302:23;7298:32;7295:2;;;7333:79;;:::i;:::-;7295:2;7453:1;7478:53;7523:7;7514:6;7503:9;7499:22;7478:53;:::i;:::-;7468:63;;7424:117;7580:2;7606:53;7651:7;7642:6;7631:9;7627:22;7606:53;:::i;:::-;7596:63;;7551:118;7285:391;;;;;:::o;7682:581::-;7779:6;7787;7836:2;7824:9;7815:7;7811:23;7807:32;7804:2;;;7842:79;;:::i;:::-;7804:2;7990:1;7979:9;7975:17;7962:31;8020:18;8012:6;8009:30;8006:2;;;8042:79;;:::i;:::-;8006:2;8155:91;8238:7;8229:6;8218:9;8214:22;8155:91;:::i;:::-;8137:109;;;;7933:323;7794:469;;;;;:::o;8269:345::-;8336:6;8385:2;8373:9;8364:7;8360:23;8356:32;8353:2;;;8391:79;;:::i;:::-;8353:2;8511:1;8536:61;8589:7;8580:6;8569:9;8565:22;8536:61;:::i;:::-;8526:71;;8482:125;8343:271;;;;:::o;8620:1007::-;8763:6;8771;8779;8787;8795;8844:3;8832:9;8823:7;8819:23;8815:33;8812:2;;;8851:79;;:::i;:::-;8812:2;8971:1;8996:72;9060:7;9051:6;9040:9;9036:22;8996:72;:::i;:::-;8986:82;;8942:136;9117:2;9143:69;9204:7;9195:6;9184:9;9180:22;9143:69;:::i;:::-;9133:79;;9088:134;9261:2;9287:53;9332:7;9323:6;9312:9;9308:22;9287:53;:::i;:::-;9277:63;;9232:118;9389:2;9415:66;9473:7;9464:6;9453:9;9449:22;9415:66;:::i;:::-;9405:76;;9360:131;9530:3;9557:53;9602:7;9593:6;9582:9;9578:22;9557:53;:::i;:::-;9547:63;;9501:119;8802:825;;;;;;;;:::o;9633:351::-;9703:6;9752:2;9740:9;9731:7;9727:23;9723:32;9720:2;;;9758:79;;:::i;:::-;9720:2;9878:1;9903:64;9959:7;9950:6;9939:9;9935:22;9903:64;:::i;:::-;9893:74;;9849:128;9710:274;;;;:::o;9990:192::-;10077:10;10112:64;10172:3;10164:6;10112:64;:::i;:::-;10098:78;;10088:94;;;;:::o;10188:118::-;10275:24;10293:5;10275:24;:::i;:::-;10270:3;10263:37;10253:53;;:::o;10338:983::-;10475:3;10504:63;10561:5;10504:63;:::i;:::-;10583:95;10671:6;10666:3;10583:95;:::i;:::-;10576:102;;10704:3;10749:4;10741:6;10737:17;10732:3;10728:27;10779:65;10838:5;10779:65;:::i;:::-;10867:7;10898:1;10883:393;10908:6;10905:1;10902:13;10883:393;;;10979:9;10973:4;10969:20;10964:3;10957:33;11030:6;11024:13;11058:82;11135:4;11120:13;11058:82;:::i;:::-;11050:90;;11163:69;11225:6;11163:69;:::i;:::-;11153:79;;11261:4;11256:3;11252:14;11245:21;;10943:333;10930:1;10927;10923:9;10918:14;;10883:393;;;10887:14;11292:4;11285:11;;11312:3;11305:10;;10480:841;;;;;;;;;:::o;11327:340::-;11403:3;11431:38;11463:5;11431:38;:::i;:::-;11485:60;11538:6;11533:3;11485:60;:::i;:::-;11478:67;;11554:52;11599:6;11594:3;11587:4;11580:5;11576:16;11554:52;:::i;:::-;11631:29;11653:6;11631:29;:::i;:::-;11626:3;11622:39;11615:46;;11407:260;;;;;:::o;11673:373::-;11777:3;11805:38;11837:5;11805:38;:::i;:::-;11859:88;11940:6;11935:3;11859:88;:::i;:::-;11852:95;;11956:52;12001:6;11996:3;11989:4;11982:5;11978:16;11956:52;:::i;:::-;12033:6;12028:3;12024:16;12017:23;;11781:265;;;;;:::o;12052:147::-;12142:50;12186:5;12142:50;:::i;:::-;12137:3;12130:63;12120:79;;:::o;12205:157::-;12305:50;12349:5;12305:50;:::i;:::-;12300:3;12293:63;12283:79;;:::o;12368:181::-;12480:62;12536:5;12480:62;:::i;:::-;12475:3;12468:75;12458:91;;:::o;12555:364::-;12643:3;12671:39;12704:5;12671:39;:::i;:::-;12726:71;12790:6;12785:3;12726:71;:::i;:::-;12719:78;;12806:52;12851:6;12846:3;12839:4;12832:5;12828:16;12806:52;:::i;:::-;12883:29;12905:6;12883:29;:::i;:::-;12878:3;12874:39;12867:46;;12647:272;;;;;:::o;12925:366::-;13067:3;13088:67;13152:2;13147:3;13088:67;:::i;:::-;13081:74;;13164:93;13253:3;13164:93;:::i;:::-;13282:2;13277:3;13273:12;13266:19;;13071:220;;;:::o;13297:366::-;13439:3;13460:67;13524:2;13519:3;13460:67;:::i;:::-;13453:74;;13536:93;13625:3;13536:93;:::i;:::-;13654:2;13649:3;13645:12;13638:19;;13443:220;;;:::o;13669:366::-;13811:3;13832:67;13896:2;13891:3;13832:67;:::i;:::-;13825:74;;13908:93;13997:3;13908:93;:::i;:::-;14026:2;14021:3;14017:12;14010:19;;13815:220;;;:::o;14041:366::-;14183:3;14204:67;14268:2;14263:3;14204:67;:::i;:::-;14197:74;;14280:93;14369:3;14280:93;:::i;:::-;14398:2;14393:3;14389:12;14382:19;;14187:220;;;:::o;14413:366::-;14555:3;14576:67;14640:2;14635:3;14576:67;:::i;:::-;14569:74;;14652:93;14741:3;14652:93;:::i;:::-;14770:2;14765:3;14761:12;14754:19;;14559:220;;;:::o;14785:366::-;14927:3;14948:67;15012:2;15007:3;14948:67;:::i;:::-;14941:74;;15024:93;15113:3;15024:93;:::i;:::-;15142:2;15137:3;15133:12;15126:19;;14931:220;;;:::o;15229:532::-;15384:4;15379:3;15375:14;15472:4;15465:5;15461:16;15455:23;15491:76;15561:4;15556:3;15552:14;15538:12;15491:76;:::i;:::-;15399:178;15664:4;15657:5;15653:16;15647:23;15683:61;15738:4;15733:3;15729:14;15715:12;15683:61;:::i;:::-;15587:167;15353:408;;;:::o;15767:118::-;15854:24;15872:5;15854:24;:::i;:::-;15849:3;15842:37;15832:53;;:::o;15891:115::-;15976:23;15993:5;15976:23;:::i;:::-;15971:3;15964:36;15954:52;;:::o;16012:105::-;16087:23;16104:5;16087:23;:::i;:::-;16082:3;16075:36;16065:52;;:::o;16123:115::-;16208:23;16225:5;16208:23;:::i;:::-;16203:3;16196:36;16186:52;;:::o;16244:271::-;16374:3;16396:93;16485:3;16476:6;16396:93;:::i;:::-;16389:100;;16506:3;16499:10;;16378:137;;;;:::o;16521:222::-;16614:4;16652:2;16641:9;16637:18;16629:26;;16665:71;16733:1;16722:9;16718:17;16709:6;16665:71;:::i;:::-;16619:124;;;;:::o;16749:332::-;16870:4;16908:2;16897:9;16893:18;16885:26;;16921:71;16989:1;16978:9;16974:17;16965:6;16921:71;:::i;:::-;17002:72;17070:2;17059:9;17055:18;17046:6;17002:72;:::i;:::-;16875:206;;;;;:::o;17087:442::-;17236:4;17274:2;17263:9;17259:18;17251:26;;17287:71;17355:1;17344:9;17340:17;17331:6;17287:71;:::i;:::-;17368:72;17436:2;17425:9;17421:18;17412:6;17368:72;:::i;:::-;17450;17518:2;17507:9;17503:18;17494:6;17450:72;:::i;:::-;17241:288;;;;;;:::o;17535:409::-;17696:4;17734:2;17723:9;17719:18;17711:26;;17783:9;17777:4;17773:20;17769:1;17758:9;17754:17;17747:47;17811:126;17932:4;17923:6;17811:126;:::i;:::-;17803:134;;17701:243;;;;:::o;17950:354::-;18082:4;18120:2;18109:9;18105:18;18097:26;;18133:84;18214:1;18203:9;18199:17;18190:6;18133:84;:::i;:::-;18227:70;18293:2;18282:9;18278:18;18269:6;18227:70;:::i;:::-;18087:217;;;;;:::o;18310:272::-;18428:4;18466:2;18455:9;18451:18;18443:26;;18479:96;18572:1;18561:9;18557:17;18548:6;18479:96;:::i;:::-;18433:149;;;;:::o;18588:313::-;18701:4;18739:2;18728:9;18724:18;18716:26;;18788:9;18782:4;18778:20;18774:1;18763:9;18759:17;18752:47;18816:78;18889:4;18880:6;18816:78;:::i;:::-;18808:86;;18706:195;;;;:::o;18907:419::-;19073:4;19111:2;19100:9;19096:18;19088:26;;19160:9;19154:4;19150:20;19146:1;19135:9;19131:17;19124:47;19188:131;19314:4;19188:131;:::i;:::-;19180:139;;19078:248;;;:::o;19332:419::-;19498:4;19536:2;19525:9;19521:18;19513:26;;19585:9;19579:4;19575:20;19571:1;19560:9;19556:17;19549:47;19613:131;19739:4;19613:131;:::i;:::-;19605:139;;19503:248;;;:::o;19757:419::-;19923:4;19961:2;19950:9;19946:18;19938:26;;20010:9;20004:4;20000:20;19996:1;19985:9;19981:17;19974:47;20038:131;20164:4;20038:131;:::i;:::-;20030:139;;19928:248;;;:::o;20182:419::-;20348:4;20386:2;20375:9;20371:18;20363:26;;20435:9;20429:4;20425:20;20421:1;20410:9;20406:17;20399:47;20463:131;20589:4;20463:131;:::i;:::-;20455:139;;20353:248;;;:::o;20607:419::-;20773:4;20811:2;20800:9;20796:18;20788:26;;20860:9;20854:4;20850:20;20846:1;20835:9;20831:17;20824:47;20888:131;21014:4;20888:131;:::i;:::-;20880:139;;20778:248;;;:::o;21032:419::-;21198:4;21236:2;21225:9;21221:18;21213:26;;21285:9;21279:4;21275:20;21271:1;21260:9;21256:17;21249:47;21313:131;21439:4;21313:131;:::i;:::-;21305:139;;21203:248;;;:::o;21457:338::-;21608:4;21646:2;21635:9;21631:18;21623:26;;21659:129;21785:1;21774:9;21770:17;21761:6;21659:129;:::i;:::-;21613:182;;;;:::o;21801:222::-;21894:4;21932:2;21921:9;21917:18;21909:26;;21945:71;22013:1;22002:9;21998:17;21989:6;21945:71;:::i;:::-;21899:124;;;;:::o;22029:332::-;22150:4;22188:2;22177:9;22173:18;22165:26;;22201:71;22269:1;22258:9;22254:17;22245:6;22201:71;:::i;:::-;22282:72;22350:2;22339:9;22335:18;22326:6;22282:72;:::i;:::-;22155:206;;;;;:::o;22367:442::-;22516:4;22554:2;22543:9;22539:18;22531:26;;22567:71;22635:1;22624:9;22620:17;22611:6;22567:71;:::i;:::-;22648:72;22716:2;22705:9;22701:18;22692:6;22648:72;:::i;:::-;22730;22798:2;22787:9;22783:18;22774:6;22730:72;:::i;:::-;22521:288;;;;;;:::o;22815:218::-;22906:4;22944:2;22933:9;22929:18;22921:26;;22957:69;23023:1;23012:9;23008:17;22999:6;22957:69;:::i;:::-;22911:122;;;;:::o;23039:724::-;23116:4;23122:6;23178:11;23165:25;23278:1;23272:4;23268:12;23257:8;23241:14;23237:29;23233:48;23213:18;23209:73;23199:2;;23286:79;;:::i;:::-;23199:2;23398:18;23388:8;23384:33;23376:41;;23450:4;23437:18;23427:28;;23478:18;23470:6;23467:30;23464:2;;;23500:79;;:::i;:::-;23464:2;23608;23602:4;23598:13;23590:21;;23665:4;23657:6;23653:17;23637:14;23633:38;23627:4;23623:49;23620:2;;;23675:79;;:::i;:::-;23620:2;23129:634;;;;;;:::o;23769:129::-;23803:6;23830:20;;:::i;:::-;23820:30;;23859:33;23887:4;23879:6;23859:33;:::i;:::-;23810:88;;;:::o;23904:75::-;23937:6;23970:2;23964:9;23954:19;;23944:35;:::o;23985:141::-;24061:4;24084:3;24076:11;;24114:4;24109:3;24105:14;24097:22;;24066:60;;;:::o;24132:123::-;24208:6;24242:5;24236:12;24226:22;;24215:40;;;:::o;24261:98::-;24312:6;24346:5;24340:12;24330:22;;24319:40;;;:::o;24365:99::-;24417:6;24451:5;24445:12;24435:22;;24424:40;;;:::o;24470:122::-;24549:4;24581;24576:3;24572:14;24564:22;;24554:38;;;:::o;24598:193::-;24706:11;24740:6;24735:3;24728:19;24780:4;24775:3;24771:14;24756:29;;24718:73;;;;:::o;24797:158::-;24870:11;24904:6;24899:3;24892:19;24944:4;24939:3;24935:14;24920:29;;24882:73;;;;:::o;24961:147::-;25062:11;25099:3;25084:18;;25074:34;;;;:::o;25114:169::-;25198:11;25232:6;25227:3;25220:19;25272:4;25267:3;25263:14;25248:29;;25210:73;;;;:::o;25289:305::-;25329:3;25348:20;25366:1;25348:20;:::i;:::-;25343:25;;25382:20;25400:1;25382:20;:::i;:::-;25377:25;;25536:1;25468:66;25464:74;25461:1;25458:81;25455:2;;;25542:18;;:::i;:::-;25455:2;25586:1;25583;25579:9;25572:16;;25333:261;;;;:::o;25600:185::-;25640:1;25657:20;25675:1;25657:20;:::i;:::-;25652:25;;25691:20;25709:1;25691:20;:::i;:::-;25686:25;;25730:1;25720:2;;25735:18;;:::i;:::-;25720:2;25777:1;25774;25770:9;25765:14;;25642:143;;;;:::o;25791:348::-;25831:7;25854:20;25872:1;25854:20;:::i;:::-;25849:25;;25888:20;25906:1;25888:20;:::i;:::-;25883:25;;26076:1;26008:66;26004:74;26001:1;25998:81;25993:1;25986:9;25979:17;25975:105;25972:2;;;26083:18;;:::i;:::-;25972:2;26131:1;26128;26124:9;26113:20;;25839:300;;;;:::o;26145:191::-;26185:4;26205:20;26223:1;26205:20;:::i;:::-;26200:25;;26239:20;26257:1;26239:20;:::i;:::-;26234:25;;26278:1;26275;26272:8;26269:2;;;26283:18;;:::i;:::-;26269:2;26328:1;26325;26321:9;26313:17;;26190:146;;;;:::o;26342:96::-;26379:7;26408:24;26426:5;26408:24;:::i;:::-;26397:35;;26387:51;;;:::o;26444:90::-;26478:7;26521:5;26514:13;26507:21;26496:32;;26486:48;;;:::o;26540:109::-;26590:7;26619:24;26637:5;26619:24;:::i;:::-;26608:35;;26598:51;;;:::o;26655:115::-;26711:7;26740:24;26758:5;26740:24;:::i;:::-;26729:35;;26719:51;;;:::o;26776:112::-;26829:7;26858:24;26876:5;26858:24;:::i;:::-;26847:35;;26837:51;;;:::o;26894:126::-;26931:7;26971:42;26964:5;26960:54;26949:65;;26939:81;;;:::o;27026:77::-;27063:7;27092:5;27081:16;;27071:32;;;:::o;27109:93::-;27145:7;27185:10;27178:5;27174:22;27163:33;;27153:49;;;:::o;27208:101::-;27244:7;27284:18;27277:5;27273:30;27262:41;;27252:57;;;:::o;27315:152::-;27378:9;27411:50;27455:5;27411:50;:::i;:::-;27398:63;;27388:79;;;:::o;27473:126::-;27536:9;27569:24;27587:5;27569:24;:::i;:::-;27556:37;;27546:53;;;:::o;27605:176::-;27680:9;27713:62;27769:5;27713:62;:::i;:::-;27700:75;;27690:91;;;:::o;27787:138::-;27862:9;27895:24;27913:5;27895:24;:::i;:::-;27882:37;;27872:53;;;:::o;27931:307::-;27999:1;28009:113;28023:6;28020:1;28017:13;28009:113;;;28108:1;28103:3;28099:11;28093:18;28089:1;28084:3;28080:11;28073:39;28045:2;28042:1;28038:10;28033:15;;28009:113;;;28140:6;28137:1;28134:13;28131:2;;;28220:1;28211:6;28206:3;28202:16;28195:27;28131:2;27980:258;;;;:::o;28244:281::-;28327:27;28349:4;28327:27;:::i;:::-;28319:6;28315:40;28457:6;28445:10;28442:22;28421:18;28409:10;28406:34;28403:62;28400:2;;;28468:18;;:::i;:::-;28400:2;28508:10;28504:2;28497:22;28287:238;;;:::o;28531:233::-;28570:3;28593:24;28611:5;28593:24;:::i;:::-;28584:33;;28639:66;28632:5;28629:77;28626:2;;;28709:18;;:::i;:::-;28626:2;28756:1;28749:5;28745:13;28738:20;;28574:190;;;:::o;28770:180::-;28818:77;28815:1;28808:88;28915:4;28912:1;28905:15;28939:4;28936:1;28929:15;28956:180;29004:77;29001:1;28994:88;29101:4;29098:1;29091:15;29125:4;29122:1;29115:15;29142:180;29190:77;29187:1;29180:88;29287:4;29284:1;29277:15;29311:4;29308:1;29301:15;29328:180;29376:77;29373:1;29366:88;29473:4;29470:1;29463:15;29497:4;29494:1;29487:15;29514:117;29623:1;29620;29613:12;29637:117;29746:1;29743;29736:12;29760:117;29869:1;29866;29859:12;29883:117;29992:1;29989;29982:12;30006:117;30115:1;30112;30105:12;30252:117;30361:1;30358;30351:12;30375:117;30484:1;30481;30474:12;30498:117;30607:1;30604;30597:12;30621:117;30730:1;30727;30720:12;30744:102;30785:6;30836:2;30832:7;30827:2;30820:5;30816:14;30812:28;30802:38;;30792:54;;;:::o;30852:173::-;30992:25;30988:1;30980:6;30976:14;30969:49;30958:67;:::o;31031:225::-;31171:34;31167:1;31159:6;31155:14;31148:58;31240:8;31235:2;31227:6;31223:15;31216:33;31137:119;:::o;31262:225::-;31402:34;31398:1;31390:6;31386:14;31379:58;31471:8;31466:2;31458:6;31454:15;31447:33;31368:119;:::o;31493:179::-;31633:31;31629:1;31621:6;31617:14;31610:55;31599:73;:::o;31678:229::-;31818:34;31814:1;31806:6;31802:14;31795:58;31887:12;31882:2;31874:6;31870:15;31863:37;31784:123;:::o;31913:178::-;32053:30;32049:1;32041:6;32037:14;32030:54;32019:72;:::o;32097:122::-;32170:24;32188:5;32170:24;:::i;:::-;32163:5;32160:35;32150:2;;32209:1;32206;32199:12;32150:2;32140:79;:::o;32225:116::-;32295:21;32310:5;32295:21;:::i;:::-;32288:5;32285:32;32275:2;;32331:1;32328;32321:12;32275:2;32265:76;:::o;32347:148::-;32433:37;32464:5;32433:37;:::i;:::-;32426:5;32423:48;32413:2;;32485:1;32482;32475:12;32413:2;32403:92;:::o;32501:160::-;32593:43;32630:5;32593:43;:::i;:::-;32586:5;32583:54;32573:2;;32651:1;32648;32641:12;32573:2;32563:98;:::o;32667:154::-;32756:40;32790:5;32756:40;:::i;:::-;32749:5;32746:51;32736:2;;32811:1;32808;32801:12;32736:2;32726:95;:::o;32827:122::-;32900:24;32918:5;32900:24;:::i;:::-;32893:5;32890:35;32880:2;;32939:1;32936;32929:12;32880:2;32870:79;:::o;32955:120::-;33027:23;33044:5;33027:23;:::i;:::-;33020:5;33017:34;33007:2;;33065:1;33062;33055:12;33007:2;32997:78;:::o"
						},
						"gasEstimates": {
							"creation": {
								"codeDepositCost": "2520600",
								"executionCost": "infinite",
								"totalCost": "infinite"
							},
							"external": {
								"afterDecreaseGauge(address,address,uint256)": "infinite",
								"afterIncreaseGauge(address,address,uint256)": "infinite",
								"afterSwap(address,address,uint256,address,uint256)": "infinite",
								"claim(address,(address,uint64),address)": "infinite",
								"claimAll(address,address)": "infinite",
								"currentRewardToken(address)": "infinite",
								"gaugeController()": "2668",
								"gaugeRewardTokenExchangeRates(address,address,uint64)": "infinite",
								"gaugeRewardTokens(address,uint256)": "infinite",
								"getRewards(address,(address,uint64),address)": "infinite",
								"liquidator()": "2582",
								"multicall(bytes[])": "infinite",
								"redeem(address,address)": "infinite",
								"stakerCut()": "2566",
								"userGaugeRewardTokenExchangeRates(address,address,address,uint64)": "infinite",
								"userGaugeRewardTokenLastClaimedTimestamp(address,address,address)": "infinite",
								"userRewardTokenBalances(address,address)": "infinite",
								"vault()": "2602"
							},
							"internal": {
								"_claim(address,struct GaugeReward.RewardToken memory,address,uint256)": "infinite",
								"_claimAll(address,address,uint256)": "infinite",
								"_claimRewards(address,struct GaugeReward.RewardToken memory,address,uint256)": "infinite",
								"_currentRewardToken(address)": "infinite",
								"_getRewards(address,struct GaugeReward.RewardToken memory,address,uint256)": "infinite",
								"_getUserGaugeRewardTokenLastClaimedTimestamp(address,address,address)": "2408",
								"_setUserGaugeRewardTokenLastClaimedTimestamp(address,address,address)": "22410"
							}
						},
						"legacyAssembly": {
							".code": [
								{
									"begin": 743,
									"end": 19463,
									"name": "PUSH",
									"source": 6,
									"value": "80"
								},
								{
									"begin": 743,
									"end": 19463,
									"name": "PUSH",
									"source": 6,
									"value": "40"
								},
								{
									"begin": 743,
									"end": 19463,
									"name": "MSTORE",
									"source": 6
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "CALLVALUE",
									"source": 6
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "DUP1",
									"source": 6
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "ISZERO",
									"source": 6
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "PUSH [tag]",
									"source": 6,
									"value": "1"
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "JUMPI",
									"source": 6
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "PUSH",
									"source": 6,
									"value": "0"
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "DUP1",
									"source": 6
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "REVERT",
									"source": 6
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "tag",
									"source": 6,
									"value": "1"
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "JUMPDEST",
									"source": 6
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "POP",
									"source": 6
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "PUSH",
									"source": 6,
									"value": "40"
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "MLOAD",
									"source": 6
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "PUSHSIZE",
									"source": 6
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "CODESIZE",
									"source": 6
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "SUB",
									"source": 6
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "DUP1",
									"source": 6
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "PUSHSIZE",
									"source": 6
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "DUP4",
									"source": 6
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "CODECOPY",
									"source": 6
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "DUP2",
									"source": 6
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "DUP2",
									"source": 6
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "ADD",
									"source": 6
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "PUSH",
									"source": 6,
									"value": "40"
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "MSTORE",
									"source": 6
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "DUP2",
									"source": 6
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "ADD",
									"source": 6
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "SWAP1",
									"source": 6
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "PUSH [tag]",
									"source": 6,
									"value": "2"
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "SWAP2",
									"source": 6
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "SWAP1",
									"source": 6
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "PUSH [tag]",
									"source": 6,
									"value": "3"
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "JUMP",
									"source": 6,
									"value": "[in]"
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "tag",
									"source": 6,
									"value": "2"
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "JUMPDEST",
									"source": 6
								},
								{
									"begin": 5963,
									"end": 5964,
									"name": "PUSH",
									"source": 6,
									"value": "0"
								},
								{
									"begin": 5926,
									"end": 5965,
									"name": "PUSH",
									"source": 6,
									"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
								},
								{
									"begin": 5926,
									"end": 5965,
									"name": "AND",
									"source": 6
								},
								{
									"begin": 5934,
									"end": 5950,
									"name": "DUP5",
									"source": 6
								},
								{
									"begin": 5926,
									"end": 5965,
									"name": "PUSH",
									"source": 6,
									"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
								},
								{
									"begin": 5926,
									"end": 5965,
									"name": "AND",
									"source": 6
								},
								{
									"begin": 5926,
									"end": 5965,
									"name": "EQ",
									"source": 6
								},
								{
									"begin": 5926,
									"end": 5965,
									"name": "ISZERO",
									"source": 6
								},
								{
									"begin": 5918,
									"end": 5997,
									"name": "PUSH [tag]",
									"source": 6,
									"value": "6"
								},
								{
									"begin": 5918,
									"end": 5997,
									"name": "JUMPI",
									"source": 6
								},
								{
									"begin": 5918,
									"end": 5997,
									"name": "PUSH",
									"source": 6,
									"value": "40"
								},
								{
									"begin": 5918,
									"end": 5997,
									"name": "MLOAD",
									"source": 6
								},
								{
									"begin": 5918,
									"end": 5997,
									"name": "PUSH",
									"source": 6,
									"value": "8C379A000000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 5918,
									"end": 5997,
									"name": "DUP2",
									"source": 6
								},
								{
									"begin": 5918,
									"end": 5997,
									"name": "MSTORE",
									"source": 6
								},
								{
									"begin": 5918,
									"end": 5997,
									"name": "PUSH",
									"source": 6,
									"value": "4"
								},
								{
									"begin": 5918,
									"end": 5997,
									"name": "ADD",
									"source": 6
								},
								{
									"begin": 5918,
									"end": 5997,
									"name": "PUSH [tag]",
									"source": 6,
									"value": "7"
								},
								{
									"begin": 5918,
									"end": 5997,
									"name": "SWAP1",
									"source": 6
								},
								{
									"begin": 5918,
									"end": 5997,
									"name": "PUSH [tag]",
									"source": 6,
									"value": "8"
								},
								{
									"begin": 5918,
									"end": 5997,
									"name": "JUMP",
									"source": 6,
									"value": "[in]"
								},
								{
									"begin": 5918,
									"end": 5997,
									"name": "tag",
									"source": 6,
									"value": "7"
								},
								{
									"begin": 5918,
									"end": 5997,
									"name": "JUMPDEST",
									"source": 6
								},
								{
									"begin": 5918,
									"end": 5997,
									"name": "PUSH",
									"source": 6,
									"value": "40"
								},
								{
									"begin": 5918,
									"end": 5997,
									"name": "MLOAD",
									"source": 6
								},
								{
									"begin": 5918,
									"end": 5997,
									"name": "DUP1",
									"source": 6
								},
								{
									"begin": 5918,
									"end": 5997,
									"name": "SWAP2",
									"source": 6
								},
								{
									"begin": 5918,
									"end": 5997,
									"name": "SUB",
									"source": 6
								},
								{
									"begin": 5918,
									"end": 5997,
									"name": "SWAP1",
									"source": 6
								},
								{
									"begin": 5918,
									"end": 5997,
									"name": "REVERT",
									"source": 6
								},
								{
									"begin": 5918,
									"end": 5997,
									"name": "tag",
									"source": 6,
									"value": "6"
								},
								{
									"begin": 5918,
									"end": 5997,
									"name": "JUMPDEST",
									"source": 6
								},
								{
									"begin": 6033,
									"end": 6034,
									"name": "PUSH",
									"source": 6,
									"value": "0"
								},
								{
									"begin": 6015,
									"end": 6035,
									"name": "PUSH",
									"source": 6,
									"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
								},
								{
									"begin": 6015,
									"end": 6035,
									"name": "AND",
									"source": 6
								},
								{
									"begin": 6015,
									"end": 6021,
									"name": "DUP4",
									"source": 6
								},
								{
									"begin": 6015,
									"end": 6035,
									"name": "PUSH",
									"source": 6,
									"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
								},
								{
									"begin": 6015,
									"end": 6035,
									"name": "AND",
									"source": 6
								},
								{
									"begin": 6015,
									"end": 6035,
									"name": "EQ",
									"source": 6
								},
								{
									"begin": 6015,
									"end": 6035,
									"name": "ISZERO",
									"source": 6
								},
								{
									"begin": 6007,
									"end": 6070,
									"name": "PUSH [tag]",
									"source": 6,
									"value": "9"
								},
								{
									"begin": 6007,
									"end": 6070,
									"name": "JUMPI",
									"source": 6
								},
								{
									"begin": 6007,
									"end": 6070,
									"name": "PUSH",
									"source": 6,
									"value": "40"
								},
								{
									"begin": 6007,
									"end": 6070,
									"name": "MLOAD",
									"source": 6
								},
								{
									"begin": 6007,
									"end": 6070,
									"name": "PUSH",
									"source": 6,
									"value": "8C379A000000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 6007,
									"end": 6070,
									"name": "DUP2",
									"source": 6
								},
								{
									"begin": 6007,
									"end": 6070,
									"name": "MSTORE",
									"source": 6
								},
								{
									"begin": 6007,
									"end": 6070,
									"name": "PUSH",
									"source": 6,
									"value": "4"
								},
								{
									"begin": 6007,
									"end": 6070,
									"name": "ADD",
									"source": 6
								},
								{
									"begin": 6007,
									"end": 6070,
									"name": "PUSH [tag]",
									"source": 6,
									"value": "10"
								},
								{
									"begin": 6007,
									"end": 6070,
									"name": "SWAP1",
									"source": 6
								},
								{
									"begin": 6007,
									"end": 6070,
									"name": "PUSH [tag]",
									"source": 6,
									"value": "11"
								},
								{
									"begin": 6007,
									"end": 6070,
									"name": "JUMP",
									"source": 6,
									"value": "[in]"
								},
								{
									"begin": 6007,
									"end": 6070,
									"name": "tag",
									"source": 6,
									"value": "10"
								},
								{
									"begin": 6007,
									"end": 6070,
									"name": "JUMPDEST",
									"source": 6
								},
								{
									"begin": 6007,
									"end": 6070,
									"name": "PUSH",
									"source": 6,
									"value": "40"
								},
								{
									"begin": 6007,
									"end": 6070,
									"name": "MLOAD",
									"source": 6
								},
								{
									"begin": 6007,
									"end": 6070,
									"name": "DUP1",
									"source": 6
								},
								{
									"begin": 6007,
									"end": 6070,
									"name": "SWAP2",
									"source": 6
								},
								{
									"begin": 6007,
									"end": 6070,
									"name": "SUB",
									"source": 6
								},
								{
									"begin": 6007,
									"end": 6070,
									"name": "SWAP1",
									"source": 6
								},
								{
									"begin": 6007,
									"end": 6070,
									"name": "REVERT",
									"source": 6
								},
								{
									"begin": 6007,
									"end": 6070,
									"name": "tag",
									"source": 6,
									"value": "9"
								},
								{
									"begin": 6007,
									"end": 6070,
									"name": "JUMPDEST",
									"source": 6
								},
								{
									"begin": 6111,
									"end": 6112,
									"name": "PUSH",
									"source": 6,
									"value": "0"
								},
								{
									"begin": 6088,
									"end": 6113,
									"name": "PUSH",
									"source": 6,
									"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
								},
								{
									"begin": 6088,
									"end": 6113,
									"name": "AND",
									"source": 6
								},
								{
									"begin": 6088,
									"end": 6099,
									"name": "DUP3",
									"source": 6
								},
								{
									"begin": 6088,
									"end": 6113,
									"name": "PUSH",
									"source": 6,
									"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
								},
								{
									"begin": 6088,
									"end": 6113,
									"name": "AND",
									"source": 6
								},
								{
									"begin": 6088,
									"end": 6113,
									"name": "EQ",
									"source": 6
								},
								{
									"begin": 6088,
									"end": 6113,
									"name": "ISZERO",
									"source": 6
								},
								{
									"begin": 6080,
									"end": 6146,
									"name": "PUSH [tag]",
									"source": 6,
									"value": "12"
								},
								{
									"begin": 6080,
									"end": 6146,
									"name": "JUMPI",
									"source": 6
								},
								{
									"begin": 6080,
									"end": 6146,
									"name": "PUSH",
									"source": 6,
									"value": "40"
								},
								{
									"begin": 6080,
									"end": 6146,
									"name": "MLOAD",
									"source": 6
								},
								{
									"begin": 6080,
									"end": 6146,
									"name": "PUSH",
									"source": 6,
									"value": "8C379A000000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 6080,
									"end": 6146,
									"name": "DUP2",
									"source": 6
								},
								{
									"begin": 6080,
									"end": 6146,
									"name": "MSTORE",
									"source": 6
								},
								{
									"begin": 6080,
									"end": 6146,
									"name": "PUSH",
									"source": 6,
									"value": "4"
								},
								{
									"begin": 6080,
									"end": 6146,
									"name": "ADD",
									"source": 6
								},
								{
									"begin": 6080,
									"end": 6146,
									"name": "PUSH [tag]",
									"source": 6,
									"value": "13"
								},
								{
									"begin": 6080,
									"end": 6146,
									"name": "SWAP1",
									"source": 6
								},
								{
									"begin": 6080,
									"end": 6146,
									"name": "PUSH [tag]",
									"source": 6,
									"value": "14"
								},
								{
									"begin": 6080,
									"end": 6146,
									"name": "JUMP",
									"source": 6,
									"value": "[in]"
								},
								{
									"begin": 6080,
									"end": 6146,
									"name": "tag",
									"source": 6,
									"value": "13"
								},
								{
									"begin": 6080,
									"end": 6146,
									"name": "JUMPDEST",
									"source": 6
								},
								{
									"begin": 6080,
									"end": 6146,
									"name": "PUSH",
									"source": 6,
									"value": "40"
								},
								{
									"begin": 6080,
									"end": 6146,
									"name": "MLOAD",
									"source": 6
								},
								{
									"begin": 6080,
									"end": 6146,
									"name": "DUP1",
									"source": 6
								},
								{
									"begin": 6080,
									"end": 6146,
									"name": "SWAP2",
									"source": 6
								},
								{
									"begin": 6080,
									"end": 6146,
									"name": "SUB",
									"source": 6
								},
								{
									"begin": 6080,
									"end": 6146,
									"name": "SWAP1",
									"source": 6
								},
								{
									"begin": 6080,
									"end": 6146,
									"name": "REVERT",
									"source": 6
								},
								{
									"begin": 6080,
									"end": 6146,
									"name": "tag",
									"source": 6,
									"value": "12"
								},
								{
									"begin": 6080,
									"end": 6146,
									"name": "JUMPDEST",
									"source": 6
								},
								{
									"begin": 6177,
									"end": 6180,
									"name": "PUSH",
									"source": 6,
									"value": "3B9ACA00"
								},
								{
									"begin": 6164,
									"end": 6174,
									"name": "DUP2",
									"source": 6
								},
								{
									"begin": 6164,
									"end": 6180,
									"name": "PUSH",
									"source": 6,
									"value": "FFFFFFFF"
								},
								{
									"begin": 6164,
									"end": 6180,
									"name": "AND",
									"source": 6
								},
								{
									"begin": 6164,
									"end": 6180,
									"name": "LT",
									"source": 6
								},
								{
									"begin": 6156,
									"end": 6210,
									"name": "PUSH [tag]",
									"source": 6,
									"value": "15"
								},
								{
									"begin": 6156,
									"end": 6210,
									"name": "JUMPI",
									"source": 6
								},
								{
									"begin": 6156,
									"end": 6210,
									"name": "PUSH",
									"source": 6,
									"value": "40"
								},
								{
									"begin": 6156,
									"end": 6210,
									"name": "MLOAD",
									"source": 6
								},
								{
									"begin": 6156,
									"end": 6210,
									"name": "PUSH",
									"source": 6,
									"value": "8C379A000000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 6156,
									"end": 6210,
									"name": "DUP2",
									"source": 6
								},
								{
									"begin": 6156,
									"end": 6210,
									"name": "MSTORE",
									"source": 6
								},
								{
									"begin": 6156,
									"end": 6210,
									"name": "PUSH",
									"source": 6,
									"value": "4"
								},
								{
									"begin": 6156,
									"end": 6210,
									"name": "ADD",
									"source": 6
								},
								{
									"begin": 6156,
									"end": 6210,
									"name": "PUSH [tag]",
									"source": 6,
									"value": "16"
								},
								{
									"begin": 6156,
									"end": 6210,
									"name": "SWAP1",
									"source": 6
								},
								{
									"begin": 6156,
									"end": 6210,
									"name": "PUSH [tag]",
									"source": 6,
									"value": "17"
								},
								{
									"begin": 6156,
									"end": 6210,
									"name": "JUMP",
									"source": 6,
									"value": "[in]"
								},
								{
									"begin": 6156,
									"end": 6210,
									"name": "tag",
									"source": 6,
									"value": "16"
								},
								{
									"begin": 6156,
									"end": 6210,
									"name": "JUMPDEST",
									"source": 6
								},
								{
									"begin": 6156,
									"end": 6210,
									"name": "PUSH",
									"source": 6,
									"value": "40"
								},
								{
									"begin": 6156,
									"end": 6210,
									"name": "MLOAD",
									"source": 6
								},
								{
									"begin": 6156,
									"end": 6210,
									"name": "DUP1",
									"source": 6
								},
								{
									"begin": 6156,
									"end": 6210,
									"name": "SWAP2",
									"source": 6
								},
								{
									"begin": 6156,
									"end": 6210,
									"name": "SUB",
									"source": 6
								},
								{
									"begin": 6156,
									"end": 6210,
									"name": "SWAP1",
									"source": 6
								},
								{
									"begin": 6156,
									"end": 6210,
									"name": "REVERT",
									"source": 6
								},
								{
									"begin": 6156,
									"end": 6210,
									"name": "tag",
									"source": 6,
									"value": "15"
								},
								{
									"begin": 6156,
									"end": 6210,
									"name": "JUMPDEST",
									"source": 6
								},
								{
									"begin": 6239,
									"end": 6255,
									"name": "DUP4",
									"source": 6
								},
								{
									"begin": 6221,
									"end": 6236,
									"name": "PUSH",
									"source": 6,
									"value": "5"
								},
								{
									"begin": 6221,
									"end": 6236,
									"name": "PUSH",
									"source": 6,
									"value": "0"
								},
								{
									"begin": 6221,
									"end": 6255,
									"name": "PUSH",
									"source": 6,
									"value": "100"
								},
								{
									"begin": 6221,
									"end": 6255,
									"name": "EXP",
									"source": 6
								},
								{
									"begin": 6221,
									"end": 6255,
									"name": "DUP2",
									"source": 6
								},
								{
									"begin": 6221,
									"end": 6255,
									"name": "SLOAD",
									"source": 6
								},
								{
									"begin": 6221,
									"end": 6255,
									"name": "DUP2",
									"source": 6
								},
								{
									"begin": 6221,
									"end": 6255,
									"name": "PUSH",
									"source": 6,
									"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
								},
								{
									"begin": 6221,
									"end": 6255,
									"name": "MUL",
									"source": 6
								},
								{
									"begin": 6221,
									"end": 6255,
									"name": "NOT",
									"source": 6
								},
								{
									"begin": 6221,
									"end": 6255,
									"name": "AND",
									"source": 6
								},
								{
									"begin": 6221,
									"end": 6255,
									"name": "SWAP1",
									"source": 6
								},
								{
									"begin": 6221,
									"end": 6255,
									"name": "DUP4",
									"source": 6
								},
								{
									"begin": 6221,
									"end": 6255,
									"name": "PUSH",
									"source": 6,
									"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
								},
								{
									"begin": 6221,
									"end": 6255,
									"name": "AND",
									"source": 6
								},
								{
									"begin": 6221,
									"end": 6255,
									"name": "MUL",
									"source": 6
								},
								{
									"begin": 6221,
									"end": 6255,
									"name": "OR",
									"source": 6
								},
								{
									"begin": 6221,
									"end": 6255,
									"name": "SWAP1",
									"source": 6
								},
								{
									"begin": 6221,
									"end": 6255,
									"name": "SSTORE",
									"source": 6
								},
								{
									"begin": 6221,
									"end": 6255,
									"name": "POP",
									"source": 6
								},
								{
									"begin": 6273,
									"end": 6279,
									"name": "DUP3",
									"source": 6
								},
								{
									"begin": 6265,
									"end": 6270,
									"name": "PUSH",
									"source": 6,
									"value": "6"
								},
								{
									"begin": 6265,
									"end": 6270,
									"name": "PUSH",
									"source": 6,
									"value": "0"
								},
								{
									"begin": 6265,
									"end": 6279,
									"name": "PUSH",
									"source": 6,
									"value": "100"
								},
								{
									"begin": 6265,
									"end": 6279,
									"name": "EXP",
									"source": 6
								},
								{
									"begin": 6265,
									"end": 6279,
									"name": "DUP2",
									"source": 6
								},
								{
									"begin": 6265,
									"end": 6279,
									"name": "SLOAD",
									"source": 6
								},
								{
									"begin": 6265,
									"end": 6279,
									"name": "DUP2",
									"source": 6
								},
								{
									"begin": 6265,
									"end": 6279,
									"name": "PUSH",
									"source": 6,
									"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
								},
								{
									"begin": 6265,
									"end": 6279,
									"name": "MUL",
									"source": 6
								},
								{
									"begin": 6265,
									"end": 6279,
									"name": "NOT",
									"source": 6
								},
								{
									"begin": 6265,
									"end": 6279,
									"name": "AND",
									"source": 6
								},
								{
									"begin": 6265,
									"end": 6279,
									"name": "SWAP1",
									"source": 6
								},
								{
									"begin": 6265,
									"end": 6279,
									"name": "DUP4",
									"source": 6
								},
								{
									"begin": 6265,
									"end": 6279,
									"name": "PUSH",
									"source": 6,
									"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
								},
								{
									"begin": 6265,
									"end": 6279,
									"name": "AND",
									"source": 6
								},
								{
									"begin": 6265,
									"end": 6279,
									"name": "MUL",
									"source": 6
								},
								{
									"begin": 6265,
									"end": 6279,
									"name": "OR",
									"source": 6
								},
								{
									"begin": 6265,
									"end": 6279,
									"name": "SWAP1",
									"source": 6
								},
								{
									"begin": 6265,
									"end": 6279,
									"name": "SSTORE",
									"source": 6
								},
								{
									"begin": 6265,
									"end": 6279,
									"name": "POP",
									"source": 6
								},
								{
									"begin": 6301,
									"end": 6311,
									"name": "DUP1",
									"source": 6
								},
								{
									"begin": 6289,
									"end": 6298,
									"name": "PUSH",
									"source": 6,
									"value": "7"
								},
								{
									"begin": 6289,
									"end": 6298,
									"name": "PUSH",
									"source": 6,
									"value": "14"
								},
								{
									"begin": 6289,
									"end": 6311,
									"name": "PUSH",
									"source": 6,
									"value": "100"
								},
								{
									"begin": 6289,
									"end": 6311,
									"name": "EXP",
									"source": 6
								},
								{
									"begin": 6289,
									"end": 6311,
									"name": "DUP2",
									"source": 6
								},
								{
									"begin": 6289,
									"end": 6311,
									"name": "SLOAD",
									"source": 6
								},
								{
									"begin": 6289,
									"end": 6311,
									"name": "DUP2",
									"source": 6
								},
								{
									"begin": 6289,
									"end": 6311,
									"name": "PUSH",
									"source": 6,
									"value": "FFFFFFFF"
								},
								{
									"begin": 6289,
									"end": 6311,
									"name": "MUL",
									"source": 6
								},
								{
									"begin": 6289,
									"end": 6311,
									"name": "NOT",
									"source": 6
								},
								{
									"begin": 6289,
									"end": 6311,
									"name": "AND",
									"source": 6
								},
								{
									"begin": 6289,
									"end": 6311,
									"name": "SWAP1",
									"source": 6
								},
								{
									"begin": 6289,
									"end": 6311,
									"name": "DUP4",
									"source": 6
								},
								{
									"begin": 6289,
									"end": 6311,
									"name": "PUSH",
									"source": 6,
									"value": "FFFFFFFF"
								},
								{
									"begin": 6289,
									"end": 6311,
									"name": "AND",
									"source": 6
								},
								{
									"begin": 6289,
									"end": 6311,
									"name": "MUL",
									"source": 6
								},
								{
									"begin": 6289,
									"end": 6311,
									"name": "OR",
									"source": 6
								},
								{
									"begin": 6289,
									"end": 6311,
									"name": "SWAP1",
									"source": 6
								},
								{
									"begin": 6289,
									"end": 6311,
									"name": "SSTORE",
									"source": 6
								},
								{
									"begin": 6289,
									"end": 6311,
									"name": "POP",
									"source": 6
								},
								{
									"begin": 6334,
									"end": 6345,
									"name": "DUP2",
									"source": 6
								},
								{
									"begin": 6321,
									"end": 6331,
									"name": "PUSH",
									"source": 6,
									"value": "7"
								},
								{
									"begin": 6321,
									"end": 6331,
									"name": "PUSH",
									"source": 6,
									"value": "0"
								},
								{
									"begin": 6321,
									"end": 6345,
									"name": "PUSH",
									"source": 6,
									"value": "100"
								},
								{
									"begin": 6321,
									"end": 6345,
									"name": "EXP",
									"source": 6
								},
								{
									"begin": 6321,
									"end": 6345,
									"name": "DUP2",
									"source": 6
								},
								{
									"begin": 6321,
									"end": 6345,
									"name": "SLOAD",
									"source": 6
								},
								{
									"begin": 6321,
									"end": 6345,
									"name": "DUP2",
									"source": 6
								},
								{
									"begin": 6321,
									"end": 6345,
									"name": "PUSH",
									"source": 6,
									"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
								},
								{
									"begin": 6321,
									"end": 6345,
									"name": "MUL",
									"source": 6
								},
								{
									"begin": 6321,
									"end": 6345,
									"name": "NOT",
									"source": 6
								},
								{
									"begin": 6321,
									"end": 6345,
									"name": "AND",
									"source": 6
								},
								{
									"begin": 6321,
									"end": 6345,
									"name": "SWAP1",
									"source": 6
								},
								{
									"begin": 6321,
									"end": 6345,
									"name": "DUP4",
									"source": 6
								},
								{
									"begin": 6321,
									"end": 6345,
									"name": "PUSH",
									"source": 6,
									"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
								},
								{
									"begin": 6321,
									"end": 6345,
									"name": "AND",
									"source": 6
								},
								{
									"begin": 6321,
									"end": 6345,
									"name": "MUL",
									"source": 6
								},
								{
									"begin": 6321,
									"end": 6345,
									"name": "OR",
									"source": 6
								},
								{
									"begin": 6321,
									"end": 6345,
									"name": "SWAP1",
									"source": 6
								},
								{
									"begin": 6321,
									"end": 6345,
									"name": "SSTORE",
									"source": 6
								},
								{
									"begin": 6321,
									"end": 6345,
									"name": "POP",
									"source": 6
								},
								{
									"begin": 6396,
									"end": 6407,
									"name": "DUP2",
									"source": 6
								},
								{
									"begin": 6361,
									"end": 6420,
									"name": "PUSH",
									"source": 6,
									"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
								},
								{
									"begin": 6361,
									"end": 6420,
									"name": "AND",
									"source": 6
								},
								{
									"begin": 6388,
									"end": 6394,
									"name": "DUP4",
									"source": 6
								},
								{
									"begin": 6361,
									"end": 6420,
									"name": "PUSH",
									"source": 6,
									"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
								},
								{
									"begin": 6361,
									"end": 6420,
									"name": "AND",
									"source": 6
								},
								{
									"begin": 6370,
									"end": 6386,
									"name": "DUP6",
									"source": 6
								},
								{
									"begin": 6361,
									"end": 6420,
									"name": "PUSH",
									"source": 6,
									"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
								},
								{
									"begin": 6361,
									"end": 6420,
									"name": "AND",
									"source": 6
								},
								{
									"begin": 6361,
									"end": 6420,
									"name": "PUSH",
									"source": 6,
									"value": "48CCAF1264DF58374A01DE5614345AA417E2D16AF0F2E86B97729DC752E253F"
								},
								{
									"begin": 6409,
									"end": 6419,
									"name": "DUP5",
									"source": 6
								},
								{
									"begin": 6361,
									"end": 6420,
									"name": "PUSH",
									"source": 6,
									"value": "40"
								},
								{
									"begin": 6361,
									"end": 6420,
									"name": "MLOAD",
									"source": 6
								},
								{
									"begin": 6361,
									"end": 6420,
									"name": "PUSH [tag]",
									"source": 6,
									"value": "18"
								},
								{
									"begin": 6361,
									"end": 6420,
									"name": "SWAP2",
									"source": 6
								},
								{
									"begin": 6361,
									"end": 6420,
									"name": "SWAP1",
									"source": 6
								},
								{
									"begin": 6361,
									"end": 6420,
									"name": "PUSH [tag]",
									"source": 6,
									"value": "19"
								},
								{
									"begin": 6361,
									"end": 6420,
									"name": "JUMP",
									"source": 6,
									"value": "[in]"
								},
								{
									"begin": 6361,
									"end": 6420,
									"name": "tag",
									"source": 6,
									"value": "18"
								},
								{
									"begin": 6361,
									"end": 6420,
									"name": "JUMPDEST",
									"source": 6
								},
								{
									"begin": 6361,
									"end": 6420,
									"name": "PUSH",
									"source": 6,
									"value": "40"
								},
								{
									"begin": 6361,
									"end": 6420,
									"name": "MLOAD",
									"source": 6
								},
								{
									"begin": 6361,
									"end": 6420,
									"name": "DUP1",
									"source": 6
								},
								{
									"begin": 6361,
									"end": 6420,
									"name": "SWAP2",
									"source": 6
								},
								{
									"begin": 6361,
									"end": 6420,
									"name": "SUB",
									"source": 6
								},
								{
									"begin": 6361,
									"end": 6420,
									"name": "SWAP1",
									"source": 6
								},
								{
									"begin": 6361,
									"end": 6420,
									"name": "LOG4",
									"source": 6
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "POP",
									"source": 6
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "POP",
									"source": 6
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "POP",
									"source": 6
								},
								{
									"begin": 5767,
									"end": 6427,
									"name": "POP",
									"source": 6
								},
								{
									"begin": 743,
									"end": 19463,
									"name": "PUSH [tag]",
									"source": 6,
									"value": "20"
								},
								{
									"begin": 743,
									"end": 19463,
									"name": "JUMP",
									"source": 6
								},
								{
									"begin": 7,
									"end": 150,
									"name": "tag",
									"source": 19,
									"value": "22"
								},
								{
									"begin": 7,
									"end": 150,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 64,
									"end": 69,
									"name": "PUSH",
									"source": 19,
									"value": "0"
								},
								{
									"begin": 95,
									"end": 101,
									"name": "DUP2",
									"source": 19
								},
								{
									"begin": 89,
									"end": 102,
									"name": "MLOAD",
									"source": 19
								},
								{
									"begin": 80,
									"end": 102,
									"name": "SWAP1",
									"source": 19
								},
								{
									"begin": 80,
									"end": 102,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 111,
									"end": 144,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "24"
								},
								{
									"begin": 138,
									"end": 143,
									"name": "DUP2",
									"source": 19
								},
								{
									"begin": 111,
									"end": 144,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "25"
								},
								{
									"begin": 111,
									"end": 144,
									"name": "JUMP",
									"source": 19,
									"value": "[in]"
								},
								{
									"begin": 111,
									"end": 144,
									"name": "tag",
									"source": 19,
									"value": "24"
								},
								{
									"begin": 111,
									"end": 144,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 70,
									"end": 150,
									"name": "SWAP3",
									"source": 19
								},
								{
									"begin": 70,
									"end": 150,
									"name": "SWAP2",
									"source": 19
								},
								{
									"begin": 70,
									"end": 150,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 70,
									"end": 150,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 70,
									"end": 150,
									"name": "JUMP",
									"source": 19,
									"value": "[out]"
								},
								{
									"begin": 156,
									"end": 349,
									"name": "tag",
									"source": 19,
									"value": "26"
								},
								{
									"begin": 156,
									"end": 349,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 238,
									"end": 243,
									"name": "PUSH",
									"source": 19,
									"value": "0"
								},
								{
									"begin": 269,
									"end": 275,
									"name": "DUP2",
									"source": 19
								},
								{
									"begin": 263,
									"end": 276,
									"name": "MLOAD",
									"source": 19
								},
								{
									"begin": 254,
									"end": 276,
									"name": "SWAP1",
									"source": 19
								},
								{
									"begin": 254,
									"end": 276,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 285,
									"end": 343,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "28"
								},
								{
									"begin": 337,
									"end": 342,
									"name": "DUP2",
									"source": 19
								},
								{
									"begin": 285,
									"end": 343,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "29"
								},
								{
									"begin": 285,
									"end": 343,
									"name": "JUMP",
									"source": 19,
									"value": "[in]"
								},
								{
									"begin": 285,
									"end": 343,
									"name": "tag",
									"source": 19,
									"value": "28"
								},
								{
									"begin": 285,
									"end": 343,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 244,
									"end": 349,
									"name": "SWAP3",
									"source": 19
								},
								{
									"begin": 244,
									"end": 349,
									"name": "SWAP2",
									"source": 19
								},
								{
									"begin": 244,
									"end": 349,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 244,
									"end": 349,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 244,
									"end": 349,
									"name": "JUMP",
									"source": 19,
									"value": "[out]"
								},
								{
									"begin": 355,
									"end": 496,
									"name": "tag",
									"source": 19,
									"value": "30"
								},
								{
									"begin": 355,
									"end": 496,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 411,
									"end": 416,
									"name": "PUSH",
									"source": 19,
									"value": "0"
								},
								{
									"begin": 442,
									"end": 448,
									"name": "DUP2",
									"source": 19
								},
								{
									"begin": 436,
									"end": 449,
									"name": "MLOAD",
									"source": 19
								},
								{
									"begin": 427,
									"end": 449,
									"name": "SWAP1",
									"source": 19
								},
								{
									"begin": 427,
									"end": 449,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 458,
									"end": 490,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "32"
								},
								{
									"begin": 484,
									"end": 489,
									"name": "DUP2",
									"source": 19
								},
								{
									"begin": 458,
									"end": 490,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "33"
								},
								{
									"begin": 458,
									"end": 490,
									"name": "JUMP",
									"source": 19,
									"value": "[in]"
								},
								{
									"begin": 458,
									"end": 490,
									"name": "tag",
									"source": 19,
									"value": "32"
								},
								{
									"begin": 458,
									"end": 490,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 417,
									"end": 496,
									"name": "SWAP3",
									"source": 19
								},
								{
									"begin": 417,
									"end": 496,
									"name": "SWAP2",
									"source": 19
								},
								{
									"begin": 417,
									"end": 496,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 417,
									"end": 496,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 417,
									"end": 496,
									"name": "JUMP",
									"source": 19,
									"value": "[out]"
								},
								{
									"begin": 502,
									"end": 1370,
									"name": "tag",
									"source": 19,
									"value": "3"
								},
								{
									"begin": 502,
									"end": 1370,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 623,
									"end": 629,
									"name": "PUSH",
									"source": 19,
									"value": "0"
								},
								{
									"begin": 631,
									"end": 637,
									"name": "DUP1",
									"source": 19
								},
								{
									"begin": 639,
									"end": 645,
									"name": "PUSH",
									"source": 19,
									"value": "0"
								},
								{
									"begin": 647,
									"end": 653,
									"name": "DUP1",
									"source": 19
								},
								{
									"begin": 696,
									"end": 699,
									"name": "PUSH",
									"source": 19,
									"value": "80"
								},
								{
									"begin": 684,
									"end": 693,
									"name": "DUP6",
									"source": 19
								},
								{
									"begin": 675,
									"end": 682,
									"name": "DUP8",
									"source": 19
								},
								{
									"begin": 671,
									"end": 694,
									"name": "SUB",
									"source": 19
								},
								{
									"begin": 667,
									"end": 700,
									"name": "SLT",
									"source": 19
								},
								{
									"begin": 664,
									"end": 666,
									"name": "ISZERO",
									"source": 19
								},
								{
									"begin": 664,
									"end": 666,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "35"
								},
								{
									"begin": 664,
									"end": 666,
									"name": "JUMPI",
									"source": 19
								},
								{
									"begin": 703,
									"end": 782,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "36"
								},
								{
									"begin": 703,
									"end": 782,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "37"
								},
								{
									"begin": 703,
									"end": 782,
									"name": "JUMP",
									"source": 19,
									"value": "[in]"
								},
								{
									"begin": 703,
									"end": 782,
									"name": "tag",
									"source": 19,
									"value": "36"
								},
								{
									"begin": 703,
									"end": 782,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 664,
									"end": 666,
									"name": "tag",
									"source": 19,
									"value": "35"
								},
								{
									"begin": 664,
									"end": 666,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 823,
									"end": 824,
									"name": "PUSH",
									"source": 19,
									"value": "0"
								},
								{
									"begin": 848,
									"end": 937,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "38"
								},
								{
									"begin": 929,
									"end": 936,
									"name": "DUP8",
									"source": 19
								},
								{
									"begin": 920,
									"end": 926,
									"name": "DUP3",
									"source": 19
								},
								{
									"begin": 909,
									"end": 918,
									"name": "DUP9",
									"source": 19
								},
								{
									"begin": 905,
									"end": 927,
									"name": "ADD",
									"source": 19
								},
								{
									"begin": 848,
									"end": 937,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "26"
								},
								{
									"begin": 848,
									"end": 937,
									"name": "JUMP",
									"source": 19,
									"value": "[in]"
								},
								{
									"begin": 848,
									"end": 937,
									"name": "tag",
									"source": 19,
									"value": "38"
								},
								{
									"begin": 848,
									"end": 937,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 838,
									"end": 937,
									"name": "SWAP5",
									"source": 19
								},
								{
									"begin": 838,
									"end": 937,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 794,
									"end": 947,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 986,
									"end": 988,
									"name": "PUSH",
									"source": 19,
									"value": "20"
								},
								{
									"begin": 1012,
									"end": 1076,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "39"
								},
								{
									"begin": 1068,
									"end": 1075,
									"name": "DUP8",
									"source": 19
								},
								{
									"begin": 1059,
									"end": 1065,
									"name": "DUP3",
									"source": 19
								},
								{
									"begin": 1048,
									"end": 1057,
									"name": "DUP9",
									"source": 19
								},
								{
									"begin": 1044,
									"end": 1066,
									"name": "ADD",
									"source": 19
								},
								{
									"begin": 1012,
									"end": 1076,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "22"
								},
								{
									"begin": 1012,
									"end": 1076,
									"name": "JUMP",
									"source": 19,
									"value": "[in]"
								},
								{
									"begin": 1012,
									"end": 1076,
									"name": "tag",
									"source": 19,
									"value": "39"
								},
								{
									"begin": 1012,
									"end": 1076,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 1002,
									"end": 1076,
									"name": "SWAP4",
									"source": 19
								},
								{
									"begin": 1002,
									"end": 1076,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 957,
									"end": 1086,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 1125,
									"end": 1127,
									"name": "PUSH",
									"source": 19,
									"value": "40"
								},
								{
									"begin": 1151,
									"end": 1215,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "40"
								},
								{
									"begin": 1207,
									"end": 1214,
									"name": "DUP8",
									"source": 19
								},
								{
									"begin": 1198,
									"end": 1204,
									"name": "DUP3",
									"source": 19
								},
								{
									"begin": 1187,
									"end": 1196,
									"name": "DUP9",
									"source": 19
								},
								{
									"begin": 1183,
									"end": 1205,
									"name": "ADD",
									"source": 19
								},
								{
									"begin": 1151,
									"end": 1215,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "22"
								},
								{
									"begin": 1151,
									"end": 1215,
									"name": "JUMP",
									"source": 19,
									"value": "[in]"
								},
								{
									"begin": 1151,
									"end": 1215,
									"name": "tag",
									"source": 19,
									"value": "40"
								},
								{
									"begin": 1151,
									"end": 1215,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 1141,
									"end": 1215,
									"name": "SWAP3",
									"source": 19
								},
								{
									"begin": 1141,
									"end": 1215,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 1096,
									"end": 1225,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 1264,
									"end": 1266,
									"name": "PUSH",
									"source": 19,
									"value": "60"
								},
								{
									"begin": 1290,
									"end": 1353,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "41"
								},
								{
									"begin": 1345,
									"end": 1352,
									"name": "DUP8",
									"source": 19
								},
								{
									"begin": 1336,
									"end": 1342,
									"name": "DUP3",
									"source": 19
								},
								{
									"begin": 1325,
									"end": 1334,
									"name": "DUP9",
									"source": 19
								},
								{
									"begin": 1321,
									"end": 1343,
									"name": "ADD",
									"source": 19
								},
								{
									"begin": 1290,
									"end": 1353,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "30"
								},
								{
									"begin": 1290,
									"end": 1353,
									"name": "JUMP",
									"source": 19,
									"value": "[in]"
								},
								{
									"begin": 1290,
									"end": 1353,
									"name": "tag",
									"source": 19,
									"value": "41"
								},
								{
									"begin": 1290,
									"end": 1353,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 1280,
									"end": 1353,
									"name": "SWAP2",
									"source": 19
								},
								{
									"begin": 1280,
									"end": 1353,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 1235,
									"end": 1363,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 654,
									"end": 1370,
									"name": "SWAP3",
									"source": 19
								},
								{
									"begin": 654,
									"end": 1370,
									"name": "SWAP6",
									"source": 19
								},
								{
									"begin": 654,
									"end": 1370,
									"name": "SWAP2",
									"source": 19
								},
								{
									"begin": 654,
									"end": 1370,
									"name": "SWAP5",
									"source": 19
								},
								{
									"begin": 654,
									"end": 1370,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 654,
									"end": 1370,
									"name": "SWAP3",
									"source": 19
								},
								{
									"begin": 654,
									"end": 1370,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 654,
									"end": 1370,
									"name": "JUMP",
									"source": 19,
									"value": "[out]"
								},
								{
									"begin": 1376,
									"end": 1742,
									"name": "tag",
									"source": 19,
									"value": "42"
								},
								{
									"begin": 1376,
									"end": 1742,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 1518,
									"end": 1521,
									"name": "PUSH",
									"source": 19,
									"value": "0"
								},
								{
									"begin": 1539,
									"end": 1606,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "44"
								},
								{
									"begin": 1603,
									"end": 1605,
									"name": "PUSH",
									"source": 19,
									"value": "19"
								},
								{
									"begin": 1598,
									"end": 1601,
									"name": "DUP4",
									"source": 19
								},
								{
									"begin": 1539,
									"end": 1606,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "45"
								},
								{
									"begin": 1539,
									"end": 1606,
									"name": "JUMP",
									"source": 19,
									"value": "[in]"
								},
								{
									"begin": 1539,
									"end": 1606,
									"name": "tag",
									"source": 19,
									"value": "44"
								},
								{
									"begin": 1539,
									"end": 1606,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 1532,
									"end": 1606,
									"name": "SWAP2",
									"source": 19
								},
								{
									"begin": 1532,
									"end": 1606,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 1615,
									"end": 1708,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "46"
								},
								{
									"begin": 1704,
									"end": 1707,
									"name": "DUP3",
									"source": 19
								},
								{
									"begin": 1615,
									"end": 1708,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "47"
								},
								{
									"begin": 1615,
									"end": 1708,
									"name": "JUMP",
									"source": 19,
									"value": "[in]"
								},
								{
									"begin": 1615,
									"end": 1708,
									"name": "tag",
									"source": 19,
									"value": "46"
								},
								{
									"begin": 1615,
									"end": 1708,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 1733,
									"end": 1735,
									"name": "PUSH",
									"source": 19,
									"value": "20"
								},
								{
									"begin": 1728,
									"end": 1731,
									"name": "DUP3",
									"source": 19
								},
								{
									"begin": 1724,
									"end": 1736,
									"name": "ADD",
									"source": 19
								},
								{
									"begin": 1717,
									"end": 1736,
									"name": "SWAP1",
									"source": 19
								},
								{
									"begin": 1717,
									"end": 1736,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 1522,
									"end": 1742,
									"name": "SWAP2",
									"source": 19
								},
								{
									"begin": 1522,
									"end": 1742,
									"name": "SWAP1",
									"source": 19
								},
								{
									"begin": 1522,
									"end": 1742,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 1522,
									"end": 1742,
									"name": "JUMP",
									"source": 19,
									"value": "[out]"
								},
								{
									"begin": 1748,
									"end": 2114,
									"name": "tag",
									"source": 19,
									"value": "48"
								},
								{
									"begin": 1748,
									"end": 2114,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 1890,
									"end": 1893,
									"name": "PUSH",
									"source": 19,
									"value": "0"
								},
								{
									"begin": 1911,
									"end": 1978,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "50"
								},
								{
									"begin": 1975,
									"end": 1977,
									"name": "PUSH",
									"source": 19,
									"value": "1E"
								},
								{
									"begin": 1970,
									"end": 1973,
									"name": "DUP4",
									"source": 19
								},
								{
									"begin": 1911,
									"end": 1978,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "45"
								},
								{
									"begin": 1911,
									"end": 1978,
									"name": "JUMP",
									"source": 19,
									"value": "[in]"
								},
								{
									"begin": 1911,
									"end": 1978,
									"name": "tag",
									"source": 19,
									"value": "50"
								},
								{
									"begin": 1911,
									"end": 1978,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 1904,
									"end": 1978,
									"name": "SWAP2",
									"source": 19
								},
								{
									"begin": 1904,
									"end": 1978,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 1987,
									"end": 2080,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "51"
								},
								{
									"begin": 2076,
									"end": 2079,
									"name": "DUP3",
									"source": 19
								},
								{
									"begin": 1987,
									"end": 2080,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "52"
								},
								{
									"begin": 1987,
									"end": 2080,
									"name": "JUMP",
									"source": 19,
									"value": "[in]"
								},
								{
									"begin": 1987,
									"end": 2080,
									"name": "tag",
									"source": 19,
									"value": "51"
								},
								{
									"begin": 1987,
									"end": 2080,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 2105,
									"end": 2107,
									"name": "PUSH",
									"source": 19,
									"value": "20"
								},
								{
									"begin": 2100,
									"end": 2103,
									"name": "DUP3",
									"source": 19
								},
								{
									"begin": 2096,
									"end": 2108,
									"name": "ADD",
									"source": 19
								},
								{
									"begin": 2089,
									"end": 2108,
									"name": "SWAP1",
									"source": 19
								},
								{
									"begin": 2089,
									"end": 2108,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 1894,
									"end": 2114,
									"name": "SWAP2",
									"source": 19
								},
								{
									"begin": 1894,
									"end": 2114,
									"name": "SWAP1",
									"source": 19
								},
								{
									"begin": 1894,
									"end": 2114,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 1894,
									"end": 2114,
									"name": "JUMP",
									"source": 19,
									"value": "[out]"
								},
								{
									"begin": 2120,
									"end": 2486,
									"name": "tag",
									"source": 19,
									"value": "53"
								},
								{
									"begin": 2120,
									"end": 2486,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 2262,
									"end": 2265,
									"name": "PUSH",
									"source": 19,
									"value": "0"
								},
								{
									"begin": 2283,
									"end": 2350,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "55"
								},
								{
									"begin": 2347,
									"end": 2349,
									"name": "PUSH",
									"source": 19,
									"value": "1C"
								},
								{
									"begin": 2342,
									"end": 2345,
									"name": "DUP4",
									"source": 19
								},
								{
									"begin": 2283,
									"end": 2350,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "45"
								},
								{
									"begin": 2283,
									"end": 2350,
									"name": "JUMP",
									"source": 19,
									"value": "[in]"
								},
								{
									"begin": 2283,
									"end": 2350,
									"name": "tag",
									"source": 19,
									"value": "55"
								},
								{
									"begin": 2283,
									"end": 2350,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 2276,
									"end": 2350,
									"name": "SWAP2",
									"source": 19
								},
								{
									"begin": 2276,
									"end": 2350,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 2359,
									"end": 2452,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "56"
								},
								{
									"begin": 2448,
									"end": 2451,
									"name": "DUP3",
									"source": 19
								},
								{
									"begin": 2359,
									"end": 2452,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "57"
								},
								{
									"begin": 2359,
									"end": 2452,
									"name": "JUMP",
									"source": 19,
									"value": "[in]"
								},
								{
									"begin": 2359,
									"end": 2452,
									"name": "tag",
									"source": 19,
									"value": "56"
								},
								{
									"begin": 2359,
									"end": 2452,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 2477,
									"end": 2479,
									"name": "PUSH",
									"source": 19,
									"value": "20"
								},
								{
									"begin": 2472,
									"end": 2475,
									"name": "DUP3",
									"source": 19
								},
								{
									"begin": 2468,
									"end": 2480,
									"name": "ADD",
									"source": 19
								},
								{
									"begin": 2461,
									"end": 2480,
									"name": "SWAP1",
									"source": 19
								},
								{
									"begin": 2461,
									"end": 2480,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 2266,
									"end": 2486,
									"name": "SWAP2",
									"source": 19
								},
								{
									"begin": 2266,
									"end": 2486,
									"name": "SWAP1",
									"source": 19
								},
								{
									"begin": 2266,
									"end": 2486,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 2266,
									"end": 2486,
									"name": "JUMP",
									"source": 19,
									"value": "[out]"
								},
								{
									"begin": 2492,
									"end": 2858,
									"name": "tag",
									"source": 19,
									"value": "58"
								},
								{
									"begin": 2492,
									"end": 2858,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 2634,
									"end": 2637,
									"name": "PUSH",
									"source": 19,
									"value": "0"
								},
								{
									"begin": 2655,
									"end": 2722,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "60"
								},
								{
									"begin": 2719,
									"end": 2721,
									"name": "PUSH",
									"source": 19,
									"value": "1B"
								},
								{
									"begin": 2714,
									"end": 2717,
									"name": "DUP4",
									"source": 19
								},
								{
									"begin": 2655,
									"end": 2722,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "45"
								},
								{
									"begin": 2655,
									"end": 2722,
									"name": "JUMP",
									"source": 19,
									"value": "[in]"
								},
								{
									"begin": 2655,
									"end": 2722,
									"name": "tag",
									"source": 19,
									"value": "60"
								},
								{
									"begin": 2655,
									"end": 2722,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 2648,
									"end": 2722,
									"name": "SWAP2",
									"source": 19
								},
								{
									"begin": 2648,
									"end": 2722,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 2731,
									"end": 2824,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "61"
								},
								{
									"begin": 2820,
									"end": 2823,
									"name": "DUP3",
									"source": 19
								},
								{
									"begin": 2731,
									"end": 2824,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "62"
								},
								{
									"begin": 2731,
									"end": 2824,
									"name": "JUMP",
									"source": 19,
									"value": "[in]"
								},
								{
									"begin": 2731,
									"end": 2824,
									"name": "tag",
									"source": 19,
									"value": "61"
								},
								{
									"begin": 2731,
									"end": 2824,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 2849,
									"end": 2851,
									"name": "PUSH",
									"source": 19,
									"value": "20"
								},
								{
									"begin": 2844,
									"end": 2847,
									"name": "DUP3",
									"source": 19
								},
								{
									"begin": 2840,
									"end": 2852,
									"name": "ADD",
									"source": 19
								},
								{
									"begin": 2833,
									"end": 2852,
									"name": "SWAP1",
									"source": 19
								},
								{
									"begin": 2833,
									"end": 2852,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 2638,
									"end": 2858,
									"name": "SWAP2",
									"source": 19
								},
								{
									"begin": 2638,
									"end": 2858,
									"name": "SWAP1",
									"source": 19
								},
								{
									"begin": 2638,
									"end": 2858,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 2638,
									"end": 2858,
									"name": "JUMP",
									"source": 19,
									"value": "[out]"
								},
								{
									"begin": 2864,
									"end": 2979,
									"name": "tag",
									"source": 19,
									"value": "63"
								},
								{
									"begin": 2864,
									"end": 2979,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 2949,
									"end": 2972,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "65"
								},
								{
									"begin": 2966,
									"end": 2971,
									"name": "DUP2",
									"source": 19
								},
								{
									"begin": 2949,
									"end": 2972,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "66"
								},
								{
									"begin": 2949,
									"end": 2972,
									"name": "JUMP",
									"source": 19,
									"value": "[in]"
								},
								{
									"begin": 2949,
									"end": 2972,
									"name": "tag",
									"source": 19,
									"value": "65"
								},
								{
									"begin": 2949,
									"end": 2972,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 2944,
									"end": 2947,
									"name": "DUP3",
									"source": 19
								},
								{
									"begin": 2937,
									"end": 2973,
									"name": "MSTORE",
									"source": 19
								},
								{
									"begin": 2927,
									"end": 2979,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 2927,
									"end": 2979,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 2927,
									"end": 2979,
									"name": "JUMP",
									"source": 19,
									"value": "[out]"
								},
								{
									"begin": 2985,
									"end": 3404,
									"name": "tag",
									"source": 19,
									"value": "17"
								},
								{
									"begin": 2985,
									"end": 3404,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 3151,
									"end": 3155,
									"name": "PUSH",
									"source": 19,
									"value": "0"
								},
								{
									"begin": 3189,
									"end": 3191,
									"name": "PUSH",
									"source": 19,
									"value": "20"
								},
								{
									"begin": 3178,
									"end": 3187,
									"name": "DUP3",
									"source": 19
								},
								{
									"begin": 3174,
									"end": 3192,
									"name": "ADD",
									"source": 19
								},
								{
									"begin": 3166,
									"end": 3192,
									"name": "SWAP1",
									"source": 19
								},
								{
									"begin": 3166,
									"end": 3192,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 3238,
									"end": 3247,
									"name": "DUP2",
									"source": 19
								},
								{
									"begin": 3232,
									"end": 3236,
									"name": "DUP2",
									"source": 19
								},
								{
									"begin": 3228,
									"end": 3248,
									"name": "SUB",
									"source": 19
								},
								{
									"begin": 3224,
									"end": 3225,
									"name": "PUSH",
									"source": 19,
									"value": "0"
								},
								{
									"begin": 3213,
									"end": 3222,
									"name": "DUP4",
									"source": 19
								},
								{
									"begin": 3209,
									"end": 3226,
									"name": "ADD",
									"source": 19
								},
								{
									"begin": 3202,
									"end": 3249,
									"name": "MSTORE",
									"source": 19
								},
								{
									"begin": 3266,
									"end": 3397,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "68"
								},
								{
									"begin": 3392,
									"end": 3396,
									"name": "DUP2",
									"source": 19
								},
								{
									"begin": 3266,
									"end": 3397,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "42"
								},
								{
									"begin": 3266,
									"end": 3397,
									"name": "JUMP",
									"source": 19,
									"value": "[in]"
								},
								{
									"begin": 3266,
									"end": 3397,
									"name": "tag",
									"source": 19,
									"value": "68"
								},
								{
									"begin": 3266,
									"end": 3397,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 3258,
									"end": 3397,
									"name": "SWAP1",
									"source": 19
								},
								{
									"begin": 3258,
									"end": 3397,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 3156,
									"end": 3404,
									"name": "SWAP2",
									"source": 19
								},
								{
									"begin": 3156,
									"end": 3404,
									"name": "SWAP1",
									"source": 19
								},
								{
									"begin": 3156,
									"end": 3404,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 3156,
									"end": 3404,
									"name": "JUMP",
									"source": 19,
									"value": "[out]"
								},
								{
									"begin": 3410,
									"end": 3829,
									"name": "tag",
									"source": 19,
									"value": "11"
								},
								{
									"begin": 3410,
									"end": 3829,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 3576,
									"end": 3580,
									"name": "PUSH",
									"source": 19,
									"value": "0"
								},
								{
									"begin": 3614,
									"end": 3616,
									"name": "PUSH",
									"source": 19,
									"value": "20"
								},
								{
									"begin": 3603,
									"end": 3612,
									"name": "DUP3",
									"source": 19
								},
								{
									"begin": 3599,
									"end": 3617,
									"name": "ADD",
									"source": 19
								},
								{
									"begin": 3591,
									"end": 3617,
									"name": "SWAP1",
									"source": 19
								},
								{
									"begin": 3591,
									"end": 3617,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 3663,
									"end": 3672,
									"name": "DUP2",
									"source": 19
								},
								{
									"begin": 3657,
									"end": 3661,
									"name": "DUP2",
									"source": 19
								},
								{
									"begin": 3653,
									"end": 3673,
									"name": "SUB",
									"source": 19
								},
								{
									"begin": 3649,
									"end": 3650,
									"name": "PUSH",
									"source": 19,
									"value": "0"
								},
								{
									"begin": 3638,
									"end": 3647,
									"name": "DUP4",
									"source": 19
								},
								{
									"begin": 3634,
									"end": 3651,
									"name": "ADD",
									"source": 19
								},
								{
									"begin": 3627,
									"end": 3674,
									"name": "MSTORE",
									"source": 19
								},
								{
									"begin": 3691,
									"end": 3822,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "70"
								},
								{
									"begin": 3817,
									"end": 3821,
									"name": "DUP2",
									"source": 19
								},
								{
									"begin": 3691,
									"end": 3822,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "48"
								},
								{
									"begin": 3691,
									"end": 3822,
									"name": "JUMP",
									"source": 19,
									"value": "[in]"
								},
								{
									"begin": 3691,
									"end": 3822,
									"name": "tag",
									"source": 19,
									"value": "70"
								},
								{
									"begin": 3691,
									"end": 3822,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 3683,
									"end": 3822,
									"name": "SWAP1",
									"source": 19
								},
								{
									"begin": 3683,
									"end": 3822,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 3581,
									"end": 3829,
									"name": "SWAP2",
									"source": 19
								},
								{
									"begin": 3581,
									"end": 3829,
									"name": "SWAP1",
									"source": 19
								},
								{
									"begin": 3581,
									"end": 3829,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 3581,
									"end": 3829,
									"name": "JUMP",
									"source": 19,
									"value": "[out]"
								},
								{
									"begin": 3835,
									"end": 4254,
									"name": "tag",
									"source": 19,
									"value": "14"
								},
								{
									"begin": 3835,
									"end": 4254,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 4001,
									"end": 4005,
									"name": "PUSH",
									"source": 19,
									"value": "0"
								},
								{
									"begin": 4039,
									"end": 4041,
									"name": "PUSH",
									"source": 19,
									"value": "20"
								},
								{
									"begin": 4028,
									"end": 4037,
									"name": "DUP3",
									"source": 19
								},
								{
									"begin": 4024,
									"end": 4042,
									"name": "ADD",
									"source": 19
								},
								{
									"begin": 4016,
									"end": 4042,
									"name": "SWAP1",
									"source": 19
								},
								{
									"begin": 4016,
									"end": 4042,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 4088,
									"end": 4097,
									"name": "DUP2",
									"source": 19
								},
								{
									"begin": 4082,
									"end": 4086,
									"name": "DUP2",
									"source": 19
								},
								{
									"begin": 4078,
									"end": 4098,
									"name": "SUB",
									"source": 19
								},
								{
									"begin": 4074,
									"end": 4075,
									"name": "PUSH",
									"source": 19,
									"value": "0"
								},
								{
									"begin": 4063,
									"end": 4072,
									"name": "DUP4",
									"source": 19
								},
								{
									"begin": 4059,
									"end": 4076,
									"name": "ADD",
									"source": 19
								},
								{
									"begin": 4052,
									"end": 4099,
									"name": "MSTORE",
									"source": 19
								},
								{
									"begin": 4116,
									"end": 4247,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "72"
								},
								{
									"begin": 4242,
									"end": 4246,
									"name": "DUP2",
									"source": 19
								},
								{
									"begin": 4116,
									"end": 4247,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "53"
								},
								{
									"begin": 4116,
									"end": 4247,
									"name": "JUMP",
									"source": 19,
									"value": "[in]"
								},
								{
									"begin": 4116,
									"end": 4247,
									"name": "tag",
									"source": 19,
									"value": "72"
								},
								{
									"begin": 4116,
									"end": 4247,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 4108,
									"end": 4247,
									"name": "SWAP1",
									"source": 19
								},
								{
									"begin": 4108,
									"end": 4247,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 4006,
									"end": 4254,
									"name": "SWAP2",
									"source": 19
								},
								{
									"begin": 4006,
									"end": 4254,
									"name": "SWAP1",
									"source": 19
								},
								{
									"begin": 4006,
									"end": 4254,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 4006,
									"end": 4254,
									"name": "JUMP",
									"source": 19,
									"value": "[out]"
								},
								{
									"begin": 4260,
									"end": 4679,
									"name": "tag",
									"source": 19,
									"value": "8"
								},
								{
									"begin": 4260,
									"end": 4679,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 4426,
									"end": 4430,
									"name": "PUSH",
									"source": 19,
									"value": "0"
								},
								{
									"begin": 4464,
									"end": 4466,
									"name": "PUSH",
									"source": 19,
									"value": "20"
								},
								{
									"begin": 4453,
									"end": 4462,
									"name": "DUP3",
									"source": 19
								},
								{
									"begin": 4449,
									"end": 4467,
									"name": "ADD",
									"source": 19
								},
								{
									"begin": 4441,
									"end": 4467,
									"name": "SWAP1",
									"source": 19
								},
								{
									"begin": 4441,
									"end": 4467,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 4513,
									"end": 4522,
									"name": "DUP2",
									"source": 19
								},
								{
									"begin": 4507,
									"end": 4511,
									"name": "DUP2",
									"source": 19
								},
								{
									"begin": 4503,
									"end": 4523,
									"name": "SUB",
									"source": 19
								},
								{
									"begin": 4499,
									"end": 4500,
									"name": "PUSH",
									"source": 19,
									"value": "0"
								},
								{
									"begin": 4488,
									"end": 4497,
									"name": "DUP4",
									"source": 19
								},
								{
									"begin": 4484,
									"end": 4501,
									"name": "ADD",
									"source": 19
								},
								{
									"begin": 4477,
									"end": 4524,
									"name": "MSTORE",
									"source": 19
								},
								{
									"begin": 4541,
									"end": 4672,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "74"
								},
								{
									"begin": 4667,
									"end": 4671,
									"name": "DUP2",
									"source": 19
								},
								{
									"begin": 4541,
									"end": 4672,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "58"
								},
								{
									"begin": 4541,
									"end": 4672,
									"name": "JUMP",
									"source": 19,
									"value": "[in]"
								},
								{
									"begin": 4541,
									"end": 4672,
									"name": "tag",
									"source": 19,
									"value": "74"
								},
								{
									"begin": 4541,
									"end": 4672,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 4533,
									"end": 4672,
									"name": "SWAP1",
									"source": 19
								},
								{
									"begin": 4533,
									"end": 4672,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 4431,
									"end": 4679,
									"name": "SWAP2",
									"source": 19
								},
								{
									"begin": 4431,
									"end": 4679,
									"name": "SWAP1",
									"source": 19
								},
								{
									"begin": 4431,
									"end": 4679,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 4431,
									"end": 4679,
									"name": "JUMP",
									"source": 19,
									"value": "[out]"
								},
								{
									"begin": 4685,
									"end": 4903,
									"name": "tag",
									"source": 19,
									"value": "19"
								},
								{
									"begin": 4685,
									"end": 4903,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 4776,
									"end": 4780,
									"name": "PUSH",
									"source": 19,
									"value": "0"
								},
								{
									"begin": 4814,
									"end": 4816,
									"name": "PUSH",
									"source": 19,
									"value": "20"
								},
								{
									"begin": 4803,
									"end": 4812,
									"name": "DUP3",
									"source": 19
								},
								{
									"begin": 4799,
									"end": 4817,
									"name": "ADD",
									"source": 19
								},
								{
									"begin": 4791,
									"end": 4817,
									"name": "SWAP1",
									"source": 19
								},
								{
									"begin": 4791,
									"end": 4817,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 4827,
									"end": 4896,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "76"
								},
								{
									"begin": 4893,
									"end": 4894,
									"name": "PUSH",
									"source": 19,
									"value": "0"
								},
								{
									"begin": 4882,
									"end": 4891,
									"name": "DUP4",
									"source": 19
								},
								{
									"begin": 4878,
									"end": 4895,
									"name": "ADD",
									"source": 19
								},
								{
									"begin": 4869,
									"end": 4875,
									"name": "DUP5",
									"source": 19
								},
								{
									"begin": 4827,
									"end": 4896,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "63"
								},
								{
									"begin": 4827,
									"end": 4896,
									"name": "JUMP",
									"source": 19,
									"value": "[in]"
								},
								{
									"begin": 4827,
									"end": 4896,
									"name": "tag",
									"source": 19,
									"value": "76"
								},
								{
									"begin": 4827,
									"end": 4896,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 4781,
									"end": 4903,
									"name": "SWAP3",
									"source": 19
								},
								{
									"begin": 4781,
									"end": 4903,
									"name": "SWAP2",
									"source": 19
								},
								{
									"begin": 4781,
									"end": 4903,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 4781,
									"end": 4903,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 4781,
									"end": 4903,
									"name": "JUMP",
									"source": 19,
									"value": "[out]"
								},
								{
									"begin": 4990,
									"end": 5159,
									"name": "tag",
									"source": 19,
									"value": "45"
								},
								{
									"begin": 4990,
									"end": 5159,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 5074,
									"end": 5085,
									"name": "PUSH",
									"source": 19,
									"value": "0"
								},
								{
									"begin": 5108,
									"end": 5114,
									"name": "DUP3",
									"source": 19
								},
								{
									"begin": 5103,
									"end": 5106,
									"name": "DUP3",
									"source": 19
								},
								{
									"begin": 5096,
									"end": 5115,
									"name": "MSTORE",
									"source": 19
								},
								{
									"begin": 5148,
									"end": 5152,
									"name": "PUSH",
									"source": 19,
									"value": "20"
								},
								{
									"begin": 5143,
									"end": 5146,
									"name": "DUP3",
									"source": 19
								},
								{
									"begin": 5139,
									"end": 5153,
									"name": "ADD",
									"source": 19
								},
								{
									"begin": 5124,
									"end": 5153,
									"name": "SWAP1",
									"source": 19
								},
								{
									"begin": 5124,
									"end": 5153,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 5086,
									"end": 5159,
									"name": "SWAP3",
									"source": 19
								},
								{
									"begin": 5086,
									"end": 5159,
									"name": "SWAP2",
									"source": 19
								},
								{
									"begin": 5086,
									"end": 5159,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 5086,
									"end": 5159,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 5086,
									"end": 5159,
									"name": "JUMP",
									"source": 19,
									"value": "[out]"
								},
								{
									"begin": 5165,
									"end": 5261,
									"name": "tag",
									"source": 19,
									"value": "80"
								},
								{
									"begin": 5165,
									"end": 5261,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 5202,
									"end": 5209,
									"name": "PUSH",
									"source": 19,
									"value": "0"
								},
								{
									"begin": 5231,
									"end": 5255,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "82"
								},
								{
									"begin": 5249,
									"end": 5254,
									"name": "DUP3",
									"source": 19
								},
								{
									"begin": 5231,
									"end": 5255,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "83"
								},
								{
									"begin": 5231,
									"end": 5255,
									"name": "JUMP",
									"source": 19,
									"value": "[in]"
								},
								{
									"begin": 5231,
									"end": 5255,
									"name": "tag",
									"source": 19,
									"value": "82"
								},
								{
									"begin": 5231,
									"end": 5255,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 5220,
									"end": 5255,
									"name": "SWAP1",
									"source": 19
								},
								{
									"begin": 5220,
									"end": 5255,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 5210,
									"end": 5261,
									"name": "SWAP2",
									"source": 19
								},
								{
									"begin": 5210,
									"end": 5261,
									"name": "SWAP1",
									"source": 19
								},
								{
									"begin": 5210,
									"end": 5261,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 5210,
									"end": 5261,
									"name": "JUMP",
									"source": 19,
									"value": "[out]"
								},
								{
									"begin": 5267,
									"end": 5388,
									"name": "tag",
									"source": 19,
									"value": "84"
								},
								{
									"begin": 5267,
									"end": 5388,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 5329,
									"end": 5336,
									"name": "PUSH",
									"source": 19,
									"value": "0"
								},
								{
									"begin": 5358,
									"end": 5382,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "86"
								},
								{
									"begin": 5376,
									"end": 5381,
									"name": "DUP3",
									"source": 19
								},
								{
									"begin": 5358,
									"end": 5382,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "80"
								},
								{
									"begin": 5358,
									"end": 5382,
									"name": "JUMP",
									"source": 19,
									"value": "[in]"
								},
								{
									"begin": 5358,
									"end": 5382,
									"name": "tag",
									"source": 19,
									"value": "86"
								},
								{
									"begin": 5358,
									"end": 5382,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 5347,
									"end": 5382,
									"name": "SWAP1",
									"source": 19
								},
								{
									"begin": 5347,
									"end": 5382,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 5337,
									"end": 5388,
									"name": "SWAP2",
									"source": 19
								},
								{
									"begin": 5337,
									"end": 5388,
									"name": "SWAP1",
									"source": 19
								},
								{
									"begin": 5337,
									"end": 5388,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 5337,
									"end": 5388,
									"name": "JUMP",
									"source": 19,
									"value": "[out]"
								},
								{
									"begin": 5394,
									"end": 5520,
									"name": "tag",
									"source": 19,
									"value": "83"
								},
								{
									"begin": 5394,
									"end": 5520,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 5431,
									"end": 5438,
									"name": "PUSH",
									"source": 19,
									"value": "0"
								},
								{
									"begin": 5471,
									"end": 5513,
									"name": "PUSH",
									"source": 19,
									"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
								},
								{
									"begin": 5464,
									"end": 5469,
									"name": "DUP3",
									"source": 19
								},
								{
									"begin": 5460,
									"end": 5514,
									"name": "AND",
									"source": 19
								},
								{
									"begin": 5449,
									"end": 5514,
									"name": "SWAP1",
									"source": 19
								},
								{
									"begin": 5449,
									"end": 5514,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 5439,
									"end": 5520,
									"name": "SWAP2",
									"source": 19
								},
								{
									"begin": 5439,
									"end": 5520,
									"name": "SWAP1",
									"source": 19
								},
								{
									"begin": 5439,
									"end": 5520,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 5439,
									"end": 5520,
									"name": "JUMP",
									"source": 19,
									"value": "[out]"
								},
								{
									"begin": 5526,
									"end": 5619,
									"name": "tag",
									"source": 19,
									"value": "66"
								},
								{
									"begin": 5526,
									"end": 5619,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 5562,
									"end": 5569,
									"name": "PUSH",
									"source": 19,
									"value": "0"
								},
								{
									"begin": 5602,
									"end": 5612,
									"name": "PUSH",
									"source": 19,
									"value": "FFFFFFFF"
								},
								{
									"begin": 5595,
									"end": 5600,
									"name": "DUP3",
									"source": 19
								},
								{
									"begin": 5591,
									"end": 5613,
									"name": "AND",
									"source": 19
								},
								{
									"begin": 5580,
									"end": 5613,
									"name": "SWAP1",
									"source": 19
								},
								{
									"begin": 5580,
									"end": 5613,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 5570,
									"end": 5619,
									"name": "SWAP2",
									"source": 19
								},
								{
									"begin": 5570,
									"end": 5619,
									"name": "SWAP1",
									"source": 19
								},
								{
									"begin": 5570,
									"end": 5619,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 5570,
									"end": 5619,
									"name": "JUMP",
									"source": 19,
									"value": "[out]"
								},
								{
									"begin": 5748,
									"end": 5865,
									"name": "tag",
									"source": 19,
									"value": "37"
								},
								{
									"begin": 5748,
									"end": 5865,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 5857,
									"end": 5858,
									"name": "PUSH",
									"source": 19,
									"value": "0"
								},
								{
									"begin": 5854,
									"end": 5855,
									"name": "DUP1",
									"source": 19
								},
								{
									"begin": 5847,
									"end": 5859,
									"name": "REVERT",
									"source": 19
								},
								{
									"begin": 5871,
									"end": 6046,
									"name": "tag",
									"source": 19,
									"value": "47"
								},
								{
									"begin": 5871,
									"end": 6046,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 6011,
									"end": 6038,
									"name": "PUSH",
									"source": 19,
									"value": "475265776172642F7374616B65722D6375742D6C742D31653900000000000000"
								},
								{
									"begin": 6007,
									"end": 6008,
									"name": "PUSH",
									"source": 19,
									"value": "0"
								},
								{
									"begin": 5999,
									"end": 6005,
									"name": "DUP3",
									"source": 19
								},
								{
									"begin": 5995,
									"end": 6009,
									"name": "ADD",
									"source": 19
								},
								{
									"begin": 5988,
									"end": 6039,
									"name": "MSTORE",
									"source": 19
								},
								{
									"begin": 5977,
									"end": 6046,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 5977,
									"end": 6046,
									"name": "JUMP",
									"source": 19,
									"value": "[out]"
								},
								{
									"begin": 6052,
									"end": 6232,
									"name": "tag",
									"source": 19,
									"value": "52"
								},
								{
									"begin": 6052,
									"end": 6232,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 6192,
									"end": 6224,
									"name": "PUSH",
									"source": 19,
									"value": "475265776172642F5661756C742D6E6F742D7A65726F2D616464726573730000"
								},
								{
									"begin": 6188,
									"end": 6189,
									"name": "PUSH",
									"source": 19,
									"value": "0"
								},
								{
									"begin": 6180,
									"end": 6186,
									"name": "DUP3",
									"source": 19
								},
								{
									"begin": 6176,
									"end": 6190,
									"name": "ADD",
									"source": 19
								},
								{
									"begin": 6169,
									"end": 6225,
									"name": "MSTORE",
									"source": 19
								},
								{
									"begin": 6158,
									"end": 6232,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 6158,
									"end": 6232,
									"name": "JUMP",
									"source": 19,
									"value": "[out]"
								},
								{
									"begin": 6238,
									"end": 6416,
									"name": "tag",
									"source": 19,
									"value": "57"
								},
								{
									"begin": 6238,
									"end": 6416,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 6378,
									"end": 6408,
									"name": "PUSH",
									"source": 19,
									"value": "475265776172642F4C69712D6E6F742D7A65726F2D6164647265737300000000"
								},
								{
									"begin": 6374,
									"end": 6375,
									"name": "PUSH",
									"source": 19,
									"value": "0"
								},
								{
									"begin": 6366,
									"end": 6372,
									"name": "DUP3",
									"source": 19
								},
								{
									"begin": 6362,
									"end": 6376,
									"name": "ADD",
									"source": 19
								},
								{
									"begin": 6355,
									"end": 6409,
									"name": "MSTORE",
									"source": 19
								},
								{
									"begin": 6344,
									"end": 6416,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 6344,
									"end": 6416,
									"name": "JUMP",
									"source": 19,
									"value": "[out]"
								},
								{
									"begin": 6422,
									"end": 6599,
									"name": "tag",
									"source": 19,
									"value": "62"
								},
								{
									"begin": 6422,
									"end": 6599,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 6562,
									"end": 6591,
									"name": "PUSH",
									"source": 19,
									"value": "475265776172642F47432D6E6F742D7A65726F2D616464726573730000000000"
								},
								{
									"begin": 6558,
									"end": 6559,
									"name": "PUSH",
									"source": 19,
									"value": "0"
								},
								{
									"begin": 6550,
									"end": 6556,
									"name": "DUP3",
									"source": 19
								},
								{
									"begin": 6546,
									"end": 6560,
									"name": "ADD",
									"source": 19
								},
								{
									"begin": 6539,
									"end": 6592,
									"name": "MSTORE",
									"source": 19
								},
								{
									"begin": 6528,
									"end": 6599,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 6528,
									"end": 6599,
									"name": "JUMP",
									"source": 19,
									"value": "[out]"
								},
								{
									"begin": 6605,
									"end": 6727,
									"name": "tag",
									"source": 19,
									"value": "25"
								},
								{
									"begin": 6605,
									"end": 6727,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 6678,
									"end": 6702,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "97"
								},
								{
									"begin": 6696,
									"end": 6701,
									"name": "DUP2",
									"source": 19
								},
								{
									"begin": 6678,
									"end": 6702,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "80"
								},
								{
									"begin": 6678,
									"end": 6702,
									"name": "JUMP",
									"source": 19,
									"value": "[in]"
								},
								{
									"begin": 6678,
									"end": 6702,
									"name": "tag",
									"source": 19,
									"value": "97"
								},
								{
									"begin": 6678,
									"end": 6702,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 6671,
									"end": 6676,
									"name": "DUP2",
									"source": 19
								},
								{
									"begin": 6668,
									"end": 6703,
									"name": "EQ",
									"source": 19
								},
								{
									"begin": 6658,
									"end": 6660,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "98"
								},
								{
									"begin": 6658,
									"end": 6660,
									"name": "JUMPI",
									"source": 19
								},
								{
									"begin": 6717,
									"end": 6718,
									"name": "PUSH",
									"source": 19,
									"value": "0"
								},
								{
									"begin": 6714,
									"end": 6715,
									"name": "DUP1",
									"source": 19
								},
								{
									"begin": 6707,
									"end": 6719,
									"name": "REVERT",
									"source": 19
								},
								{
									"begin": 6658,
									"end": 6660,
									"name": "tag",
									"source": 19,
									"value": "98"
								},
								{
									"begin": 6658,
									"end": 6660,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 6648,
									"end": 6727,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 6648,
									"end": 6727,
									"name": "JUMP",
									"source": 19,
									"value": "[out]"
								},
								{
									"begin": 6733,
									"end": 6905,
									"name": "tag",
									"source": 19,
									"value": "29"
								},
								{
									"begin": 6733,
									"end": 6905,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 6831,
									"end": 6880,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "100"
								},
								{
									"begin": 6874,
									"end": 6879,
									"name": "DUP2",
									"source": 19
								},
								{
									"begin": 6831,
									"end": 6880,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "84"
								},
								{
									"begin": 6831,
									"end": 6880,
									"name": "JUMP",
									"source": 19,
									"value": "[in]"
								},
								{
									"begin": 6831,
									"end": 6880,
									"name": "tag",
									"source": 19,
									"value": "100"
								},
								{
									"begin": 6831,
									"end": 6880,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 6824,
									"end": 6829,
									"name": "DUP2",
									"source": 19
								},
								{
									"begin": 6821,
									"end": 6881,
									"name": "EQ",
									"source": 19
								},
								{
									"begin": 6811,
									"end": 6813,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "101"
								},
								{
									"begin": 6811,
									"end": 6813,
									"name": "JUMPI",
									"source": 19
								},
								{
									"begin": 6895,
									"end": 6896,
									"name": "PUSH",
									"source": 19,
									"value": "0"
								},
								{
									"begin": 6892,
									"end": 6893,
									"name": "DUP1",
									"source": 19
								},
								{
									"begin": 6885,
									"end": 6897,
									"name": "REVERT",
									"source": 19
								},
								{
									"begin": 6811,
									"end": 6813,
									"name": "tag",
									"source": 19,
									"value": "101"
								},
								{
									"begin": 6811,
									"end": 6813,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 6801,
									"end": 6905,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 6801,
									"end": 6905,
									"name": "JUMP",
									"source": 19,
									"value": "[out]"
								},
								{
									"begin": 6911,
									"end": 7031,
									"name": "tag",
									"source": 19,
									"value": "33"
								},
								{
									"begin": 6911,
									"end": 7031,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 6983,
									"end": 7006,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "103"
								},
								{
									"begin": 7000,
									"end": 7005,
									"name": "DUP2",
									"source": 19
								},
								{
									"begin": 6983,
									"end": 7006,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "66"
								},
								{
									"begin": 6983,
									"end": 7006,
									"name": "JUMP",
									"source": 19,
									"value": "[in]"
								},
								{
									"begin": 6983,
									"end": 7006,
									"name": "tag",
									"source": 19,
									"value": "103"
								},
								{
									"begin": 6983,
									"end": 7006,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 6976,
									"end": 6981,
									"name": "DUP2",
									"source": 19
								},
								{
									"begin": 6973,
									"end": 7007,
									"name": "EQ",
									"source": 19
								},
								{
									"begin": 6963,
									"end": 6965,
									"name": "PUSH [tag]",
									"source": 19,
									"value": "104"
								},
								{
									"begin": 6963,
									"end": 6965,
									"name": "JUMPI",
									"source": 19
								},
								{
									"begin": 7021,
									"end": 7022,
									"name": "PUSH",
									"source": 19,
									"value": "0"
								},
								{
									"begin": 7018,
									"end": 7019,
									"name": "DUP1",
									"source": 19
								},
								{
									"begin": 7011,
									"end": 7023,
									"name": "REVERT",
									"source": 19
								},
								{
									"begin": 6963,
									"end": 6965,
									"name": "tag",
									"source": 19,
									"value": "104"
								},
								{
									"begin": 6963,
									"end": 6965,
									"name": "JUMPDEST",
									"source": 19
								},
								{
									"begin": 6953,
									"end": 7031,
									"name": "POP",
									"source": 19
								},
								{
									"begin": 6953,
									"end": 7031,
									"name": "JUMP",
									"source": 19,
									"value": "[out]"
								},
								{
									"begin": 743,
									"end": 19463,
									"name": "tag",
									"source": 6,
									"value": "20"
								},
								{
									"begin": 743,
									"end": 19463,
									"name": "JUMPDEST",
									"source": 6
								},
								{
									"begin": 743,
									"end": 19463,
									"name": "PUSH #[$]",
									"source": 6,
									"value": "0000000000000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 743,
									"end": 19463,
									"name": "DUP1",
									"source": 6
								},
								{
									"begin": 743,
									"end": 19463,
									"name": "PUSH [$]",
									"source": 6,
									"value": "0000000000000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 743,
									"end": 19463,
									"name": "PUSH",
									"source": 6,
									"value": "0"
								},
								{
									"begin": 743,
									"end": 19463,
									"name": "CODECOPY",
									"source": 6
								},
								{
									"begin": 743,
									"end": 19463,
									"name": "PUSH",
									"source": 6,
									"value": "0"
								},
								{
									"begin": 743,
									"end": 19463,
									"name": "RETURN",
									"source": 6
								}
							],
							".data": {
								"0": {
									".auxdata": "a26469706673582212207aa42903eb30c0bc06465fc482ce04bda38fd8e88753fadd4536243caaa18dbb64736f6c63430008060033",
									".code": [
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH",
											"source": 6,
											"value": "80"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "CALLVALUE",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "ISZERO",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "1"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "REVERT",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "tag",
											"source": 6,
											"value": "1"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH",
											"source": 6,
											"value": "4"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "CALLDATASIZE",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "LT",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "2"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "CALLDATALOAD",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH",
											"source": 6,
											"value": "E0"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "SHR",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH",
											"source": 6,
											"value": "AC9650D8"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "GT",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "21"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH",
											"source": 6,
											"value": "F00B1997"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "GT",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "22"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH",
											"source": 6,
											"value": "F00B1997"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "EQ",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "16"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH",
											"source": 6,
											"value": "F1883E5D"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "EQ",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "17"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH",
											"source": 6,
											"value": "F741E08F"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "EQ",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "18"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH",
											"source": 6,
											"value": "FBFA77CF"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "EQ",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "19"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH",
											"source": 6,
											"value": "FD401628"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "EQ",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "2"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "JUMP",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "tag",
											"source": 6,
											"value": "22"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH",
											"source": 6,
											"value": "AC9650D8"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "EQ",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "12"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH",
											"source": 6,
											"value": "AC9FB71D"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "EQ",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "13"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH",
											"source": 6,
											"value": "BBA06F27"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "EQ",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "14"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH",
											"source": 6,
											"value": "E5F744B8"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "EQ",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "15"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "2"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "JUMP",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "tag",
											"source": 6,
											"value": "21"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH",
											"source": 6,
											"value": "5902FC3B"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "GT",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "23"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH",
											"source": 6,
											"value": "5902FC3B"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "EQ",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "7"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH",
											"source": 6,
											"value": "6E8FC2D3"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "EQ",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "8"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH",
											"source": 6,
											"value": "81D7AF2E"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "EQ",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "9"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH",
											"source": 6,
											"value": "95CEBCD4"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "EQ",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "10"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH",
											"source": 6,
											"value": "99EECB3B"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "EQ",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "11"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "2"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "JUMP",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "tag",
											"source": 6,
											"value": "23"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH",
											"source": 6,
											"value": "6302EF1"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "EQ",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "3"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH",
											"source": 6,
											"value": "31661930"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "EQ",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "4"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH",
											"source": 6,
											"value": "4046EBAE"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "EQ",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "5"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH",
											"source": 6,
											"value": "5767BBA5"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "EQ",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "6"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "tag",
											"source": 6,
											"value": "2"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 743,
											"end": 19463,
											"name": "REVERT",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "tag",
											"source": 6,
											"value": "3"
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "24"
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "PUSH",
											"source": 6,
											"value": "4"
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "CALLDATASIZE",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "25"
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "26"
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "tag",
											"source": 6,
											"value": "25"
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "27"
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "tag",
											"source": 6,
											"value": "24"
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "28"
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "29"
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "tag",
											"source": 6,
											"value": "28"
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "RETURN",
											"source": 6
										},
										{
											"begin": 9630,
											"end": 9842,
											"name": "tag",
											"source": 6,
											"value": "4"
										},
										{
											"begin": 9630,
											"end": 9842,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 9630,
											"end": 9842,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "30"
										},
										{
											"begin": 9630,
											"end": 9842,
											"name": "PUSH",
											"source": 6,
											"value": "4"
										},
										{
											"begin": 9630,
											"end": 9842,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 9630,
											"end": 9842,
											"name": "CALLDATASIZE",
											"source": 6
										},
										{
											"begin": 9630,
											"end": 9842,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 9630,
											"end": 9842,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 9630,
											"end": 9842,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 9630,
											"end": 9842,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 9630,
											"end": 9842,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "31"
										},
										{
											"begin": 9630,
											"end": 9842,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 9630,
											"end": 9842,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 9630,
											"end": 9842,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "32"
										},
										{
											"begin": 9630,
											"end": 9842,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 9630,
											"end": 9842,
											"name": "tag",
											"source": 6,
											"value": "31"
										},
										{
											"begin": 9630,
											"end": 9842,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 9630,
											"end": 9842,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "33"
										},
										{
											"begin": 9630,
											"end": 9842,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 9630,
											"end": 9842,
											"name": "tag",
											"source": 6,
											"value": "30"
										},
										{
											"begin": 9630,
											"end": 9842,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 9630,
											"end": 9842,
											"name": "STOP",
											"source": 6
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "tag",
											"source": 6,
											"value": "5"
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "34"
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "35"
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "tag",
											"source": 6,
											"value": "34"
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "36"
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "37"
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "tag",
											"source": 6,
											"value": "36"
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "RETURN",
											"source": 6
										},
										{
											"begin": 10591,
											"end": 10789,
											"name": "tag",
											"source": 6,
											"value": "6"
										},
										{
											"begin": 10591,
											"end": 10789,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 10591,
											"end": 10789,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "38"
										},
										{
											"begin": 10591,
											"end": 10789,
											"name": "PUSH",
											"source": 6,
											"value": "4"
										},
										{
											"begin": 10591,
											"end": 10789,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 10591,
											"end": 10789,
											"name": "CALLDATASIZE",
											"source": 6
										},
										{
											"begin": 10591,
											"end": 10789,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 10591,
											"end": 10789,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 10591,
											"end": 10789,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 10591,
											"end": 10789,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 10591,
											"end": 10789,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "39"
										},
										{
											"begin": 10591,
											"end": 10789,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 10591,
											"end": 10789,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 10591,
											"end": 10789,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 10591,
											"end": 10789,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 10591,
											"end": 10789,
											"name": "tag",
											"source": 6,
											"value": "39"
										},
										{
											"begin": 10591,
											"end": 10789,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 10591,
											"end": 10789,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "41"
										},
										{
											"begin": 10591,
											"end": 10789,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 10591,
											"end": 10789,
											"name": "tag",
											"source": 6,
											"value": "38"
										},
										{
											"begin": 10591,
											"end": 10789,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 10591,
											"end": 10789,
											"name": "STOP",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "tag",
											"source": 6,
											"value": "7"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "42"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "PUSH",
											"source": 6,
											"value": "4"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "CALLDATASIZE",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "43"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "44"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "tag",
											"source": 6,
											"value": "43"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "45"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "tag",
											"source": 6,
											"value": "42"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "46"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "SWAP3",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "47"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "tag",
											"source": 6,
											"value": "46"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "RETURN",
											"source": 6
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "tag",
											"source": 6,
											"value": "8"
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "48"
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "PUSH",
											"source": 6,
											"value": "4"
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "CALLDATASIZE",
											"source": 6
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "49"
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "50"
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "tag",
											"source": 6,
											"value": "49"
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "51"
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "tag",
											"source": 6,
											"value": "48"
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "52"
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "53"
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "tag",
											"source": 6,
											"value": "52"
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "RETURN",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "tag",
											"source": 6,
											"value": "9"
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "54"
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "PUSH",
											"source": 6,
											"value": "4"
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "CALLDATASIZE",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "55"
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "56"
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "tag",
											"source": 6,
											"value": "55"
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "57"
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "tag",
											"source": 6,
											"value": "54"
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "58"
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "29"
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "tag",
											"source": 6,
											"value": "58"
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "RETURN",
											"source": 6
										},
										{
											"begin": 9379,
											"end": 9591,
											"name": "tag",
											"source": 6,
											"value": "10"
										},
										{
											"begin": 9379,
											"end": 9591,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 9379,
											"end": 9591,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "59"
										},
										{
											"begin": 9379,
											"end": 9591,
											"name": "PUSH",
											"source": 6,
											"value": "4"
										},
										{
											"begin": 9379,
											"end": 9591,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 9379,
											"end": 9591,
											"name": "CALLDATASIZE",
											"source": 6
										},
										{
											"begin": 9379,
											"end": 9591,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 9379,
											"end": 9591,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 9379,
											"end": 9591,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 9379,
											"end": 9591,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 9379,
											"end": 9591,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "60"
										},
										{
											"begin": 9379,
											"end": 9591,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 9379,
											"end": 9591,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 9379,
											"end": 9591,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "32"
										},
										{
											"begin": 9379,
											"end": 9591,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 9379,
											"end": 9591,
											"name": "tag",
											"source": 6,
											"value": "60"
										},
										{
											"begin": 9379,
											"end": 9591,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 9379,
											"end": 9591,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "61"
										},
										{
											"begin": 9379,
											"end": 9591,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 9379,
											"end": 9591,
											"name": "tag",
											"source": 6,
											"value": "59"
										},
										{
											"begin": 9379,
											"end": 9591,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 9379,
											"end": 9591,
											"name": "STOP",
											"source": 6
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "tag",
											"source": 6,
											"value": "11"
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "62"
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "63"
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "tag",
											"source": 6,
											"value": "62"
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "64"
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "65"
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "tag",
											"source": 6,
											"value": "64"
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "RETURN",
											"source": 6
										},
										{
											"begin": 407,
											"end": 715,
											"name": "tag",
											"source": 4,
											"value": "12"
										},
										{
											"begin": 407,
											"end": 715,
											"name": "JUMPDEST",
											"source": 4
										},
										{
											"begin": 407,
											"end": 715,
											"name": "PUSH [tag]",
											"source": 4,
											"value": "66"
										},
										{
											"begin": 407,
											"end": 715,
											"name": "PUSH",
											"source": 4,
											"value": "4"
										},
										{
											"begin": 407,
											"end": 715,
											"name": "DUP1",
											"source": 4
										},
										{
											"begin": 407,
											"end": 715,
											"name": "CALLDATASIZE",
											"source": 4
										},
										{
											"begin": 407,
											"end": 715,
											"name": "SUB",
											"source": 4
										},
										{
											"begin": 407,
											"end": 715,
											"name": "DUP2",
											"source": 4
										},
										{
											"begin": 407,
											"end": 715,
											"name": "ADD",
											"source": 4
										},
										{
											"begin": 407,
											"end": 715,
											"name": "SWAP1",
											"source": 4
										},
										{
											"begin": 407,
											"end": 715,
											"name": "PUSH [tag]",
											"source": 4,
											"value": "67"
										},
										{
											"begin": 407,
											"end": 715,
											"name": "SWAP2",
											"source": 4
										},
										{
											"begin": 407,
											"end": 715,
											"name": "SWAP1",
											"source": 4
										},
										{
											"begin": 407,
											"end": 715,
											"name": "PUSH [tag]",
											"source": 4,
											"value": "68"
										},
										{
											"begin": 407,
											"end": 715,
											"name": "JUMP",
											"source": 4,
											"value": "[in]"
										},
										{
											"begin": 407,
											"end": 715,
											"name": "tag",
											"source": 4,
											"value": "67"
										},
										{
											"begin": 407,
											"end": 715,
											"name": "JUMPDEST",
											"source": 4
										},
										{
											"begin": 407,
											"end": 715,
											"name": "PUSH [tag]",
											"source": 4,
											"value": "69"
										},
										{
											"begin": 407,
											"end": 715,
											"name": "JUMP",
											"source": 4,
											"value": "[in]"
										},
										{
											"begin": 407,
											"end": 715,
											"name": "tag",
											"source": 4,
											"value": "66"
										},
										{
											"begin": 407,
											"end": 715,
											"name": "JUMPDEST",
											"source": 4
										},
										{
											"begin": 407,
											"end": 715,
											"name": "PUSH",
											"source": 4,
											"value": "40"
										},
										{
											"begin": 407,
											"end": 715,
											"name": "MLOAD",
											"source": 4
										},
										{
											"begin": 407,
											"end": 715,
											"name": "PUSH [tag]",
											"source": 4,
											"value": "70"
										},
										{
											"begin": 407,
											"end": 715,
											"name": "SWAP2",
											"source": 4
										},
										{
											"begin": 407,
											"end": 715,
											"name": "SWAP1",
											"source": 4
										},
										{
											"begin": 407,
											"end": 715,
											"name": "PUSH [tag]",
											"source": 4,
											"value": "71"
										},
										{
											"begin": 407,
											"end": 715,
											"name": "JUMP",
											"source": 4,
											"value": "[in]"
										},
										{
											"begin": 407,
											"end": 715,
											"name": "tag",
											"source": 4,
											"value": "70"
										},
										{
											"begin": 407,
											"end": 715,
											"name": "JUMPDEST",
											"source": 4
										},
										{
											"begin": 407,
											"end": 715,
											"name": "PUSH",
											"source": 4,
											"value": "40"
										},
										{
											"begin": 407,
											"end": 715,
											"name": "MLOAD",
											"source": 4
										},
										{
											"begin": 407,
											"end": 715,
											"name": "DUP1",
											"source": 4
										},
										{
											"begin": 407,
											"end": 715,
											"name": "SWAP2",
											"source": 4
										},
										{
											"begin": 407,
											"end": 715,
											"name": "SUB",
											"source": 4
										},
										{
											"begin": 407,
											"end": 715,
											"name": "SWAP1",
											"source": 4
										},
										{
											"begin": 407,
											"end": 715,
											"name": "RETURN",
											"source": 4
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "tag",
											"source": 6,
											"value": "13"
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "72"
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "73"
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "tag",
											"source": 6,
											"value": "72"
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "74"
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "75"
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "tag",
											"source": 6,
											"value": "74"
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "RETURN",
											"source": 6
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "tag",
											"source": 6,
											"value": "14"
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "76"
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "PUSH",
											"source": 6,
											"value": "4"
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "CALLDATASIZE",
											"source": 6
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "77"
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "26"
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "tag",
											"source": 6,
											"value": "77"
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "78"
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "tag",
											"source": 6,
											"value": "76"
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "79"
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "29"
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "tag",
											"source": 6,
											"value": "79"
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "RETURN",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "tag",
											"source": 6,
											"value": "15"
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "80"
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "PUSH",
											"source": 6,
											"value": "4"
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "CALLDATASIZE",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "81"
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "82"
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "tag",
											"source": 6,
											"value": "81"
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "83"
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "tag",
											"source": 6,
											"value": "80"
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "84"
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "29"
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "tag",
											"source": 6,
											"value": "84"
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "RETURN",
											"source": 6
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "tag",
											"source": 6,
											"value": "16"
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "85"
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "PUSH",
											"source": 6,
											"value": "4"
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "CALLDATASIZE",
											"source": 6
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "86"
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "87"
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "tag",
											"source": 6,
											"value": "86"
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "88"
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "tag",
											"source": 6,
											"value": "85"
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "89"
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "29"
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "tag",
											"source": 6,
											"value": "89"
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "RETURN",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "tag",
											"source": 6,
											"value": "17"
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "90"
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "PUSH",
											"source": 6,
											"value": "4"
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "CALLDATASIZE",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "91"
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "92"
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "tag",
											"source": 6,
											"value": "91"
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "93"
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "tag",
											"source": 6,
											"value": "90"
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "94"
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "29"
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "tag",
											"source": 6,
											"value": "94"
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "RETURN",
											"source": 6
										},
										{
											"begin": 10119,
											"end": 10388,
											"name": "tag",
											"source": 6,
											"value": "18"
										},
										{
											"begin": 10119,
											"end": 10388,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 10119,
											"end": 10388,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "95"
										},
										{
											"begin": 10119,
											"end": 10388,
											"name": "PUSH",
											"source": 6,
											"value": "4"
										},
										{
											"begin": 10119,
											"end": 10388,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 10119,
											"end": 10388,
											"name": "CALLDATASIZE",
											"source": 6
										},
										{
											"begin": 10119,
											"end": 10388,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 10119,
											"end": 10388,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 10119,
											"end": 10388,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 10119,
											"end": 10388,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 10119,
											"end": 10388,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "96"
										},
										{
											"begin": 10119,
											"end": 10388,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 10119,
											"end": 10388,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 10119,
											"end": 10388,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "87"
										},
										{
											"begin": 10119,
											"end": 10388,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 10119,
											"end": 10388,
											"name": "tag",
											"source": 6,
											"value": "96"
										},
										{
											"begin": 10119,
											"end": 10388,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 10119,
											"end": 10388,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "97"
										},
										{
											"begin": 10119,
											"end": 10388,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 10119,
											"end": 10388,
											"name": "tag",
											"source": 6,
											"value": "95"
										},
										{
											"begin": 10119,
											"end": 10388,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 10119,
											"end": 10388,
											"name": "STOP",
											"source": 6
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "tag",
											"source": 6,
											"value": "19"
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "98"
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "99"
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "tag",
											"source": 6,
											"value": "98"
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "100"
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "37"
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "tag",
											"source": 6,
											"value": "100"
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "RETURN",
											"source": 6
										},
										{
											"begin": 8011,
											"end": 9340,
											"name": "tag",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 8011,
											"end": 9340,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 8011,
											"end": 9340,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "101"
										},
										{
											"begin": 8011,
											"end": 9340,
											"name": "PUSH",
											"source": 6,
											"value": "4"
										},
										{
											"begin": 8011,
											"end": 9340,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 8011,
											"end": 9340,
											"name": "CALLDATASIZE",
											"source": 6
										},
										{
											"begin": 8011,
											"end": 9340,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 8011,
											"end": 9340,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 8011,
											"end": 9340,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 8011,
											"end": 9340,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8011,
											"end": 9340,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "102"
										},
										{
											"begin": 8011,
											"end": 9340,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 8011,
											"end": 9340,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8011,
											"end": 9340,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "103"
										},
										{
											"begin": 8011,
											"end": 9340,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 8011,
											"end": 9340,
											"name": "tag",
											"source": 6,
											"value": "102"
										},
										{
											"begin": 8011,
											"end": 9340,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 8011,
											"end": 9340,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "104"
										},
										{
											"begin": 8011,
											"end": 9340,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 8011,
											"end": 9340,
											"name": "tag",
											"source": 6,
											"value": "101"
										},
										{
											"begin": 8011,
											"end": 9340,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 8011,
											"end": 9340,
											"name": "STOP",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "tag",
											"source": 6,
											"value": "27"
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 1024,
											"end": 1101,
											"name": "JUMP",
											"source": 6,
											"value": "[out]"
										},
										{
											"begin": 9630,
											"end": 9842,
											"name": "tag",
											"source": 6,
											"value": "33"
										},
										{
											"begin": 9630,
											"end": 9842,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 19394,
											"end": 19409,
											"name": "PUSH",
											"source": 6,
											"value": "5"
										},
										{
											"begin": 19394,
											"end": 19409,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 19394,
											"end": 19409,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 19394,
											"end": 19409,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 19394,
											"end": 19409,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 19394,
											"end": 19409,
											"name": "PUSH",
											"source": 6,
											"value": "100"
										},
										{
											"begin": 19394,
											"end": 19409,
											"name": "EXP",
											"source": 6
										},
										{
											"begin": 19394,
											"end": 19409,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 19394,
											"end": 19409,
											"name": "DIV",
											"source": 6
										},
										{
											"begin": 19394,
											"end": 19409,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 19394,
											"end": 19409,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 19372,
											"end": 19410,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 19372,
											"end": 19410,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 19372,
											"end": 19382,
											"name": "CALLER",
											"source": 6
										},
										{
											"begin": 19372,
											"end": 19410,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 19372,
											"end": 19410,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 19372,
											"end": 19410,
											"name": "EQ",
											"source": 6
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "106"
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "PUSH",
											"source": 6,
											"value": "8C379A000000000000000000000000000000000000000000000000000000000"
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "PUSH",
											"source": 6,
											"value": "4"
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "107"
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "108"
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "tag",
											"source": 6,
											"value": "107"
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "REVERT",
											"source": 6
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "tag",
											"source": 6,
											"value": "106"
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 9793,
											"end": 9835,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "110"
										},
										{
											"begin": 9803,
											"end": 9809,
											"name": "DUP4",
											"source": 6
										},
										{
											"begin": 9811,
											"end": 9816,
											"name": "DUP4",
											"source": 6
										},
										{
											"begin": 9818,
											"end": 9834,
											"name": "DUP4",
											"source": 6
										},
										{
											"begin": 9793,
											"end": 9802,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "111"
										},
										{
											"begin": 9793,
											"end": 9835,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 9793,
											"end": 9835,
											"name": "tag",
											"source": 6,
											"value": "110"
										},
										{
											"begin": 9793,
											"end": 9835,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 9630,
											"end": 9842,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 9630,
											"end": 9842,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 9630,
											"end": 9842,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 9630,
											"end": 9842,
											"name": "JUMP",
											"source": 6,
											"value": "[out]"
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "tag",
											"source": 6,
											"value": "35"
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "PUSH",
											"source": 6,
											"value": "7"
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "PUSH",
											"source": 6,
											"value": "100"
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "EXP",
											"source": 6
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "DIV",
											"source": 6
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 2644,
											"end": 2669,
											"name": "JUMP",
											"source": 6,
											"value": "[out]"
										},
										{
											"begin": 10591,
											"end": 10789,
											"name": "tag",
											"source": 6,
											"value": "41"
										},
										{
											"begin": 10591,
											"end": 10789,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 10659,
											"end": 10680,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 10683,
											"end": 10698,
											"name": "PUSH",
											"source": 6,
											"value": "5"
										},
										{
											"begin": 10683,
											"end": 10698,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 10683,
											"end": 10698,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10698,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10698,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10698,
											"name": "PUSH",
											"source": 6,
											"value": "100"
										},
										{
											"begin": 10683,
											"end": 10698,
											"name": "EXP",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10698,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10698,
											"name": "DIV",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10698,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 10683,
											"end": 10698,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10718,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 10683,
											"end": 10718,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10718,
											"name": "PUSH",
											"source": 6,
											"value": "78FA672E"
										},
										{
											"begin": 10719,
											"end": 10725,
											"name": "DUP5",
											"source": 6
										},
										{
											"begin": 10727,
											"end": 10732,
											"name": "DUP5",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "DUP4",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFF"
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "PUSH",
											"source": 6,
											"value": "E0"
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "SHL",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "PUSH",
											"source": 6,
											"value": "4"
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "113"
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "SWAP3",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "114"
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "tag",
											"source": 6,
											"value": "113"
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "DUP4",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "DUP7",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "EXTCODESIZE",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "ISZERO",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "ISZERO",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "115"
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "REVERT",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "tag",
											"source": 6,
											"value": "115"
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "GAS",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "STATICCALL",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "ISZERO",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "ISZERO",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "117"
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "RETURNDATASIZE",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "RETURNDATACOPY",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "RETURNDATASIZE",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "REVERT",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "tag",
											"source": 6,
											"value": "117"
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "RETURNDATASIZE",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "PUSH",
											"source": 6,
											"value": "1F"
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "NOT",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "PUSH",
											"source": 6,
											"value": "1F"
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "118"
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "119"
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "tag",
											"source": 6,
											"value": "118"
										},
										{
											"begin": 10683,
											"end": 10733,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 10659,
											"end": 10733,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 10659,
											"end": 10733,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 10743,
											"end": 10782,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "120"
										},
										{
											"begin": 10753,
											"end": 10759,
											"name": "DUP4",
											"source": 6
										},
										{
											"begin": 10761,
											"end": 10766,
											"name": "DUP4",
											"source": 6
										},
										{
											"begin": 10768,
											"end": 10781,
											"name": "DUP4",
											"source": 6
										},
										{
											"begin": 10743,
											"end": 10752,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "111"
										},
										{
											"begin": 10743,
											"end": 10782,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 10743,
											"end": 10782,
											"name": "tag",
											"source": 6,
											"value": "120"
										},
										{
											"begin": 10743,
											"end": 10782,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 10649,
											"end": 10789,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 10591,
											"end": 10789,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 10591,
											"end": 10789,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 10591,
											"end": 10789,
											"name": "JUMP",
											"source": 6,
											"value": "[out]"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "tag",
											"source": 6,
											"value": "45"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "PUSH",
											"source": 6,
											"value": "4"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "LT",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "121"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "REVERT",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "tag",
											"source": 6,
											"value": "121"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "PUSH",
											"source": 6,
											"value": "100"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "EXP",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "DIV",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "PUSH",
											"source": 6,
											"value": "14"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "PUSH",
											"source": 6,
											"value": "100"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "EXP",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "DIV",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFF"
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 2341,
											"end": 2399,
											"name": "JUMP",
											"source": 6,
											"value": "[out]"
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "tag",
											"source": 6,
											"value": "51"
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 6770,
											"end": 6788,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "123"
										},
										{
											"begin": 6770,
											"end": 6788,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "124"
										},
										{
											"begin": 6770,
											"end": 6788,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 6770,
											"end": 6788,
											"name": "tag",
											"source": 6,
											"value": "123"
										},
										{
											"begin": 6770,
											"end": 6788,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 6807,
											"end": 6834,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "126"
										},
										{
											"begin": 6827,
											"end": 6833,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 6807,
											"end": 6826,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "127"
										},
										{
											"begin": 6807,
											"end": 6834,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 6807,
											"end": 6834,
											"name": "tag",
											"source": 6,
											"value": "126"
										},
										{
											"begin": 6807,
											"end": 6834,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 6800,
											"end": 6834,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 6800,
											"end": 6834,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 6703,
											"end": 6841,
											"name": "JUMP",
											"source": 6,
											"value": "[out]"
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "tag",
											"source": 6,
											"value": "57"
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "PUSH",
											"source": 6,
											"value": "2"
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "SWAP3",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "SWAP3",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 1582,
											"end": 1705,
											"name": "JUMP",
											"source": 6,
											"value": "[out]"
										},
										{
											"begin": 9379,
											"end": 9591,
											"name": "tag",
											"source": 6,
											"value": "61"
										},
										{
											"begin": 9379,
											"end": 9591,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 19394,
											"end": 19409,
											"name": "PUSH",
											"source": 6,
											"value": "5"
										},
										{
											"begin": 19394,
											"end": 19409,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 19394,
											"end": 19409,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 19394,
											"end": 19409,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 19394,
											"end": 19409,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 19394,
											"end": 19409,
											"name": "PUSH",
											"source": 6,
											"value": "100"
										},
										{
											"begin": 19394,
											"end": 19409,
											"name": "EXP",
											"source": 6
										},
										{
											"begin": 19394,
											"end": 19409,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 19394,
											"end": 19409,
											"name": "DIV",
											"source": 6
										},
										{
											"begin": 19394,
											"end": 19409,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 19394,
											"end": 19409,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 19372,
											"end": 19410,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 19372,
											"end": 19410,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 19372,
											"end": 19382,
											"name": "CALLER",
											"source": 6
										},
										{
											"begin": 19372,
											"end": 19410,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 19372,
											"end": 19410,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 19372,
											"end": 19410,
											"name": "EQ",
											"source": 6
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "129"
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "PUSH",
											"source": 6,
											"value": "8C379A000000000000000000000000000000000000000000000000000000000"
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "PUSH",
											"source": 6,
											"value": "4"
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "130"
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "108"
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "tag",
											"source": 6,
											"value": "130"
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "REVERT",
											"source": 6
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "tag",
											"source": 6,
											"value": "129"
										},
										{
											"begin": 19364,
											"end": 19443,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 9542,
											"end": 9584,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "132"
										},
										{
											"begin": 9552,
											"end": 9558,
											"name": "DUP4",
											"source": 6
										},
										{
											"begin": 9560,
											"end": 9565,
											"name": "DUP4",
											"source": 6
										},
										{
											"begin": 9567,
											"end": 9583,
											"name": "DUP4",
											"source": 6
										},
										{
											"begin": 9542,
											"end": 9551,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "111"
										},
										{
											"begin": 9542,
											"end": 9584,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 9542,
											"end": 9584,
											"name": "tag",
											"source": 6,
											"value": "132"
										},
										{
											"begin": 9542,
											"end": 9584,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 9379,
											"end": 9591,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 9379,
											"end": 9591,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 9379,
											"end": 9591,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 9379,
											"end": 9591,
											"name": "JUMP",
											"source": 6,
											"value": "[out]"
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "tag",
											"source": 6,
											"value": "63"
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "PUSH",
											"source": 6,
											"value": "5"
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "PUSH",
											"source": 6,
											"value": "100"
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "EXP",
											"source": 6
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "DIV",
											"source": 6
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 2455,
											"end": 2494,
											"name": "JUMP",
											"source": 6,
											"value": "[out]"
										},
										{
											"begin": 407,
											"end": 715,
											"name": "tag",
											"source": 4,
											"value": "69"
										},
										{
											"begin": 407,
											"end": 715,
											"name": "JUMPDEST",
											"source": 4
										},
										{
											"begin": 475,
											"end": 497,
											"name": "PUSH",
											"source": 4,
											"value": "60"
										},
										{
											"begin": 531,
											"end": 535,
											"name": "DUP3",
											"source": 4
										},
										{
											"begin": 531,
											"end": 535,
											"name": "DUP3",
											"source": 4
										},
										{
											"begin": 531,
											"end": 542,
											"name": "SWAP1",
											"source": 4
										},
										{
											"begin": 531,
											"end": 542,
											"name": "POP",
											"source": 4
										},
										{
											"begin": 519,
											"end": 543,
											"name": "PUSH",
											"source": 4,
											"value": "FFFFFFFFFFFFFFFF"
										},
										{
											"begin": 519,
											"end": 543,
											"name": "DUP2",
											"source": 4
										},
										{
											"begin": 519,
											"end": 543,
											"name": "GT",
											"source": 4
										},
										{
											"begin": 519,
											"end": 543,
											"name": "ISZERO",
											"source": 4
										},
										{
											"begin": 519,
											"end": 543,
											"name": "PUSH [tag]",
											"source": 4,
											"value": "134"
										},
										{
											"begin": 519,
											"end": 543,
											"name": "JUMPI",
											"source": 4
										},
										{
											"begin": 519,
											"end": 543,
											"name": "PUSH [tag]",
											"source": 4,
											"value": "135"
										},
										{
											"begin": 519,
											"end": 543,
											"name": "PUSH [tag]",
											"source": 4,
											"value": "136"
										},
										{
											"begin": 519,
											"end": 543,
											"name": "JUMP",
											"source": 4,
											"value": "[in]"
										},
										{
											"begin": 519,
											"end": 543,
											"name": "tag",
											"source": 4,
											"value": "135"
										},
										{
											"begin": 519,
											"end": 543,
											"name": "JUMPDEST",
											"source": 4
										},
										{
											"begin": 519,
											"end": 543,
											"name": "tag",
											"source": 4,
											"value": "134"
										},
										{
											"begin": 519,
											"end": 543,
											"name": "JUMPDEST",
											"source": 4
										},
										{
											"begin": 519,
											"end": 543,
											"name": "PUSH",
											"source": 4,
											"value": "40"
										},
										{
											"begin": 519,
											"end": 543,
											"name": "MLOAD",
											"source": 4
										},
										{
											"begin": 519,
											"end": 543,
											"name": "SWAP1",
											"source": 4
										},
										{
											"begin": 519,
											"end": 543,
											"name": "DUP1",
											"source": 4
										},
										{
											"begin": 519,
											"end": 543,
											"name": "DUP3",
											"source": 4
										},
										{
											"begin": 519,
											"end": 543,
											"name": "MSTORE",
											"source": 4
										},
										{
											"begin": 519,
											"end": 543,
											"name": "DUP1",
											"source": 4
										},
										{
											"begin": 519,
											"end": 543,
											"name": "PUSH",
											"source": 4,
											"value": "20"
										},
										{
											"begin": 519,
											"end": 543,
											"name": "MUL",
											"source": 4
										},
										{
											"begin": 519,
											"end": 543,
											"name": "PUSH",
											"source": 4,
											"value": "20"
										},
										{
											"begin": 519,
											"end": 543,
											"name": "ADD",
											"source": 4
										},
										{
											"begin": 519,
											"end": 543,
											"name": "DUP3",
											"source": 4
										},
										{
											"begin": 519,
											"end": 543,
											"name": "ADD",
											"source": 4
										},
										{
											"begin": 519,
											"end": 543,
											"name": "PUSH",
											"source": 4,
											"value": "40"
										},
										{
											"begin": 519,
											"end": 543,
											"name": "MSTORE",
											"source": 4
										},
										{
											"begin": 519,
											"end": 543,
											"name": "DUP1",
											"source": 4
										},
										{
											"begin": 519,
											"end": 543,
											"name": "ISZERO",
											"source": 4
										},
										{
											"begin": 519,
											"end": 543,
											"name": "PUSH [tag]",
											"source": 4,
											"value": "137"
										},
										{
											"begin": 519,
											"end": 543,
											"name": "JUMPI",
											"source": 4
										},
										{
											"begin": 519,
											"end": 543,
											"name": "DUP2",
											"source": 4
										},
										{
											"begin": 519,
											"end": 543,
											"name": "PUSH",
											"source": 4,
											"value": "20"
										},
										{
											"begin": 519,
											"end": 543,
											"name": "ADD",
											"source": 4
										},
										{
											"begin": 519,
											"end": 543,
											"name": "tag",
											"source": 4,
											"value": "138"
										},
										{
											"begin": 519,
											"end": 543,
											"name": "JUMPDEST",
											"source": 4
										},
										{
											"begin": 519,
											"end": 543,
											"name": "PUSH",
											"source": 4,
											"value": "60"
										},
										{
											"begin": 519,
											"end": 543,
											"name": "DUP2",
											"source": 4
										},
										{
											"begin": 519,
											"end": 543,
											"name": "MSTORE",
											"source": 4
										},
										{
											"begin": 519,
											"end": 543,
											"name": "PUSH",
											"source": 4,
											"value": "20"
										},
										{
											"begin": 519,
											"end": 543,
											"name": "ADD",
											"source": 4
										},
										{
											"begin": 519,
											"end": 543,
											"name": "SWAP1",
											"source": 4
										},
										{
											"begin": 519,
											"end": 543,
											"name": "PUSH",
											"source": 4,
											"value": "1"
										},
										{
											"begin": 519,
											"end": 543,
											"name": "SWAP1",
											"source": 4
										},
										{
											"begin": 519,
											"end": 543,
											"name": "SUB",
											"source": 4
										},
										{
											"begin": 519,
											"end": 543,
											"name": "SWAP1",
											"source": 4
										},
										{
											"begin": 519,
											"end": 543,
											"name": "DUP2",
											"source": 4
										},
										{
											"begin": 519,
											"end": 543,
											"name": "PUSH [tag]",
											"source": 4,
											"value": "138"
										},
										{
											"begin": 519,
											"end": 543,
											"name": "JUMPI",
											"source": 4
										},
										{
											"begin": 519,
											"end": 543,
											"name": "SWAP1",
											"source": 4
										},
										{
											"begin": 519,
											"end": 543,
											"name": "POP",
											"source": 4
										},
										{
											"begin": 519,
											"end": 543,
											"name": "tag",
											"source": 4,
											"value": "137"
										},
										{
											"begin": 519,
											"end": 543,
											"name": "JUMPDEST",
											"source": 4
										},
										{
											"begin": 519,
											"end": 543,
											"name": "POP",
											"source": 4
										},
										{
											"begin": 509,
											"end": 543,
											"name": "SWAP1",
											"source": 4
										},
										{
											"begin": 509,
											"end": 543,
											"name": "POP",
											"source": 4
										},
										{
											"begin": 558,
											"end": 567,
											"name": "PUSH",
											"source": 4,
											"value": "0"
										},
										{
											"begin": 553,
											"end": 685,
											"name": "tag",
											"source": 4,
											"value": "139"
										},
										{
											"begin": 553,
											"end": 685,
											"name": "JUMPDEST",
											"source": 4
										},
										{
											"begin": 577,
											"end": 581,
											"name": "DUP4",
											"source": 4
										},
										{
											"begin": 577,
											"end": 581,
											"name": "DUP4",
											"source": 4
										},
										{
											"begin": 577,
											"end": 588,
											"name": "SWAP1",
											"source": 4
										},
										{
											"begin": 577,
											"end": 588,
											"name": "POP",
											"source": 4
										},
										{
											"begin": 573,
											"end": 574,
											"name": "DUP2",
											"source": 4
										},
										{
											"begin": 573,
											"end": 588,
											"name": "LT",
											"source": 4
										},
										{
											"begin": 553,
											"end": 685,
											"name": "ISZERO",
											"source": 4
										},
										{
											"begin": 553,
											"end": 685,
											"name": "PUSH [tag]",
											"source": 4,
											"value": "140"
										},
										{
											"begin": 553,
											"end": 685,
											"name": "JUMPI",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "PUSH [tag]",
											"source": 4,
											"value": "142"
										},
										{
											"begin": 659,
											"end": 663,
											"name": "ADDRESS",
											"source": 4
										},
										{
											"begin": 666,
											"end": 670,
											"name": "DUP6",
											"source": 4
										},
										{
											"begin": 666,
											"end": 670,
											"name": "DUP6",
											"source": 4
										},
										{
											"begin": 671,
											"end": 672,
											"name": "DUP5",
											"source": 4
										},
										{
											"begin": 666,
											"end": 673,
											"name": "DUP2",
											"source": 4
										},
										{
											"begin": 666,
											"end": 673,
											"name": "DUP2",
											"source": 4
										},
										{
											"begin": 666,
											"end": 673,
											"name": "LT",
											"source": 4
										},
										{
											"begin": 666,
											"end": 673,
											"name": "PUSH [tag]",
											"source": 4,
											"value": "143"
										},
										{
											"begin": 666,
											"end": 673,
											"name": "JUMPI",
											"source": 4
										},
										{
											"begin": 666,
											"end": 673,
											"name": "PUSH [tag]",
											"source": 4,
											"value": "144"
										},
										{
											"begin": 666,
											"end": 673,
											"name": "PUSH [tag]",
											"source": 4,
											"value": "145"
										},
										{
											"begin": 666,
											"end": 673,
											"name": "JUMP",
											"source": 4,
											"value": "[in]"
										},
										{
											"begin": 666,
											"end": 673,
											"name": "tag",
											"source": 4,
											"value": "144"
										},
										{
											"begin": 666,
											"end": 673,
											"name": "JUMPDEST",
											"source": 4
										},
										{
											"begin": 666,
											"end": 673,
											"name": "tag",
											"source": 4,
											"value": "143"
										},
										{
											"begin": 666,
											"end": 673,
											"name": "JUMPDEST",
											"source": 4
										},
										{
											"begin": 666,
											"end": 673,
											"name": "SWAP1",
											"source": 4
										},
										{
											"begin": 666,
											"end": 673,
											"name": "POP",
											"source": 4
										},
										{
											"begin": 666,
											"end": 673,
											"name": "PUSH",
											"source": 4,
											"value": "20"
										},
										{
											"begin": 666,
											"end": 673,
											"name": "MUL",
											"source": 4
										},
										{
											"begin": 666,
											"end": 673,
											"name": "DUP2",
											"source": 4
										},
										{
											"begin": 666,
											"end": 673,
											"name": "ADD",
											"source": 4
										},
										{
											"begin": 666,
											"end": 673,
											"name": "SWAP1",
											"source": 4
										},
										{
											"begin": 666,
											"end": 673,
											"name": "PUSH [tag]",
											"source": 4,
											"value": "146"
										},
										{
											"begin": 666,
											"end": 673,
											"name": "SWAP2",
											"source": 4
										},
										{
											"begin": 666,
											"end": 673,
											"name": "SWAP1",
											"source": 4
										},
										{
											"begin": 666,
											"end": 673,
											"name": "PUSH [tag]",
											"source": 4,
											"value": "147"
										},
										{
											"begin": 666,
											"end": 673,
											"name": "JUMP",
											"source": 4,
											"value": "[in]"
										},
										{
											"begin": 666,
											"end": 673,
											"name": "tag",
											"source": 4,
											"value": "146"
										},
										{
											"begin": 666,
											"end": 673,
											"name": "JUMPDEST",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "DUP1",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "DUP1",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "PUSH",
											"source": 4,
											"value": "1F"
										},
										{
											"begin": 622,
											"end": 674,
											"name": "ADD",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "PUSH",
											"source": 4,
											"value": "20"
										},
										{
											"begin": 622,
											"end": 674,
											"name": "DUP1",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "SWAP2",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "DIV",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "MUL",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "PUSH",
											"source": 4,
											"value": "20"
										},
										{
											"begin": 622,
											"end": 674,
											"name": "ADD",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "PUSH",
											"source": 4,
											"value": "40"
										},
										{
											"begin": 622,
											"end": 674,
											"name": "MLOAD",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "SWAP1",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "DUP2",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "ADD",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "PUSH",
											"source": 4,
											"value": "40"
										},
										{
											"begin": 622,
											"end": 674,
											"name": "MSTORE",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "DUP1",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "SWAP4",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "SWAP3",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "SWAP2",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "SWAP1",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "DUP2",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "DUP2",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "MSTORE",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "PUSH",
											"source": 4,
											"value": "20"
										},
										{
											"begin": 622,
											"end": 674,
											"name": "ADD",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "DUP4",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "DUP4",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "DUP1",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "DUP3",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "DUP5",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "CALLDATACOPY",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "PUSH",
											"source": 4,
											"value": "0"
										},
										{
											"begin": 622,
											"end": 674,
											"name": "DUP2",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "DUP5",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "ADD",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "MSTORE",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "PUSH",
											"source": 4,
											"value": "1F"
										},
										{
											"begin": 622,
											"end": 674,
											"name": "NOT",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "PUSH",
											"source": 4,
											"value": "1F"
										},
										{
											"begin": 622,
											"end": 674,
											"name": "DUP3",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "ADD",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "AND",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "SWAP1",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "POP",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "DUP1",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "DUP4",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "ADD",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "SWAP3",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "POP",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "POP",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "POP",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "POP",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "POP",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "POP",
											"source": 4
										},
										{
											"begin": 622,
											"end": 674,
											"name": "POP",
											"source": 4
										},
										{
											"begin": 622,
											"end": 650,
											"name": "PUSH [tag]",
											"source": 4,
											"value": "148"
										},
										{
											"begin": 622,
											"end": 674,
											"name": "JUMP",
											"source": 4,
											"value": "[in]"
										},
										{
											"begin": 622,
											"end": 674,
											"name": "tag",
											"source": 4,
											"value": "142"
										},
										{
											"begin": 622,
											"end": 674,
											"name": "JUMPDEST",
											"source": 4
										},
										{
											"begin": 609,
											"end": 616,
											"name": "DUP3",
											"source": 4
										},
										{
											"begin": 617,
											"end": 618,
											"name": "DUP3",
											"source": 4
										},
										{
											"begin": 609,
											"end": 619,
											"name": "DUP2",
											"source": 4
										},
										{
											"begin": 609,
											"end": 619,
											"name": "MLOAD",
											"source": 4
										},
										{
											"begin": 609,
											"end": 619,
											"name": "DUP2",
											"source": 4
										},
										{
											"begin": 609,
											"end": 619,
											"name": "LT",
											"source": 4
										},
										{
											"begin": 609,
											"end": 619,
											"name": "PUSH [tag]",
											"source": 4,
											"value": "149"
										},
										{
											"begin": 609,
											"end": 619,
											"name": "JUMPI",
											"source": 4
										},
										{
											"begin": 609,
											"end": 619,
											"name": "PUSH [tag]",
											"source": 4,
											"value": "150"
										},
										{
											"begin": 609,
											"end": 619,
											"name": "PUSH [tag]",
											"source": 4,
											"value": "145"
										},
										{
											"begin": 609,
											"end": 619,
											"name": "JUMP",
											"source": 4,
											"value": "[in]"
										},
										{
											"begin": 609,
											"end": 619,
											"name": "tag",
											"source": 4,
											"value": "150"
										},
										{
											"begin": 609,
											"end": 619,
											"name": "JUMPDEST",
											"source": 4
										},
										{
											"begin": 609,
											"end": 619,
											"name": "tag",
											"source": 4,
											"value": "149"
										},
										{
											"begin": 609,
											"end": 619,
											"name": "JUMPDEST",
											"source": 4
										},
										{
											"begin": 609,
											"end": 619,
											"name": "PUSH",
											"source": 4,
											"value": "20"
										},
										{
											"begin": 609,
											"end": 619,
											"name": "MUL",
											"source": 4
										},
										{
											"begin": 609,
											"end": 619,
											"name": "PUSH",
											"source": 4,
											"value": "20"
										},
										{
											"begin": 609,
											"end": 619,
											"name": "ADD",
											"source": 4
										},
										{
											"begin": 609,
											"end": 619,
											"name": "ADD",
											"source": 4
										},
										{
											"begin": 609,
											"end": 674,
											"name": "DUP2",
											"source": 4
										},
										{
											"begin": 609,
											"end": 674,
											"name": "SWAP1",
											"source": 4
										},
										{
											"begin": 609,
											"end": 674,
											"name": "MSTORE",
											"source": 4
										},
										{
											"begin": 609,
											"end": 674,
											"name": "POP",
											"source": 4
										},
										{
											"begin": 590,
											"end": 593,
											"name": "DUP1",
											"source": 4
										},
										{
											"begin": 590,
											"end": 593,
											"name": "DUP1",
											"source": 4
										},
										{
											"begin": 590,
											"end": 593,
											"name": "PUSH [tag]",
											"source": 4,
											"value": "151"
										},
										{
											"begin": 590,
											"end": 593,
											"name": "SWAP1",
											"source": 4
										},
										{
											"begin": 590,
											"end": 593,
											"name": "PUSH [tag]",
											"source": 4,
											"value": "152"
										},
										{
											"begin": 590,
											"end": 593,
											"name": "JUMP",
											"source": 4,
											"value": "[in]"
										},
										{
											"begin": 590,
											"end": 593,
											"name": "tag",
											"source": 4,
											"value": "151"
										},
										{
											"begin": 590,
											"end": 593,
											"name": "JUMPDEST",
											"source": 4
										},
										{
											"begin": 590,
											"end": 593,
											"name": "SWAP2",
											"source": 4
										},
										{
											"begin": 590,
											"end": 593,
											"name": "POP",
											"source": 4
										},
										{
											"begin": 590,
											"end": 593,
											"name": "POP",
											"source": 4
										},
										{
											"begin": 553,
											"end": 685,
											"name": "PUSH [tag]",
											"source": 4,
											"value": "139"
										},
										{
											"begin": 553,
											"end": 685,
											"name": "JUMP",
											"source": 4
										},
										{
											"begin": 553,
											"end": 685,
											"name": "tag",
											"source": 4,
											"value": "140"
										},
										{
											"begin": 553,
											"end": 685,
											"name": "JUMPDEST",
											"source": 4
										},
										{
											"begin": 553,
											"end": 685,
											"name": "POP",
											"source": 4
										},
										{
											"begin": 407,
											"end": 715,
											"name": "SWAP3",
											"source": 4
										},
										{
											"begin": 407,
											"end": 715,
											"name": "SWAP2",
											"source": 4
										},
										{
											"begin": 407,
											"end": 715,
											"name": "POP",
											"source": 4
										},
										{
											"begin": 407,
											"end": 715,
											"name": "POP",
											"source": 4
										},
										{
											"begin": 407,
											"end": 715,
											"name": "JUMP",
											"source": 4,
											"value": "[out]"
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "tag",
											"source": 6,
											"value": "73"
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "PUSH",
											"source": 6,
											"value": "7"
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "PUSH",
											"source": 6,
											"value": "14"
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "PUSH",
											"source": 6,
											"value": "100"
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "EXP",
											"source": 6
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "DIV",
											"source": 6
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFF"
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 2778,
											"end": 2801,
											"name": "JUMP",
											"source": 6,
											"value": "[out]"
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "tag",
											"source": 6,
											"value": "78"
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 11154,
											"end": 11161,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 11173,
											"end": 11189,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 11192,
											"end": 11215,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 11192,
											"end": 11222,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 11216,
											"end": 11221,
											"name": "DUP6",
											"source": 6
										},
										{
											"begin": 11192,
											"end": 11222,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 11192,
											"end": 11222,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 11192,
											"end": 11222,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 11192,
											"end": 11222,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 11192,
											"end": 11222,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 11192,
											"end": 11222,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 11192,
											"end": 11222,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 11192,
											"end": 11222,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 11192,
											"end": 11222,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 11192,
											"end": 11222,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 11192,
											"end": 11222,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 11192,
											"end": 11222,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 11192,
											"end": 11222,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 11192,
											"end": 11222,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 11192,
											"end": 11222,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 11192,
											"end": 11230,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 11223,
											"end": 11229,
											"name": "DUP5",
											"source": 6
										},
										{
											"begin": 11192,
											"end": 11230,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 11192,
											"end": 11230,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 11192,
											"end": 11230,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 11192,
											"end": 11230,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 11192,
											"end": 11230,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 11192,
											"end": 11230,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 11192,
											"end": 11230,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 11192,
											"end": 11230,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 11192,
											"end": 11230,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 11192,
											"end": 11230,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 11192,
											"end": 11230,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 11192,
											"end": 11230,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 11192,
											"end": 11230,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 11192,
											"end": 11230,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 11192,
											"end": 11230,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 11192,
											"end": 11230,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 11173,
											"end": 11230,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 11173,
											"end": 11230,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 11282,
											"end": 11283,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 11241,
											"end": 11264,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 11241,
											"end": 11271,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 11265,
											"end": 11270,
											"name": "DUP7",
											"source": 6
										},
										{
											"begin": 11241,
											"end": 11271,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 11241,
											"end": 11271,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 11241,
											"end": 11271,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 11241,
											"end": 11271,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 11241,
											"end": 11271,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 11241,
											"end": 11271,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 11241,
											"end": 11271,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 11241,
											"end": 11271,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 11241,
											"end": 11271,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 11241,
											"end": 11271,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 11241,
											"end": 11271,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 11241,
											"end": 11271,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 11241,
											"end": 11271,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 11241,
											"end": 11271,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 11241,
											"end": 11271,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 11241,
											"end": 11279,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 11272,
											"end": 11278,
											"name": "DUP6",
											"source": 6
										},
										{
											"begin": 11241,
											"end": 11279,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 11241,
											"end": 11279,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 11241,
											"end": 11279,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 11241,
											"end": 11279,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 11241,
											"end": 11279,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 11241,
											"end": 11279,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 11241,
											"end": 11279,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 11241,
											"end": 11279,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 11241,
											"end": 11279,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 11241,
											"end": 11279,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 11241,
											"end": 11279,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 11241,
											"end": 11279,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 11241,
											"end": 11279,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 11241,
											"end": 11279,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 11241,
											"end": 11279,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 11241,
											"end": 11283,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 11241,
											"end": 11283,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 11241,
											"end": 11283,
											"name": "SSTORE",
											"source": 6
										},
										{
											"begin": 11241,
											"end": 11283,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 11293,
											"end": 11340,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "154"
										},
										{
											"begin": 11317,
											"end": 11322,
											"name": "PUSH",
											"source": 6,
											"value": "6"
										},
										{
											"begin": 11317,
											"end": 11322,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 11317,
											"end": 11322,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 11317,
											"end": 11322,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 11317,
											"end": 11322,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 11317,
											"end": 11322,
											"name": "PUSH",
											"source": 6,
											"value": "100"
										},
										{
											"begin": 11317,
											"end": 11322,
											"name": "EXP",
											"source": 6
										},
										{
											"begin": 11317,
											"end": 11322,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 11317,
											"end": 11322,
											"name": "DIV",
											"source": 6
										},
										{
											"begin": 11317,
											"end": 11322,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 11317,
											"end": 11322,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 11324,
											"end": 11329,
											"name": "DUP6",
											"source": 6
										},
										{
											"begin": 11331,
											"end": 11339,
											"name": "DUP4",
											"source": 6
										},
										{
											"begin": 11293,
											"end": 11299,
											"name": "DUP7",
											"source": 6
										},
										{
											"begin": 11293,
											"end": 11316,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 11293,
											"end": 11316,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 11293,
											"end": 11316,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "155"
										},
										{
											"begin": 11293,
											"end": 11316,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 11293,
											"end": 11340,
											"name": "SWAP4",
											"source": 6
										},
										{
											"begin": 11293,
											"end": 11340,
											"name": "SWAP3",
											"source": 6
										},
										{
											"begin": 11293,
											"end": 11340,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 11293,
											"end": 11340,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 11293,
											"end": 11340,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFF"
										},
										{
											"begin": 11293,
											"end": 11340,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 11293,
											"end": 11340,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 11293,
											"end": 11340,
											"name": "tag",
											"source": 6,
											"value": "154"
										},
										{
											"begin": 11293,
											"end": 11340,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 11391,
											"end": 11397,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 11356,
											"end": 11408,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 11356,
											"end": 11408,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 11384,
											"end": 11389,
											"name": "DUP5",
											"source": 6
										},
										{
											"begin": 11356,
											"end": 11408,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 11356,
											"end": 11408,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 11372,
											"end": 11382,
											"name": "CALLER",
											"source": 6
										},
										{
											"begin": 11356,
											"end": 11408,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 11356,
											"end": 11408,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 11356,
											"end": 11408,
											"name": "PUSH",
											"source": 6,
											"value": "8EA6014D5675F425737C93493B7AB355A73EB41CF878F7315AC58F7753BCD7DA"
										},
										{
											"begin": 11399,
											"end": 11407,
											"name": "DUP5",
											"source": 6
										},
										{
											"begin": 11356,
											"end": 11408,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 11356,
											"end": 11408,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 11356,
											"end": 11408,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "156"
										},
										{
											"begin": 11356,
											"end": 11408,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 11356,
											"end": 11408,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 11356,
											"end": 11408,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "29"
										},
										{
											"begin": 11356,
											"end": 11408,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 11356,
											"end": 11408,
											"name": "tag",
											"source": 6,
											"value": "156"
										},
										{
											"begin": 11356,
											"end": 11408,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 11356,
											"end": 11408,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 11356,
											"end": 11408,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 11356,
											"end": 11408,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 11356,
											"end": 11408,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 11356,
											"end": 11408,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 11356,
											"end": 11408,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 11356,
											"end": 11408,
											"name": "LOG4",
											"source": 6
										},
										{
											"begin": 11426,
											"end": 11434,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 11419,
											"end": 11434,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 11419,
											"end": 11434,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 11419,
											"end": 11434,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "SWAP3",
											"source": 6
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 11090,
											"end": 11441,
											"name": "JUMP",
											"source": 6,
											"value": "[out]"
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "tag",
											"source": 6,
											"value": "83"
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "PUSH",
											"source": 6,
											"value": "1"
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "DUP4",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "SWAP4",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "SWAP4",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 1285,
											"end": 1419,
											"name": "JUMP",
											"source": 6,
											"value": "[out]"
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "tag",
											"source": 6,
											"value": "88"
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 7303,
											"end": 7310,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 7322,
											"end": 7343,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7361,
											"name": "PUSH",
											"source": 6,
											"value": "5"
										},
										{
											"begin": 7346,
											"end": 7361,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 7346,
											"end": 7361,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7361,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7361,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7361,
											"name": "PUSH",
											"source": 6,
											"value": "100"
										},
										{
											"begin": 7346,
											"end": 7361,
											"name": "EXP",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7361,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7361,
											"name": "DIV",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7361,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 7346,
											"end": 7361,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7381,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 7346,
											"end": 7381,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7381,
											"name": "PUSH",
											"source": 6,
											"value": "78FA672E"
										},
										{
											"begin": 7382,
											"end": 7388,
											"name": "DUP7",
											"source": 6
										},
										{
											"begin": 7390,
											"end": 7395,
											"name": "DUP6",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "DUP4",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFF"
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "PUSH",
											"source": 6,
											"value": "E0"
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "SHL",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "PUSH",
											"source": 6,
											"value": "4"
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "158"
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "SWAP3",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "114"
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "tag",
											"source": 6,
											"value": "158"
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "DUP4",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "DUP7",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "EXTCODESIZE",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "ISZERO",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "ISZERO",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "159"
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "REVERT",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "tag",
											"source": 6,
											"value": "159"
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "GAS",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "STATICCALL",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "ISZERO",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "ISZERO",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "161"
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "RETURNDATASIZE",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "RETURNDATACOPY",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "RETURNDATASIZE",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "REVERT",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "tag",
											"source": 6,
											"value": "161"
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "RETURNDATASIZE",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "PUSH",
											"source": 6,
											"value": "1F"
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "NOT",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "PUSH",
											"source": 6,
											"value": "1F"
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "162"
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "119"
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "tag",
											"source": 6,
											"value": "162"
										},
										{
											"begin": 7346,
											"end": 7396,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 7322,
											"end": 7396,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 7322,
											"end": 7396,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 7407,
											"end": 7423,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 7429,
											"end": 7484,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "163"
										},
										{
											"begin": 7441,
											"end": 7447,
											"name": "DUP7",
											"source": 6
										},
										{
											"begin": 7449,
											"end": 7461,
											"name": "DUP7",
											"source": 6
										},
										{
											"begin": 7463,
											"end": 7468,
											"name": "DUP7",
											"source": 6
										},
										{
											"begin": 7470,
											"end": 7483,
											"name": "DUP6",
											"source": 6
										},
										{
											"begin": 7429,
											"end": 7440,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "164"
										},
										{
											"begin": 7429,
											"end": 7484,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 7429,
											"end": 7484,
											"name": "tag",
											"source": 6,
											"value": "163"
										},
										{
											"begin": 7429,
											"end": 7484,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 7406,
											"end": 7484,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 7406,
											"end": 7484,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 7406,
											"end": 7484,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 7502,
											"end": 7510,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 7495,
											"end": 7510,
											"name": "SWAP3",
											"source": 6
										},
										{
											"begin": 7495,
											"end": 7510,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 7495,
											"end": 7510,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 7495,
											"end": 7510,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "SWAP4",
											"source": 6
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "SWAP3",
											"source": 6
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 7166,
											"end": 7517,
											"name": "JUMP",
											"source": 6,
											"value": "[out]"
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "tag",
											"source": 6,
											"value": "93"
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "PUSH",
											"source": 6,
											"value": "3"
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "SWAP3",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "SWAP3",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 1873,
											"end": 1983,
											"name": "JUMP",
											"source": 6,
											"value": "[out]"
										},
										{
											"begin": 10119,
											"end": 10388,
											"name": "tag",
											"source": 6,
											"value": "97"
										},
										{
											"begin": 10119,
											"end": 10388,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 10247,
											"end": 10268,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 10271,
											"end": 10286,
											"name": "PUSH",
											"source": 6,
											"value": "5"
										},
										{
											"begin": 10271,
											"end": 10286,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 10271,
											"end": 10286,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10286,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10286,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10286,
											"name": "PUSH",
											"source": 6,
											"value": "100"
										},
										{
											"begin": 10271,
											"end": 10286,
											"name": "EXP",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10286,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10286,
											"name": "DIV",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10286,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 10271,
											"end": 10286,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10306,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 10271,
											"end": 10306,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10306,
											"name": "PUSH",
											"source": 6,
											"value": "78FA672E"
										},
										{
											"begin": 10307,
											"end": 10313,
											"name": "DUP6",
											"source": 6
										},
										{
											"begin": 10315,
											"end": 10320,
											"name": "DUP5",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "DUP4",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFF"
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "PUSH",
											"source": 6,
											"value": "E0"
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "SHL",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "PUSH",
											"source": 6,
											"value": "4"
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "166"
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "SWAP3",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "114"
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "tag",
											"source": 6,
											"value": "166"
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "DUP4",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "DUP7",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "EXTCODESIZE",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "ISZERO",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "ISZERO",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "167"
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "REVERT",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "tag",
											"source": 6,
											"value": "167"
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "GAS",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "STATICCALL",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "ISZERO",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "ISZERO",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "169"
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "RETURNDATASIZE",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "RETURNDATACOPY",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "RETURNDATASIZE",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "REVERT",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "tag",
											"source": 6,
											"value": "169"
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "RETURNDATASIZE",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "PUSH",
											"source": 6,
											"value": "1F"
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "NOT",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "PUSH",
											"source": 6,
											"value": "1F"
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "170"
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "119"
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "tag",
											"source": 6,
											"value": "170"
										},
										{
											"begin": 10271,
											"end": 10321,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 10247,
											"end": 10321,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 10247,
											"end": 10321,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 10331,
											"end": 10381,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "171"
										},
										{
											"begin": 10338,
											"end": 10344,
											"name": "DUP5",
											"source": 6
										},
										{
											"begin": 10346,
											"end": 10358,
											"name": "DUP5",
											"source": 6
										},
										{
											"begin": 10360,
											"end": 10365,
											"name": "DUP5",
											"source": 6
										},
										{
											"begin": 10367,
											"end": 10380,
											"name": "DUP5",
											"source": 6
										},
										{
											"begin": 10331,
											"end": 10337,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "172"
										},
										{
											"begin": 10331,
											"end": 10381,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 10331,
											"end": 10381,
											"name": "tag",
											"source": 6,
											"value": "171"
										},
										{
											"begin": 10331,
											"end": 10381,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 10237,
											"end": 10388,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 10119,
											"end": 10388,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 10119,
											"end": 10388,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 10119,
											"end": 10388,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 10119,
											"end": 10388,
											"name": "JUMP",
											"source": 6,
											"value": "[out]"
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "tag",
											"source": 6,
											"value": "99"
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "PUSH",
											"source": 6,
											"value": "6"
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "PUSH",
											"source": 6,
											"value": "100"
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "EXP",
											"source": 6
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "DIV",
											"source": 6
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 2540,
											"end": 2560,
											"name": "JUMP",
											"source": 6,
											"value": "[out]"
										},
										{
											"begin": 8011,
											"end": 9340,
											"name": "tag",
											"source": 6,
											"value": "104"
										},
										{
											"begin": 8011,
											"end": 9340,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 8201,
											"end": 8211,
											"name": "PUSH",
											"source": 6,
											"value": "7"
										},
										{
											"begin": 8201,
											"end": 8211,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 8201,
											"end": 8211,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8201,
											"end": 8211,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 8201,
											"end": 8211,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8201,
											"end": 8211,
											"name": "PUSH",
											"source": 6,
											"value": "100"
										},
										{
											"begin": 8201,
											"end": 8211,
											"name": "EXP",
											"source": 6
										},
										{
											"begin": 8201,
											"end": 8211,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8201,
											"end": 8211,
											"name": "DIV",
											"source": 6
										},
										{
											"begin": 8201,
											"end": 8211,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 8201,
											"end": 8211,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 8187,
											"end": 8211,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 8187,
											"end": 8211,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 8187,
											"end": 8197,
											"name": "CALLER",
											"source": 6
										},
										{
											"begin": 8187,
											"end": 8211,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 8187,
											"end": 8211,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 8187,
											"end": 8211,
											"name": "EQ",
											"source": 6
										},
										{
											"begin": 8179,
											"end": 8239,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "174"
										},
										{
											"begin": 8179,
											"end": 8239,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 8179,
											"end": 8239,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 8179,
											"end": 8239,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 8179,
											"end": 8239,
											"name": "PUSH",
											"source": 6,
											"value": "8C379A000000000000000000000000000000000000000000000000000000000"
										},
										{
											"begin": 8179,
											"end": 8239,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 8179,
											"end": 8239,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 8179,
											"end": 8239,
											"name": "PUSH",
											"source": 6,
											"value": "4"
										},
										{
											"begin": 8179,
											"end": 8239,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 8179,
											"end": 8239,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "175"
										},
										{
											"begin": 8179,
											"end": 8239,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8179,
											"end": 8239,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "176"
										},
										{
											"begin": 8179,
											"end": 8239,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 8179,
											"end": 8239,
											"name": "tag",
											"source": 6,
											"value": "175"
										},
										{
											"begin": 8179,
											"end": 8239,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 8179,
											"end": 8239,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 8179,
											"end": 8239,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 8179,
											"end": 8239,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 8179,
											"end": 8239,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 8179,
											"end": 8239,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 8179,
											"end": 8239,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8179,
											"end": 8239,
											"name": "REVERT",
											"source": 6
										},
										{
											"begin": 8179,
											"end": 8239,
											"name": "tag",
											"source": 6,
											"value": "174"
										},
										{
											"begin": 8179,
											"end": 8239,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 8250,
											"end": 8264,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 8275,
											"end": 8282,
											"name": "DUP5",
											"source": 6
										},
										{
											"begin": 8250,
											"end": 8283,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8250,
											"end": 8283,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 8294,
											"end": 8325,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 8328,
											"end": 8355,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "177"
										},
										{
											"begin": 8348,
											"end": 8354,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 8328,
											"end": 8347,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "127"
										},
										{
											"begin": 8328,
											"end": 8355,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 8328,
											"end": 8355,
											"name": "tag",
											"source": 6,
											"value": "177"
										},
										{
											"begin": 8328,
											"end": 8355,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 8294,
											"end": 8355,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8294,
											"end": 8355,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 8380,
											"end": 8392,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 8380,
											"end": 8398,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 8380,
											"end": 8398,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 8380,
											"end": 8398,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 8370,
											"end": 8398,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 8370,
											"end": 8398,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 8370,
											"end": 8376,
											"name": "DUP5",
											"source": 6
										},
										{
											"begin": 8370,
											"end": 8398,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 8370,
											"end": 8398,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 8370,
											"end": 8398,
											"name": "EQ",
											"source": 6
										},
										{
											"begin": 8366,
											"end": 8811,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "178"
										},
										{
											"begin": 8366,
											"end": 8811,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 8414,
											"end": 8439,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 8442,
											"end": 8457,
											"name": "TIMESTAMP",
											"source": 6
										},
										{
											"begin": 8414,
											"end": 8457,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8414,
											"end": 8457,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 8472,
											"end": 8506,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 8509,
											"end": 8621,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 8509,
											"end": 8621,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 8509,
											"end": 8621,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 8509,
											"end": 8621,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 8509,
											"end": 8621,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 8509,
											"end": 8621,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 8509,
											"end": 8621,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 8509,
											"end": 8621,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 8546,
											"end": 8552,
											"name": "DUP8",
											"source": 6
										},
										{
											"begin": 8509,
											"end": 8621,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 8509,
											"end": 8621,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 8509,
											"end": 8621,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 8509,
											"end": 8621,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 8509,
											"end": 8621,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 8509,
											"end": 8621,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 8588,
											"end": 8605,
											"name": "DUP4",
											"source": 6
										},
										{
											"begin": 8509,
											"end": 8621,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFF"
										},
										{
											"begin": 8509,
											"end": 8621,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 8509,
											"end": 8621,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 8509,
											"end": 8621,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 8509,
											"end": 8621,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 8472,
											"end": 8621,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8472,
											"end": 8621,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8653,
											"name": "PUSH",
											"source": 6,
											"value": "4"
										},
										{
											"begin": 8636,
											"end": 8661,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 8654,
											"end": 8660,
											"name": "DUP6",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8661,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 8636,
											"end": 8661,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8661,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 8636,
											"end": 8661,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8661,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8661,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8661,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 8636,
											"end": 8661,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8661,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8661,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8661,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8661,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 8636,
											"end": 8661,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8661,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 8636,
											"end": 8661,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 8667,
											"end": 8682,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "PUSH",
											"source": 6,
											"value": "1"
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "SSTORE",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "PUSH",
											"source": 6,
											"value": "1"
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "PUSH",
											"source": 6,
											"value": "100"
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "EXP",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "MUL",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "NOT",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "DUP4",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "MUL",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "OR",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "SSTORE",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "PUSH",
											"source": 6,
											"value": "14"
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "PUSH",
											"source": 6,
											"value": "100"
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "EXP",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFF"
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "MUL",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "NOT",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "DUP4",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFF"
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "MUL",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "OR",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "SSTORE",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 8636,
											"end": 8683,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 8729,
											"end": 8735,
											"name": "DUP6",
											"source": 6
										},
										{
											"begin": 8703,
											"end": 8755,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 8703,
											"end": 8755,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 8721,
											"end": 8727,
											"name": "DUP5",
											"source": 6
										},
										{
											"begin": 8703,
											"end": 8755,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 8703,
											"end": 8755,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 8703,
											"end": 8755,
											"name": "PUSH",
											"source": 6,
											"value": "D38AA1C6709087859DFA9CA795D9441A64C1FA0B1BF23D8AD02C1853B971E33C"
										},
										{
											"begin": 8737,
											"end": 8754,
											"name": "DUP5",
											"source": 6
										},
										{
											"begin": 8703,
											"end": 8755,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 8703,
											"end": 8755,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 8703,
											"end": 8755,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "180"
										},
										{
											"begin": 8703,
											"end": 8755,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 8703,
											"end": 8755,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8703,
											"end": 8755,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "29"
										},
										{
											"begin": 8703,
											"end": 8755,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 8703,
											"end": 8755,
											"name": "tag",
											"source": 6,
											"value": "180"
										},
										{
											"begin": 8703,
											"end": 8755,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 8703,
											"end": 8755,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 8703,
											"end": 8755,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 8703,
											"end": 8755,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 8703,
											"end": 8755,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 8703,
											"end": 8755,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 8703,
											"end": 8755,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8703,
											"end": 8755,
											"name": "LOG3",
											"source": 6
										},
										{
											"begin": 8785,
											"end": 8800,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 8770,
											"end": 8800,
											"name": "SWAP3",
											"source": 6
										},
										{
											"begin": 8770,
											"end": 8800,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 8400,
											"end": 8811,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 8400,
											"end": 8811,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 8366,
											"end": 8811,
											"name": "tag",
											"source": 6,
											"value": "178"
										},
										{
											"begin": 8366,
											"end": 8811,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 8821,
											"end": 8842,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 8874,
											"end": 8877,
											"name": "PUSH",
											"source": 6,
											"value": "3B9ACA00"
										},
										{
											"begin": 8861,
											"end": 8870,
											"name": "PUSH",
											"source": 6,
											"value": "7"
										},
										{
											"begin": 8861,
											"end": 8870,
											"name": "PUSH",
											"source": 6,
											"value": "14"
										},
										{
											"begin": 8861,
											"end": 8870,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8861,
											"end": 8870,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 8861,
											"end": 8870,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8861,
											"end": 8870,
											"name": "PUSH",
											"source": 6,
											"value": "100"
										},
										{
											"begin": 8861,
											"end": 8870,
											"name": "EXP",
											"source": 6
										},
										{
											"begin": 8861,
											"end": 8870,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8861,
											"end": 8870,
											"name": "DIV",
											"source": 6
										},
										{
											"begin": 8861,
											"end": 8870,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFF"
										},
										{
											"begin": 8861,
											"end": 8870,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 8846,
											"end": 8870,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFF"
										},
										{
											"begin": 8846,
											"end": 8870,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 8846,
											"end": 8858,
											"name": "DUP6",
											"source": 6
										},
										{
											"begin": 8846,
											"end": 8870,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "181"
										},
										{
											"begin": 8846,
											"end": 8870,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 8846,
											"end": 8870,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8846,
											"end": 8870,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "182"
										},
										{
											"begin": 8846,
											"end": 8870,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 8846,
											"end": 8870,
											"name": "tag",
											"source": 6,
											"value": "181"
										},
										{
											"begin": 8846,
											"end": 8870,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 8845,
											"end": 8877,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "183"
										},
										{
											"begin": 8845,
											"end": 8877,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 8845,
											"end": 8877,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8845,
											"end": 8877,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "184"
										},
										{
											"begin": 8845,
											"end": 8877,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 8845,
											"end": 8877,
											"name": "tag",
											"source": 6,
											"value": "183"
										},
										{
											"begin": 8845,
											"end": 8877,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 8821,
											"end": 8877,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8821,
											"end": 8877,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 8887,
											"end": 8908,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 8911,
											"end": 8926,
											"name": "PUSH",
											"source": 6,
											"value": "5"
										},
										{
											"begin": 8911,
											"end": 8926,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 8911,
											"end": 8926,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8926,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8926,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8926,
											"name": "PUSH",
											"source": 6,
											"value": "100"
										},
										{
											"begin": 8911,
											"end": 8926,
											"name": "EXP",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8926,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8926,
											"name": "DIV",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8926,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 8911,
											"end": 8926,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8942,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 8911,
											"end": 8942,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8942,
											"name": "PUSH",
											"source": 6,
											"value": "117D37E6"
										},
										{
											"begin": 8943,
											"end": 8949,
											"name": "DUP6",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFF"
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "PUSH",
											"source": 6,
											"value": "E0"
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "SHL",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "PUSH",
											"source": 6,
											"value": "4"
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "185"
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "37"
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "tag",
											"source": 6,
											"value": "185"
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "DUP4",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "DUP7",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "EXTCODESIZE",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "ISZERO",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "ISZERO",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "186"
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "REVERT",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "tag",
											"source": 6,
											"value": "186"
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "GAS",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "STATICCALL",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "ISZERO",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "ISZERO",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "188"
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "RETURNDATASIZE",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "RETURNDATACOPY",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "RETURNDATASIZE",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "REVERT",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "tag",
											"source": 6,
											"value": "188"
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "RETURNDATASIZE",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "PUSH",
											"source": 6,
											"value": "1F"
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "NOT",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "PUSH",
											"source": 6,
											"value": "1F"
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "189"
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "119"
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "tag",
											"source": 6,
											"value": "189"
										},
										{
											"begin": 8911,
											"end": 8950,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 8887,
											"end": 8950,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 8887,
											"end": 8950,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 9028,
											"end": 9049,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 9068,
											"end": 9069,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 9052,
											"end": 9065,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 9052,
											"end": 9069,
											"name": "GT",
											"source": 6
										},
										{
											"begin": 9052,
											"end": 9114,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "190"
										},
										{
											"begin": 9052,
											"end": 9114,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 9113,
											"end": 9114,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 9052,
											"end": 9114,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "191"
										},
										{
											"begin": 9052,
											"end": 9114,
											"name": "JUMP",
											"source": 6
										},
										{
											"begin": 9052,
											"end": 9114,
											"name": "tag",
											"source": 6,
											"value": "190"
										},
										{
											"begin": 9052,
											"end": 9114,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 9097,
											"end": 9110,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 9089,
											"end": 9093,
											"name": "PUSH",
											"source": 6,
											"value": "DE0B6B3A7640000"
										},
										{
											"begin": 9073,
											"end": 9086,
											"name": "DUP5",
											"source": 6
										},
										{
											"begin": 9073,
											"end": 9093,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "192"
										},
										{
											"begin": 9073,
											"end": 9093,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 9073,
											"end": 9093,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 9073,
											"end": 9093,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "182"
										},
										{
											"begin": 9073,
											"end": 9093,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 9073,
											"end": 9093,
											"name": "tag",
											"source": 6,
											"value": "192"
										},
										{
											"begin": 9073,
											"end": 9093,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 9072,
											"end": 9110,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "193"
										},
										{
											"begin": 9072,
											"end": 9110,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 9072,
											"end": 9110,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 9072,
											"end": 9110,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "184"
										},
										{
											"begin": 9072,
											"end": 9110,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 9072,
											"end": 9110,
											"name": "tag",
											"source": 6,
											"value": "193"
										},
										{
											"begin": 9072,
											"end": 9110,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 9052,
											"end": 9114,
											"name": "tag",
											"source": 6,
											"value": "191"
										},
										{
											"begin": 9052,
											"end": 9114,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 9028,
											"end": 9114,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 9028,
											"end": 9114,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 9232,
											"end": 9245,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9154,
											"name": "PUSH",
											"source": 6,
											"value": "3"
										},
										{
											"begin": 9125,
											"end": 9162,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 9155,
											"end": 9161,
											"name": "DUP8",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9162,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 9125,
											"end": 9162,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9162,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 9125,
											"end": 9162,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9162,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9162,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9162,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 9125,
											"end": 9162,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9162,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9162,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9162,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9162,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 9125,
											"end": 9162,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9162,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 9125,
											"end": 9162,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9182,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 9163,
											"end": 9175,
											"name": "DUP7",
											"source": 6
										},
										{
											"begin": 9163,
											"end": 9181,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 9163,
											"end": 9181,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 9163,
											"end": 9181,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9182,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 9125,
											"end": 9182,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9182,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 9125,
											"end": 9182,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9182,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9182,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9182,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 9125,
											"end": 9182,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9182,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9182,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9182,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9182,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 9125,
											"end": 9182,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9182,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 9125,
											"end": 9182,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9228,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 9196,
											"end": 9208,
											"name": "DUP7",
											"source": 6
										},
										{
											"begin": 9196,
											"end": 9218,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 9196,
											"end": 9218,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 9196,
											"end": 9218,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9228,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFF"
										},
										{
											"begin": 9125,
											"end": 9228,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9228,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFF"
										},
										{
											"begin": 9125,
											"end": 9228,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9228,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9228,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9228,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 9125,
											"end": 9228,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9228,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9228,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9228,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9228,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 9125,
											"end": 9228,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9228,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 9125,
											"end": 9228,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9228,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 9125,
											"end": 9245,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9245,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9245,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9245,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "194"
										},
										{
											"begin": 9125,
											"end": 9245,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9245,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9245,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "195"
										},
										{
											"begin": 9125,
											"end": 9245,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 9125,
											"end": 9245,
											"name": "tag",
											"source": 6,
											"value": "194"
										},
										{
											"begin": 9125,
											"end": 9245,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9245,
											"name": "SWAP3",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9245,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9245,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9245,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9245,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9245,
											"name": "SSTORE",
											"source": 6
										},
										{
											"begin": 9125,
											"end": 9245,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 9282,
											"end": 9288,
											"name": "DUP7",
											"source": 6
										},
										{
											"begin": 9261,
											"end": 9333,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 9261,
											"end": 9333,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 9274,
											"end": 9280,
											"name": "DUP6",
											"source": 6
										},
										{
											"begin": 9261,
											"end": 9333,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 9261,
											"end": 9333,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 9261,
											"end": 9333,
											"name": "PUSH",
											"source": 6,
											"value": "1B0006DAFF5BB99D1383FFC4326984A27347192B77DDB40FE18EC9720D0929A8"
										},
										{
											"begin": 9290,
											"end": 9302,
											"name": "DUP9",
											"source": 6
										},
										{
											"begin": 9304,
											"end": 9317,
											"name": "DUP7",
											"source": 6
										},
										{
											"begin": 9319,
											"end": 9332,
											"name": "DUP6",
											"source": 6
										},
										{
											"begin": 9261,
											"end": 9333,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 9261,
											"end": 9333,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 9261,
											"end": 9333,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "196"
										},
										{
											"begin": 9261,
											"end": 9333,
											"name": "SWAP4",
											"source": 6
										},
										{
											"begin": 9261,
											"end": 9333,
											"name": "SWAP3",
											"source": 6
										},
										{
											"begin": 9261,
											"end": 9333,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 9261,
											"end": 9333,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 9261,
											"end": 9333,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "197"
										},
										{
											"begin": 9261,
											"end": 9333,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 9261,
											"end": 9333,
											"name": "tag",
											"source": 6,
											"value": "196"
										},
										{
											"begin": 9261,
											"end": 9333,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 9261,
											"end": 9333,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 9261,
											"end": 9333,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 9261,
											"end": 9333,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 9261,
											"end": 9333,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 9261,
											"end": 9333,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 9261,
											"end": 9333,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 9261,
											"end": 9333,
											"name": "LOG3",
											"source": 6
										},
										{
											"begin": 8169,
											"end": 9340,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 8169,
											"end": 9340,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 8169,
											"end": 9340,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 8169,
											"end": 9340,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 8169,
											"end": 9340,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 8011,
											"end": 9340,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 8011,
											"end": 9340,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 8011,
											"end": 9340,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 8011,
											"end": 9340,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 8011,
											"end": 9340,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 8011,
											"end": 9340,
											"name": "JUMP",
											"source": 6,
											"value": "[out]"
										},
										{
											"begin": 18281,
											"end": 19211,
											"name": "tag",
											"source": 6,
											"value": "111"
										},
										{
											"begin": 18281,
											"end": 19211,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 18403,
											"end": 18435,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 18438,
											"end": 18455,
											"name": "PUSH",
											"source": 6,
											"value": "4"
										},
										{
											"begin": 18438,
											"end": 18463,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 18456,
											"end": 18462,
											"name": "DUP6",
											"source": 6
										},
										{
											"begin": 18438,
											"end": 18463,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 18438,
											"end": 18463,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 18438,
											"end": 18463,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 18438,
											"end": 18463,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 18438,
											"end": 18463,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 18438,
											"end": 18463,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 18438,
											"end": 18463,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 18438,
											"end": 18463,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 18438,
											"end": 18463,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 18438,
											"end": 18463,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 18438,
											"end": 18463,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 18438,
											"end": 18463,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 18438,
											"end": 18463,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 18438,
											"end": 18463,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 18438,
											"end": 18463,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 18438,
											"end": 18470,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 18438,
											"end": 18470,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 18438,
											"end": 18470,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 18438,
											"end": 18470,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 18403,
											"end": 18470,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 18403,
											"end": 18470,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 18481,
											"end": 18512,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "199"
										},
										{
											"begin": 18481,
											"end": 18512,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "124"
										},
										{
											"begin": 18481,
											"end": 18512,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 18481,
											"end": 18512,
											"name": "tag",
											"source": 6,
											"value": "199"
										},
										{
											"begin": 18481,
											"end": 18512,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 18554,
											"end": 18555,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 18527,
											"end": 18551,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 18527,
											"end": 18555,
											"name": "GT",
											"source": 6
										},
										{
											"begin": 18523,
											"end": 19205,
											"name": "ISZERO",
											"source": 6
										},
										{
											"begin": 18523,
											"end": 19205,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "200"
										},
										{
											"begin": 18523,
											"end": 19205,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 18571,
											"end": 18580,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 18583,
											"end": 18607,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 18571,
											"end": 18607,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 18571,
											"end": 18607,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 18622,
											"end": 18998,
											"name": "tag",
											"source": 6,
											"value": "201"
										},
										{
											"begin": 18622,
											"end": 18998,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 18633,
											"end": 18634,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 18629,
											"end": 18630,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 18629,
											"end": 18634,
											"name": "GT",
											"source": 6
										},
										{
											"begin": 18622,
											"end": 18998,
											"name": "ISZERO",
											"source": 6
										},
										{
											"begin": 18622,
											"end": 18998,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "202"
										},
										{
											"begin": 18622,
											"end": 18998,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 18662,
											"end": 18663,
											"name": "PUSH",
											"source": 6,
											"value": "1"
										},
										{
											"begin": 18658,
											"end": 18659,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 18658,
											"end": 18663,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "203"
										},
										{
											"begin": 18658,
											"end": 18663,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 18658,
											"end": 18663,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 18658,
											"end": 18663,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "204"
										},
										{
											"begin": 18658,
											"end": 18663,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 18658,
											"end": 18663,
											"name": "tag",
											"source": 6,
											"value": "203"
										},
										{
											"begin": 18658,
											"end": 18663,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 18654,
											"end": 18663,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 18654,
											"end": 18663,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 18696,
											"end": 18713,
											"name": "PUSH",
											"source": 6,
											"value": "4"
										},
										{
											"begin": 18696,
											"end": 18721,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 18714,
											"end": 18720,
											"name": "DUP8",
											"source": 6
										},
										{
											"begin": 18696,
											"end": 18721,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 18696,
											"end": 18721,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 18696,
											"end": 18721,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 18696,
											"end": 18721,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 18696,
											"end": 18721,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 18696,
											"end": 18721,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 18696,
											"end": 18721,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 18696,
											"end": 18721,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 18696,
											"end": 18721,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 18696,
											"end": 18721,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 18696,
											"end": 18721,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 18696,
											"end": 18721,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 18696,
											"end": 18721,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 18696,
											"end": 18721,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 18696,
											"end": 18721,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 18722,
											"end": 18723,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 18696,
											"end": 18724,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 18696,
											"end": 18724,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 18696,
											"end": 18724,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 18696,
											"end": 18724,
											"name": "LT",
											"source": 6
										},
										{
											"begin": 18696,
											"end": 18724,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "205"
										},
										{
											"begin": 18696,
											"end": 18724,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 18696,
											"end": 18724,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "206"
										},
										{
											"begin": 18696,
											"end": 18724,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "145"
										},
										{
											"begin": 18696,
											"end": 18724,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 18696,
											"end": 18724,
											"name": "tag",
											"source": 6,
											"value": "206"
										},
										{
											"begin": 18696,
											"end": 18724,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 18696,
											"end": 18724,
											"name": "tag",
											"source": 6,
											"value": "205"
										},
										{
											"begin": 18696,
											"end": 18724,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 18696,
											"end": 18724,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 18696,
											"end": 18724,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 18696,
											"end": 18724,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 18696,
											"end": 18724,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 18696,
											"end": 18724,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 18696,
											"end": 18724,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 18696,
											"end": 18724,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "PUSH",
											"source": 6,
											"value": "100"
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "EXP",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "DIV",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "PUSH",
											"source": 6,
											"value": "14"
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "PUSH",
											"source": 6,
											"value": "100"
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "EXP",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "DIV",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFF"
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFF"
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFF"
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 18681,
											"end": 18724,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 18742,
											"end": 18799,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "208"
										},
										{
											"begin": 18756,
											"end": 18762,
											"name": "DUP7",
											"source": 6
										},
										{
											"begin": 18764,
											"end": 18776,
											"name": "DUP4",
											"source": 6
										},
										{
											"begin": 18778,
											"end": 18783,
											"name": "DUP8",
											"source": 6
										},
										{
											"begin": 18785,
											"end": 18798,
											"name": "DUP8",
											"source": 6
										},
										{
											"begin": 18742,
											"end": 18755,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "209"
										},
										{
											"begin": 18742,
											"end": 18799,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 18742,
											"end": 18799,
											"name": "tag",
											"source": 6,
											"value": "208"
										},
										{
											"begin": 18742,
											"end": 18799,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 18742,
											"end": 18799,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 18817,
											"end": 18983,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "210"
										},
										{
											"begin": 18883,
											"end": 18888,
											"name": "DUP6",
											"source": 6
										},
										{
											"begin": 18910,
											"end": 18916,
											"name": "DUP8",
											"source": 6
										},
										{
											"begin": 18946,
											"end": 18958,
											"name": "DUP5",
											"source": 6
										},
										{
											"begin": 18946,
											"end": 18964,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 18946,
											"end": 18964,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 18946,
											"end": 18964,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 18817,
											"end": 18861,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "211"
										},
										{
											"begin": 18817,
											"end": 18983,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 18817,
											"end": 18983,
											"name": "tag",
											"source": 6,
											"value": "210"
										},
										{
											"begin": 18817,
											"end": 18983,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 18622,
											"end": 18998,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "201"
										},
										{
											"begin": 18622,
											"end": 18998,
											"name": "JUMP",
											"source": 6
										},
										{
											"begin": 18622,
											"end": 18998,
											"name": "tag",
											"source": 6,
											"value": "202"
										},
										{
											"begin": 18622,
											"end": 18998,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 18557,
											"end": 19008,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 18523,
											"end": 19205,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "212"
										},
										{
											"begin": 18523,
											"end": 19205,
											"name": "JUMP",
											"source": 6
										},
										{
											"begin": 18523,
											"end": 19205,
											"name": "tag",
											"source": 6,
											"value": "200"
										},
										{
											"begin": 18523,
											"end": 19205,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 19123,
											"end": 19194,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "213"
										},
										{
											"begin": 19168,
											"end": 19173,
											"name": "DUP5",
											"source": 6
										},
										{
											"begin": 19175,
											"end": 19181,
											"name": "DUP7",
											"source": 6
										},
										{
											"begin": 19191,
											"end": 19192,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 19123,
											"end": 19167,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "211"
										},
										{
											"begin": 19123,
											"end": 19194,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 19123,
											"end": 19194,
											"name": "tag",
											"source": 6,
											"value": "213"
										},
										{
											"begin": 19123,
											"end": 19194,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 18523,
											"end": 19205,
											"name": "tag",
											"source": 6,
											"value": "212"
										},
										{
											"begin": 18523,
											"end": 19205,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 18393,
											"end": 19211,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 18393,
											"end": 19211,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 18281,
											"end": 19211,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 18281,
											"end": 19211,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 18281,
											"end": 19211,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 18281,
											"end": 19211,
											"name": "JUMP",
											"source": 6,
											"value": "[out]"
										},
										{
											"begin": 11716,
											"end": 12154,
											"name": "tag",
											"source": 6,
											"value": "127"
										},
										{
											"begin": 11716,
											"end": 12154,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 11784,
											"end": 11802,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "214"
										},
										{
											"begin": 11784,
											"end": 11802,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "124"
										},
										{
											"begin": 11784,
											"end": 11802,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 11784,
											"end": 11802,
											"name": "tag",
											"source": 6,
											"value": "214"
										},
										{
											"begin": 11784,
											"end": 11802,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11853,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 11856,
											"end": 11873,
											"name": "PUSH",
											"source": 6,
											"value": "4"
										},
										{
											"begin": 11856,
											"end": 11881,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 11874,
											"end": 11880,
											"name": "DUP5",
											"source": 6
										},
										{
											"begin": 11856,
											"end": 11881,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 11856,
											"end": 11881,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 11856,
											"end": 11881,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 11856,
											"end": 11881,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 11856,
											"end": 11881,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 11856,
											"end": 11881,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 11856,
											"end": 11881,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 11856,
											"end": 11881,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 11856,
											"end": 11881,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 11856,
											"end": 11881,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 11856,
											"end": 11881,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 11856,
											"end": 11881,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 11856,
											"end": 11881,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 11856,
											"end": 11881,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 11856,
											"end": 11881,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "MUL",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "SWAP3",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "tag",
											"source": 6,
											"value": "216"
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "LT",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "ISZERO",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "217"
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "DUP4",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "PUSH",
											"source": 6,
											"value": "100"
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "EXP",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "DIV",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "PUSH",
											"source": 6,
											"value": "14"
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "PUSH",
											"source": 6,
											"value": "100"
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "EXP",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "DIV",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFF"
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFF"
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFF"
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "PUSH",
											"source": 6,
											"value": "1"
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "216"
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "JUMP",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "tag",
											"source": 6,
											"value": "217"
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 11814,
											"end": 11881,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 11891,
											"end": 11923,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 11926,
											"end": 11944,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 11926,
											"end": 11951,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 11891,
											"end": 11951,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 11891,
											"end": 11951,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 11993,
											"end": 11994,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 11966,
											"end": 11990,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 11966,
											"end": 11994,
											"name": "GT",
											"source": 6
										},
										{
											"begin": 11962,
											"end": 12148,
											"name": "ISZERO",
											"source": 6
										},
										{
											"begin": 11962,
											"end": 12148,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "219"
										},
										{
											"begin": 11962,
											"end": 12148,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 12017,
											"end": 12035,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 12063,
											"end": 12064,
											"name": "PUSH",
											"source": 6,
											"value": "1"
										},
										{
											"begin": 12036,
											"end": 12060,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 12036,
											"end": 12064,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "220"
										},
										{
											"begin": 12036,
											"end": 12064,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 12036,
											"end": 12064,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 12036,
											"end": 12064,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "204"
										},
										{
											"begin": 12036,
											"end": 12064,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 12036,
											"end": 12064,
											"name": "tag",
											"source": 6,
											"value": "220"
										},
										{
											"begin": 12036,
											"end": 12064,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 12017,
											"end": 12065,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 12017,
											"end": 12065,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 12017,
											"end": 12065,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 12017,
											"end": 12065,
											"name": "LT",
											"source": 6
										},
										{
											"begin": 12017,
											"end": 12065,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "221"
										},
										{
											"begin": 12017,
											"end": 12065,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 12017,
											"end": 12065,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "222"
										},
										{
											"begin": 12017,
											"end": 12065,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "145"
										},
										{
											"begin": 12017,
											"end": 12065,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 12017,
											"end": 12065,
											"name": "tag",
											"source": 6,
											"value": "222"
										},
										{
											"begin": 12017,
											"end": 12065,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 12017,
											"end": 12065,
											"name": "tag",
											"source": 6,
											"value": "221"
										},
										{
											"begin": 12017,
											"end": 12065,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 12017,
											"end": 12065,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 12017,
											"end": 12065,
											"name": "MUL",
											"source": 6
										},
										{
											"begin": 12017,
											"end": 12065,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 12017,
											"end": 12065,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 12017,
											"end": 12065,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 12017,
											"end": 12065,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 12010,
											"end": 12065,
											"name": "SWAP3",
											"source": 6
										},
										{
											"begin": 12010,
											"end": 12065,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 12010,
											"end": 12065,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 12010,
											"end": 12065,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 12010,
											"end": 12065,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "215"
										},
										{
											"begin": 12010,
											"end": 12065,
											"name": "JUMP",
											"source": 6
										},
										{
											"begin": 11962,
											"end": 12148,
											"name": "tag",
											"source": 6,
											"value": "219"
										},
										{
											"begin": 11962,
											"end": 12148,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 12103,
											"end": 12137,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 12103,
											"end": 12137,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 12103,
											"end": 12137,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 12103,
											"end": 12137,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 12103,
											"end": 12137,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 12103,
											"end": 12137,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 12103,
											"end": 12137,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 12103,
											"end": 12137,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 12130,
											"end": 12131,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 12103,
											"end": 12137,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 12103,
											"end": 12137,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 12103,
											"end": 12137,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 12103,
											"end": 12137,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 12103,
											"end": 12137,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 12103,
											"end": 12137,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 12135,
											"end": 12136,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 12103,
											"end": 12137,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFF"
										},
										{
											"begin": 12103,
											"end": 12137,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 12103,
											"end": 12137,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 12103,
											"end": 12137,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 12103,
											"end": 12137,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 12096,
											"end": 12137,
											"name": "SWAP3",
											"source": 6
										},
										{
											"begin": 12096,
											"end": 12137,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 12096,
											"end": 12137,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 12096,
											"end": 12137,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 11716,
											"end": 12154,
											"name": "tag",
											"source": 6,
											"value": "215"
										},
										{
											"begin": 11716,
											"end": 12154,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 11716,
											"end": 12154,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 11716,
											"end": 12154,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 11716,
											"end": 12154,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 11716,
											"end": 12154,
											"name": "JUMP",
											"source": 6,
											"value": "[out]"
										},
										{
											"begin": 6570,
											"end": 6768,
											"name": "tag",
											"source": 3,
											"value": "148"
										},
										{
											"begin": 6570,
											"end": 6768,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 6653,
											"end": 6665,
											"name": "PUSH",
											"source": 3,
											"value": "60"
										},
										{
											"begin": 6684,
											"end": 6761,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "225"
										},
										{
											"begin": 6705,
											"end": 6711,
											"name": "DUP4",
											"source": 3
										},
										{
											"begin": 6713,
											"end": 6717,
											"name": "DUP4",
											"source": 3
										},
										{
											"begin": 6684,
											"end": 6761,
											"name": "PUSH",
											"source": 3,
											"value": "40"
										},
										{
											"begin": 6684,
											"end": 6761,
											"name": "MLOAD",
											"source": 3
										},
										{
											"begin": 6684,
											"end": 6761,
											"name": "DUP1",
											"source": 3
										},
										{
											"begin": 6684,
											"end": 6761,
											"name": "PUSH",
											"source": 3,
											"value": "60"
										},
										{
											"begin": 6684,
											"end": 6761,
											"name": "ADD",
											"source": 3
										},
										{
											"begin": 6684,
											"end": 6761,
											"name": "PUSH",
											"source": 3,
											"value": "40"
										},
										{
											"begin": 6684,
											"end": 6761,
											"name": "MSTORE",
											"source": 3
										},
										{
											"begin": 6684,
											"end": 6761,
											"name": "DUP1",
											"source": 3
										},
										{
											"begin": 6684,
											"end": 6761,
											"name": "PUSH",
											"source": 3,
											"value": "27"
										},
										{
											"begin": 6684,
											"end": 6761,
											"name": "DUP2",
											"source": 3
										},
										{
											"begin": 6684,
											"end": 6761,
											"name": "MSTORE",
											"source": 3
										},
										{
											"begin": 6684,
											"end": 6761,
											"name": "PUSH",
											"source": 3,
											"value": "20"
										},
										{
											"begin": 6684,
											"end": 6761,
											"name": "ADD",
											"source": 3
										},
										{
											"begin": 6684,
											"end": 6761,
											"name": "PUSH data",
											"source": 3,
											"value": "9FDCD12E4B726339B32A442B0A448365D5D85C96B2D2CFF917B4F66C63110398"
										},
										{
											"begin": 6684,
											"end": 6761,
											"name": "PUSH",
											"source": 3,
											"value": "27"
										},
										{
											"begin": 6684,
											"end": 6761,
											"name": "SWAP2",
											"source": 3
										},
										{
											"begin": 6684,
											"end": 6761,
											"name": "CODECOPY",
											"source": 3
										},
										{
											"begin": 6684,
											"end": 6704,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "226"
										},
										{
											"begin": 6684,
											"end": 6761,
											"name": "JUMP",
											"source": 3,
											"value": "[in]"
										},
										{
											"begin": 6684,
											"end": 6761,
											"name": "tag",
											"source": 3,
											"value": "225"
										},
										{
											"begin": 6684,
											"end": 6761,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 6677,
											"end": 6761,
											"name": "SWAP1",
											"source": 3
										},
										{
											"begin": 6677,
											"end": 6761,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 6570,
											"end": 6768,
											"name": "SWAP3",
											"source": 3
										},
										{
											"begin": 6570,
											"end": 6768,
											"name": "SWAP2",
											"source": 3
										},
										{
											"begin": 6570,
											"end": 6768,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 6570,
											"end": 6768,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 6570,
											"end": 6768,
											"name": "JUMP",
											"source": 3,
											"value": "[out]"
										},
										{
											"begin": 974,
											"end": 1215,
											"name": "tag",
											"source": 2,
											"value": "155"
										},
										{
											"begin": 974,
											"end": 1215,
											"name": "JUMPDEST",
											"source": 2
										},
										{
											"begin": 1112,
											"end": 1208,
											"name": "PUSH [tag]",
											"source": 2,
											"value": "228"
										},
										{
											"begin": 1132,
											"end": 1137,
											"name": "DUP5",
											"source": 2
										},
										{
											"begin": 1162,
											"end": 1189,
											"name": "PUSH",
											"source": 2,
											"value": "23B872DD"
										},
										{
											"begin": 1162,
											"end": 1189,
											"name": "PUSH",
											"source": 2,
											"value": "E0"
										},
										{
											"begin": 1162,
											"end": 1189,
											"name": "SHL",
											"source": 2
										},
										{
											"begin": 1191,
											"end": 1195,
											"name": "DUP6",
											"source": 2
										},
										{
											"begin": 1197,
											"end": 1199,
											"name": "DUP6",
											"source": 2
										},
										{
											"begin": 1201,
											"end": 1206,
											"name": "DUP6",
											"source": 2
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "PUSH",
											"source": 2,
											"value": "40"
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "MLOAD",
											"source": 2
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "PUSH",
											"source": 2,
											"value": "24"
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "ADD",
											"source": 2
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "PUSH [tag]",
											"source": 2,
											"value": "229"
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "SWAP4",
											"source": 2
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "SWAP3",
											"source": 2
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "SWAP2",
											"source": 2
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "SWAP1",
											"source": 2
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "PUSH [tag]",
											"source": 2,
											"value": "230"
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "JUMP",
											"source": 2,
											"value": "[in]"
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "tag",
											"source": 2,
											"value": "229"
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "JUMPDEST",
											"source": 2
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "PUSH",
											"source": 2,
											"value": "40"
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "MLOAD",
											"source": 2
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "PUSH",
											"source": 2,
											"value": "20"
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "DUP2",
											"source": 2
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "DUP4",
											"source": 2
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "SUB",
											"source": 2
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "SUB",
											"source": 2
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "DUP2",
											"source": 2
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "MSTORE",
											"source": 2
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "SWAP1",
											"source": 2
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "PUSH",
											"source": 2,
											"value": "40"
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "MSTORE",
											"source": 2
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "SWAP1",
											"source": 2
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "PUSH",
											"source": 2,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "NOT",
											"source": 2
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "AND",
											"source": 2
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "PUSH",
											"source": 2,
											"value": "20"
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "DUP3",
											"source": 2
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "ADD",
											"source": 2
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "DUP1",
											"source": 2
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "MLOAD",
											"source": 2
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "PUSH",
											"source": 2,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "DUP4",
											"source": 2
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "DUP2",
											"source": 2
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "DUP4",
											"source": 2
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "AND",
											"source": 2
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "OR",
											"source": 2
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "DUP4",
											"source": 2
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "MSTORE",
											"source": 2
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "POP",
											"source": 2
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "POP",
											"source": 2
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "POP",
											"source": 2
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "POP",
											"source": 2
										},
										{
											"begin": 1112,
											"end": 1131,
											"name": "PUSH [tag]",
											"source": 2,
											"value": "231"
										},
										{
											"begin": 1112,
											"end": 1208,
											"name": "JUMP",
											"source": 2,
											"value": "[in]"
										},
										{
											"begin": 1112,
											"end": 1208,
											"name": "tag",
											"source": 2,
											"value": "228"
										},
										{
											"begin": 1112,
											"end": 1208,
											"name": "JUMPDEST",
											"source": 2
										},
										{
											"begin": 974,
											"end": 1215,
											"name": "POP",
											"source": 2
										},
										{
											"begin": 974,
											"end": 1215,
											"name": "POP",
											"source": 2
										},
										{
											"begin": 974,
											"end": 1215,
											"name": "POP",
											"source": 2
										},
										{
											"begin": 974,
											"end": 1215,
											"name": "POP",
											"source": 2
										},
										{
											"begin": 974,
											"end": 1215,
											"name": "JUMP",
											"source": 2,
											"value": "[out]"
										},
										{
											"begin": 13961,
											"end": 16269,
											"name": "tag",
											"source": 6,
											"value": "164"
										},
										{
											"begin": 13961,
											"end": 16269,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 14130,
											"end": 14146,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 14148,
											"end": 14169,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 14181,
											"end": 14210,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 14213,
											"end": 14246,
											"name": "PUSH",
											"source": 6,
											"value": "1"
										},
										{
											"begin": 14213,
											"end": 14253,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 14247,
											"end": 14252,
											"name": "DUP7",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14253,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 14213,
											"end": 14253,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14253,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 14213,
											"end": 14253,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14253,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14253,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14253,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 14213,
											"end": 14253,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14253,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14253,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14253,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14253,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 14213,
											"end": 14253,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14253,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 14213,
											"end": 14253,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14261,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 14254,
											"end": 14260,
											"name": "DUP9",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14261,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 14213,
											"end": 14261,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14261,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 14213,
											"end": 14261,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14261,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14261,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14261,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 14213,
											"end": 14261,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14261,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14261,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14261,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14261,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 14213,
											"end": 14261,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14261,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 14213,
											"end": 14261,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14303,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 14275,
											"end": 14287,
											"name": "DUP8",
											"source": 6
										},
										{
											"begin": 14275,
											"end": 14293,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 14275,
											"end": 14293,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 14275,
											"end": 14293,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14303,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 14213,
											"end": 14303,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14303,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 14213,
											"end": 14303,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14303,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14303,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14303,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 14213,
											"end": 14303,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14303,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14303,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14303,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14303,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 14213,
											"end": 14303,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14303,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 14213,
											"end": 14303,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14327,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 14304,
											"end": 14316,
											"name": "DUP8",
											"source": 6
										},
										{
											"begin": 14304,
											"end": 14326,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 14304,
											"end": 14326,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 14304,
											"end": 14326,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14327,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFF"
										},
										{
											"begin": 14213,
											"end": 14327,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14327,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFF"
										},
										{
											"begin": 14213,
											"end": 14327,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14327,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14327,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14327,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 14213,
											"end": 14327,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14327,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14327,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14327,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14327,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 14213,
											"end": 14327,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14327,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 14213,
											"end": 14327,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 14213,
											"end": 14327,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 14181,
											"end": 14327,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 14181,
											"end": 14327,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 14338,
											"end": 14366,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 14369,
											"end": 14398,
											"name": "PUSH",
											"source": 6,
											"value": "3"
										},
										{
											"begin": 14369,
											"end": 14406,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 14399,
											"end": 14405,
											"name": "DUP10",
											"source": 6
										},
										{
											"begin": 14369,
											"end": 14406,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 14369,
											"end": 14406,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 14369,
											"end": 14406,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 14369,
											"end": 14406,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 14369,
											"end": 14406,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 14369,
											"end": 14406,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 14369,
											"end": 14406,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 14369,
											"end": 14406,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 14369,
											"end": 14406,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 14369,
											"end": 14406,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 14369,
											"end": 14406,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 14369,
											"end": 14406,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 14369,
											"end": 14406,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 14369,
											"end": 14406,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 14369,
											"end": 14406,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 14369,
											"end": 14426,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 14407,
											"end": 14419,
											"name": "DUP9",
											"source": 6
										},
										{
											"begin": 14407,
											"end": 14425,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 14407,
											"end": 14425,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 14407,
											"end": 14425,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 14369,
											"end": 14426,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 14369,
											"end": 14426,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 14369,
											"end": 14426,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 14369,
											"end": 14426,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 14369,
											"end": 14426,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 14369,
											"end": 14426,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 14369,
											"end": 14426,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 14369,
											"end": 14426,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 14369,
											"end": 14426,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 14369,
											"end": 14426,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 14369,
											"end": 14426,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 14369,
											"end": 14426,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 14369,
											"end": 14426,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 14369,
											"end": 14426,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 14369,
											"end": 14426,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 14369,
											"end": 14472,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 14440,
											"end": 14452,
											"name": "DUP9",
											"source": 6
										},
										{
											"begin": 14440,
											"end": 14462,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 14440,
											"end": 14462,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 14440,
											"end": 14462,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 14369,
											"end": 14472,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFF"
										},
										{
											"begin": 14369,
											"end": 14472,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 14369,
											"end": 14472,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFF"
										},
										{
											"begin": 14369,
											"end": 14472,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 14369,
											"end": 14472,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 14369,
											"end": 14472,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 14369,
											"end": 14472,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 14369,
											"end": 14472,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 14369,
											"end": 14472,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 14369,
											"end": 14472,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 14369,
											"end": 14472,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 14369,
											"end": 14472,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 14369,
											"end": 14472,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 14369,
											"end": 14472,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 14369,
											"end": 14472,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 14369,
											"end": 14472,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 14338,
											"end": 14472,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 14338,
											"end": 14472,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 14483,
											"end": 14516,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 14519,
											"end": 14653,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "233"
										},
										{
											"begin": 14577,
											"end": 14582,
											"name": "DUP8",
											"source": 6
										},
										{
											"begin": 14596,
											"end": 14602,
											"name": "DUP11",
											"source": 6
										},
										{
											"begin": 14624,
											"end": 14636,
											"name": "DUP11",
											"source": 6
										},
										{
											"begin": 14624,
											"end": 14642,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 14624,
											"end": 14642,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 14624,
											"end": 14642,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 14519,
											"end": 14563,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "234"
										},
										{
											"begin": 14519,
											"end": 14653,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 14519,
											"end": 14653,
											"name": "tag",
											"source": 6,
											"value": "233"
										},
										{
											"begin": 14519,
											"end": 14653,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 14483,
											"end": 14653,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 14483,
											"end": 14653,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 14697,
											"end": 14698,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 14668,
											"end": 14693,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 14668,
											"end": 14698,
											"name": "EQ",
											"source": 6
										},
										{
											"begin": 14664,
											"end": 15725,
											"name": "ISZERO",
											"source": 6
										},
										{
											"begin": 14664,
											"end": 15725,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "235"
										},
										{
											"begin": 14664,
											"end": 15725,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14753,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 14756,
											"end": 14773,
											"name": "PUSH",
											"source": 6,
											"value": "4"
										},
										{
											"begin": 14756,
											"end": 14781,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 14774,
											"end": 14780,
											"name": "DUP12",
											"source": 6
										},
										{
											"begin": 14756,
											"end": 14781,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 14756,
											"end": 14781,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 14756,
											"end": 14781,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 14756,
											"end": 14781,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 14756,
											"end": 14781,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 14756,
											"end": 14781,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 14756,
											"end": 14781,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 14756,
											"end": 14781,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 14756,
											"end": 14781,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 14756,
											"end": 14781,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 14756,
											"end": 14781,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 14756,
											"end": 14781,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 14756,
											"end": 14781,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 14756,
											"end": 14781,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 14756,
											"end": 14781,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "MUL",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "SWAP3",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "tag",
											"source": 6,
											"value": "236"
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "LT",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "ISZERO",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "237"
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "DUP4",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "PUSH",
											"source": 6,
											"value": "100"
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "EXP",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "DIV",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "PUSH",
											"source": 6,
											"value": "14"
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "PUSH",
											"source": 6,
											"value": "100"
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "EXP",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "DIV",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFF"
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFF"
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFF"
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "PUSH",
											"source": 6,
											"value": "1"
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "236"
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "JUMP",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "tag",
											"source": 6,
											"value": "237"
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 14714,
											"end": 14781,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 14795,
											"end": 14827,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 14830,
											"end": 14848,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 14830,
											"end": 14855,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 14795,
											"end": 14855,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 14795,
											"end": 14855,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 14901,
											"end": 14902,
											"name": "PUSH",
											"source": 6,
											"value": "1"
										},
										{
											"begin": 14874,
											"end": 14898,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 14874,
											"end": 14902,
											"name": "GT",
											"source": 6
										},
										{
											"begin": 14870,
											"end": 15365,
											"name": "ISZERO",
											"source": 6
										},
										{
											"begin": 14870,
											"end": 15365,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "239"
										},
										{
											"begin": 14870,
											"end": 15365,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 14922,
											"end": 14961,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 14964,
											"end": 14982,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 15031,
											"end": 15032,
											"name": "PUSH",
											"source": 6,
											"value": "1"
										},
										{
											"begin": 15004,
											"end": 15028,
											"name": "DUP4",
											"source": 6
										},
										{
											"begin": 15004,
											"end": 15032,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "240"
										},
										{
											"begin": 15004,
											"end": 15032,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 15004,
											"end": 15032,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 15004,
											"end": 15032,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "204"
										},
										{
											"begin": 15004,
											"end": 15032,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 15004,
											"end": 15032,
											"name": "tag",
											"source": 6,
											"value": "240"
										},
										{
											"begin": 15004,
											"end": 15032,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 14964,
											"end": 15050,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 14964,
											"end": 15050,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 14964,
											"end": 15050,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 14964,
											"end": 15050,
											"name": "LT",
											"source": 6
										},
										{
											"begin": 14964,
											"end": 15050,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "241"
										},
										{
											"begin": 14964,
											"end": 15050,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 14964,
											"end": 15050,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "242"
										},
										{
											"begin": 14964,
											"end": 15050,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "145"
										},
										{
											"begin": 14964,
											"end": 15050,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 14964,
											"end": 15050,
											"name": "tag",
											"source": 6,
											"value": "242"
										},
										{
											"begin": 14964,
											"end": 15050,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 14964,
											"end": 15050,
											"name": "tag",
											"source": 6,
											"value": "241"
										},
										{
											"begin": 14964,
											"end": 15050,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 14964,
											"end": 15050,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 14964,
											"end": 15050,
											"name": "MUL",
											"source": 6
										},
										{
											"begin": 14964,
											"end": 15050,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 14964,
											"end": 15050,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 14964,
											"end": 15050,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 14964,
											"end": 15050,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 14922,
											"end": 15050,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 14922,
											"end": 15050,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 15176,
											"end": 15350,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "243"
										},
										{
											"begin": 15242,
											"end": 15247,
											"name": "DUP11",
											"source": 6
										},
										{
											"begin": 15269,
											"end": 15275,
											"name": "DUP14",
											"source": 6
										},
										{
											"begin": 15305,
											"end": 15325,
											"name": "DUP4",
											"source": 6
										},
										{
											"begin": 15305,
											"end": 15331,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 15305,
											"end": 15331,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 15305,
											"end": 15331,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 15176,
											"end": 15220,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "234"
										},
										{
											"begin": 15176,
											"end": 15350,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 15176,
											"end": 15350,
											"name": "tag",
											"source": 6,
											"value": "243"
										},
										{
											"begin": 15176,
											"end": 15350,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 15148,
											"end": 15350,
											"name": "SWAP4",
											"source": 6
										},
										{
											"begin": 15148,
											"end": 15350,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 14904,
											"end": 15365,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 14870,
											"end": 15365,
											"name": "tag",
											"source": 6,
											"value": "239"
										},
										{
											"begin": 14870,
											"end": 15365,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 15412,
											"end": 15413,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 15383,
											"end": 15408,
											"name": "DUP4",
											"source": 6
										},
										{
											"begin": 15383,
											"end": 15413,
											"name": "EQ",
											"source": 6
										},
										{
											"begin": 15379,
											"end": 15715,
											"name": "ISZERO",
											"source": 6
										},
										{
											"begin": 15379,
											"end": 15715,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "244"
										},
										{
											"begin": 15379,
											"end": 15715,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 15551,
											"end": 15700,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "245"
										},
										{
											"begin": 15617,
											"end": 15622,
											"name": "DUP10",
											"source": 6
										},
										{
											"begin": 15644,
											"end": 15650,
											"name": "DUP13",
											"source": 6
										},
										{
											"begin": 15680,
											"end": 15681,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 15551,
											"end": 15595,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "234"
										},
										{
											"begin": 15551,
											"end": 15700,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 15551,
											"end": 15700,
											"name": "tag",
											"source": 6,
											"value": "245"
										},
										{
											"begin": 15551,
											"end": 15700,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 15523,
											"end": 15700,
											"name": "SWAP3",
											"source": 6
										},
										{
											"begin": 15523,
											"end": 15700,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 15379,
											"end": 15715,
											"name": "tag",
											"source": 6,
											"value": "244"
										},
										{
											"begin": 15379,
											"end": 15715,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 14700,
											"end": 15725,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 14700,
											"end": 15725,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 14664,
											"end": 15725,
											"name": "tag",
											"source": 6,
											"value": "235"
										},
										{
											"begin": 14664,
											"end": 15725,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 15735,
											"end": 15765,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 15796,
											"end": 15797,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 15768,
											"end": 15793,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 15768,
											"end": 15797,
											"name": "GT",
											"source": 6
										},
										{
											"begin": 15768,
											"end": 15863,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 15768,
											"end": 15863,
											"name": "ISZERO",
											"source": 6
										},
										{
											"begin": 15768,
											"end": 15863,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "246"
										},
										{
											"begin": 15768,
											"end": 15863,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 15768,
											"end": 15863,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 15838,
											"end": 15863,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 15813,
											"end": 15825,
											"name": "DUP10",
											"source": 6
										},
										{
											"begin": 15813,
											"end": 15835,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 15813,
											"end": 15835,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 15813,
											"end": 15835,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 15813,
											"end": 15863,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFF"
										},
										{
											"begin": 15813,
											"end": 15863,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 15813,
											"end": 15863,
											"name": "GT",
											"source": 6
										},
										{
											"begin": 15768,
											"end": 15863,
											"name": "tag",
											"source": 6,
											"value": "246"
										},
										{
											"begin": 15768,
											"end": 15863,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 15735,
											"end": 15863,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 15735,
											"end": 15863,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 15944,
											"end": 15969,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 15943,
											"end": 15969,
											"name": "ISZERO",
											"source": 6
										},
										{
											"begin": 15943,
											"end": 15999,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 15943,
											"end": 15999,
											"name": "ISZERO",
											"source": 6
										},
										{
											"begin": 15943,
											"end": 15999,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "247"
										},
										{
											"begin": 15943,
											"end": 15999,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 15943,
											"end": 15999,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 15998,
											"end": 15999,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 15973,
											"end": 15994,
											"name": "DUP5",
											"source": 6
										},
										{
											"begin": 15973,
											"end": 15999,
											"name": "EQ",
											"source": 6
										},
										{
											"begin": 15943,
											"end": 15999,
											"name": "tag",
											"source": 6,
											"value": "247"
										},
										{
											"begin": 15943,
											"end": 15999,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 15939,
											"end": 16058,
											"name": "ISZERO",
											"source": 6
										},
										{
											"begin": 15939,
											"end": 16058,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "248"
										},
										{
											"begin": 15939,
											"end": 16058,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 16023,
											"end": 16024,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 16026,
											"end": 16046,
											"name": "DUP4",
											"source": 6
										},
										{
											"begin": 16015,
											"end": 16047,
											"name": "SWAP6",
											"source": 6
										},
										{
											"begin": 16015,
											"end": 16047,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 16015,
											"end": 16047,
											"name": "SWAP6",
											"source": 6
										},
										{
											"begin": 16015,
											"end": 16047,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 16015,
											"end": 16047,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 16015,
											"end": 16047,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 16015,
											"end": 16047,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 16015,
											"end": 16047,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 16015,
											"end": 16047,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "232"
										},
										{
											"begin": 16015,
											"end": 16047,
											"name": "JUMP",
											"source": 6
										},
										{
											"begin": 15939,
											"end": 16058,
											"name": "tag",
											"source": 6,
											"value": "248"
										},
										{
											"begin": 15939,
											"end": 16058,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 16214,
											"end": 16218,
											"name": "PUSH",
											"source": 6,
											"value": "DE0B6B3A7640000"
										},
										{
											"begin": 16197,
											"end": 16210,
											"name": "DUP8",
											"source": 6
										},
										{
											"begin": 16172,
											"end": 16193,
											"name": "DUP6",
											"source": 6
										},
										{
											"begin": 16149,
											"end": 16169,
											"name": "DUP6",
											"source": 6
										},
										{
											"begin": 16149,
											"end": 16193,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "249"
										},
										{
											"begin": 16149,
											"end": 16193,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 16149,
											"end": 16193,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 16149,
											"end": 16193,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "204"
										},
										{
											"begin": 16149,
											"end": 16193,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 16149,
											"end": 16193,
											"name": "tag",
											"source": 6,
											"value": "249"
										},
										{
											"begin": 16149,
											"end": 16193,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 16148,
											"end": 16210,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "250"
										},
										{
											"begin": 16148,
											"end": 16210,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 16148,
											"end": 16210,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 16148,
											"end": 16210,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "182"
										},
										{
											"begin": 16148,
											"end": 16210,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 16148,
											"end": 16210,
											"name": "tag",
											"source": 6,
											"value": "250"
										},
										{
											"begin": 16148,
											"end": 16210,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 16147,
											"end": 16218,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "251"
										},
										{
											"begin": 16147,
											"end": 16218,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 16147,
											"end": 16218,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 16147,
											"end": 16218,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "184"
										},
										{
											"begin": 16147,
											"end": 16218,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 16147,
											"end": 16218,
											"name": "tag",
											"source": 6,
											"value": "251"
										},
										{
											"begin": 16147,
											"end": 16218,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 16232,
											"end": 16252,
											"name": "DUP4",
											"source": 6
										},
										{
											"begin": 16068,
											"end": 16262,
											"name": "SWAP6",
											"source": 6
										},
										{
											"begin": 16068,
											"end": 16262,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 16068,
											"end": 16262,
											"name": "SWAP6",
											"source": 6
										},
										{
											"begin": 16068,
											"end": 16262,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 16068,
											"end": 16262,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 16068,
											"end": 16262,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 16068,
											"end": 16262,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 16068,
											"end": 16262,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 13961,
											"end": 16269,
											"name": "tag",
											"source": 6,
											"value": "232"
										},
										{
											"begin": 13961,
											"end": 16269,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 13961,
											"end": 16269,
											"name": "SWAP5",
											"source": 6
										},
										{
											"begin": 13961,
											"end": 16269,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 13961,
											"end": 16269,
											"name": "SWAP5",
											"source": 6
										},
										{
											"begin": 13961,
											"end": 16269,
											"name": "SWAP3",
											"source": 6
										},
										{
											"begin": 13961,
											"end": 16269,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 13961,
											"end": 16269,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 13961,
											"end": 16269,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 13961,
											"end": 16269,
											"name": "JUMP",
											"source": 6,
											"value": "[out]"
										},
										{
											"begin": 17625,
											"end": 17947,
											"name": "tag",
											"source": 6,
											"value": "172"
										},
										{
											"begin": 17625,
											"end": 17947,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 17785,
											"end": 17842,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "253"
										},
										{
											"begin": 17799,
											"end": 17805,
											"name": "DUP5",
											"source": 6
										},
										{
											"begin": 17807,
											"end": 17819,
											"name": "DUP5",
											"source": 6
										},
										{
											"begin": 17821,
											"end": 17826,
											"name": "DUP5",
											"source": 6
										},
										{
											"begin": 17828,
											"end": 17841,
											"name": "DUP5",
											"source": 6
										},
										{
											"begin": 17785,
											"end": 17798,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "209"
										},
										{
											"begin": 17785,
											"end": 17842,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 17785,
											"end": 17842,
											"name": "tag",
											"source": 6,
											"value": "253"
										},
										{
											"begin": 17785,
											"end": 17842,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 17785,
											"end": 17842,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 17852,
											"end": 17940,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "254"
										},
										{
											"begin": 17897,
											"end": 17902,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 17904,
											"end": 17910,
											"name": "DUP6",
											"source": 6
										},
										{
											"begin": 17920,
											"end": 17932,
											"name": "DUP6",
											"source": 6
										},
										{
											"begin": 17920,
											"end": 17938,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 17920,
											"end": 17938,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 17920,
											"end": 17938,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 17852,
											"end": 17896,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "211"
										},
										{
											"begin": 17852,
											"end": 17940,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 17852,
											"end": 17940,
											"name": "tag",
											"source": 6,
											"value": "254"
										},
										{
											"begin": 17852,
											"end": 17940,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 17625,
											"end": 17947,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 17625,
											"end": 17947,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 17625,
											"end": 17947,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 17625,
											"end": 17947,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 17625,
											"end": 17947,
											"name": "JUMP",
											"source": 6,
											"value": "[out]"
										},
										{
											"begin": 16584,
											"end": 17308,
											"name": "tag",
											"source": 6,
											"value": "209"
										},
										{
											"begin": 16584,
											"end": 17308,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 16750,
											"end": 16757,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 16770,
											"end": 16786,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 16788,
											"end": 16809,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 16813,
											"end": 16926,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "256"
										},
										{
											"begin": 16838,
											"end": 16844,
											"name": "DUP8",
											"source": 6
										},
										{
											"begin": 16858,
											"end": 16870,
											"name": "DUP8",
											"source": 6
										},
										{
											"begin": 16884,
											"end": 16889,
											"name": "DUP8",
											"source": 6
										},
										{
											"begin": 16903,
											"end": 16916,
											"name": "DUP8",
											"source": 6
										},
										{
											"begin": 16813,
											"end": 16824,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "164"
										},
										{
											"begin": 16813,
											"end": 16926,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 16813,
											"end": 16926,
											"name": "tag",
											"source": 6,
											"value": "256"
										},
										{
											"begin": 16813,
											"end": 16926,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 16769,
											"end": 16926,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 16769,
											"end": 16926,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 16769,
											"end": 16926,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 16769,
											"end": 16926,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 17054,
											"end": 17067,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 16970,
											"name": "PUSH",
											"source": 6,
											"value": "1"
										},
										{
											"begin": 16937,
											"end": 16977,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 16971,
											"end": 16976,
											"name": "DUP8",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 16977,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 16937,
											"end": 16977,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 16977,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 16937,
											"end": 16977,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 16977,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 16977,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 16977,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 16937,
											"end": 16977,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 16977,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 16977,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 16977,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 16977,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 16937,
											"end": 16977,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 16977,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 16937,
											"end": 16977,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 16985,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 16978,
											"end": 16984,
											"name": "DUP10",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 16985,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 16937,
											"end": 16985,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 16985,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 16937,
											"end": 16985,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 16985,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 16985,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 16985,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 16937,
											"end": 16985,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 16985,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 16985,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 16985,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 16985,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 16937,
											"end": 16985,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 16985,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 16937,
											"end": 16985,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 17005,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 16986,
											"end": 16998,
											"name": "DUP9",
											"source": 6
										},
										{
											"begin": 16986,
											"end": 17004,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 16986,
											"end": 17004,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 16986,
											"end": 17004,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 17005,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 16937,
											"end": 17005,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 17005,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 16937,
											"end": 17005,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 17005,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 17005,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 17005,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 16937,
											"end": 17005,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 17005,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 17005,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 17005,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 17005,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 16937,
											"end": 17005,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 17005,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 16937,
											"end": 17005,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 17051,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 17019,
											"end": 17031,
											"name": "DUP9",
											"source": 6
										},
										{
											"begin": 17019,
											"end": 17041,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 17019,
											"end": 17041,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 17019,
											"end": 17041,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 17051,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFF"
										},
										{
											"begin": 16937,
											"end": 17051,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 17051,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFF"
										},
										{
											"begin": 16937,
											"end": 17051,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 17051,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 17051,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 17051,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 16937,
											"end": 17051,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 17051,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 17051,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 17051,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 17051,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 16937,
											"end": 17051,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 17051,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 16937,
											"end": 17051,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 17067,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 17067,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 17067,
											"name": "SSTORE",
											"source": 6
										},
										{
											"begin": 16937,
											"end": 17067,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 17093,
											"end": 17094,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 17082,
											"end": 17090,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 17082,
											"end": 17094,
											"name": "GT",
											"source": 6
										},
										{
											"begin": 17078,
											"end": 17276,
											"name": "ISZERO",
											"source": 6
										},
										{
											"begin": 17078,
											"end": 17276,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "257"
										},
										{
											"begin": 17078,
											"end": 17276,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 17164,
											"end": 17172,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 17110,
											"end": 17133,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 17110,
											"end": 17140,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 17134,
											"end": 17139,
											"name": "DUP8",
											"source": 6
										},
										{
											"begin": 17110,
											"end": 17140,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 17110,
											"end": 17140,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 17110,
											"end": 17140,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 17110,
											"end": 17140,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 17110,
											"end": 17140,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 17110,
											"end": 17140,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 17110,
											"end": 17140,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 17110,
											"end": 17140,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 17110,
											"end": 17140,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 17110,
											"end": 17140,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 17110,
											"end": 17140,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 17110,
											"end": 17140,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 17110,
											"end": 17140,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 17110,
											"end": 17140,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 17110,
											"end": 17140,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 17110,
											"end": 17160,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 17141,
											"end": 17153,
											"name": "DUP9",
											"source": 6
										},
										{
											"begin": 17141,
											"end": 17159,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 17141,
											"end": 17159,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 17141,
											"end": 17159,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 17110,
											"end": 17160,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 17110,
											"end": 17160,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 17110,
											"end": 17160,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 17110,
											"end": 17160,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 17110,
											"end": 17160,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 17110,
											"end": 17160,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 17110,
											"end": 17160,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 17110,
											"end": 17160,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 17110,
											"end": 17160,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 17110,
											"end": 17160,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 17110,
											"end": 17160,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 17110,
											"end": 17160,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 17110,
											"end": 17160,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 17110,
											"end": 17160,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 17110,
											"end": 17160,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 17110,
											"end": 17160,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 17110,
											"end": 17172,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 17110,
											"end": 17172,
											"name": "DUP3",
											"source": 6
										},
										{
											"begin": 17110,
											"end": 17172,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 17110,
											"end": 17172,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "258"
										},
										{
											"begin": 17110,
											"end": 17172,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 17110,
											"end": 17172,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 17110,
											"end": 17172,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "195"
										},
										{
											"begin": 17110,
											"end": 17172,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 17110,
											"end": 17172,
											"name": "tag",
											"source": 6,
											"value": "258"
										},
										{
											"begin": 17110,
											"end": 17172,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 17110,
											"end": 17172,
											"name": "SWAP3",
											"source": 6
										},
										{
											"begin": 17110,
											"end": 17172,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 17110,
											"end": 17172,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 17110,
											"end": 17172,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 17110,
											"end": 17172,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 17110,
											"end": 17172,
											"name": "SSTORE",
											"source": 6
										},
										{
											"begin": 17110,
											"end": 17172,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 17234,
											"end": 17239,
											"name": "DUP5",
											"source": 6
										},
										{
											"begin": 17191,
											"end": 17265,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 17191,
											"end": 17265,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 17214,
											"end": 17226,
											"name": "DUP7",
											"source": 6
										},
										{
											"begin": 17214,
											"end": 17232,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 17214,
											"end": 17232,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 17214,
											"end": 17232,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 17191,
											"end": 17265,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 17191,
											"end": 17265,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 17206,
											"end": 17212,
											"name": "DUP9",
											"source": 6
										},
										{
											"begin": 17191,
											"end": 17265,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 17191,
											"end": 17265,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 17191,
											"end": 17265,
											"name": "PUSH",
											"source": 6,
											"value": "7E27222C50A5510DFC61468D936B48C880BFBD05C1EB59C5BE79B06E582369DD"
										},
										{
											"begin": 17241,
											"end": 17249,
											"name": "DUP6",
											"source": 6
										},
										{
											"begin": 17251,
											"end": 17264,
											"name": "DUP6",
											"source": 6
										},
										{
											"begin": 17191,
											"end": 17265,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 17191,
											"end": 17265,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 17191,
											"end": 17265,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "259"
										},
										{
											"begin": 17191,
											"end": 17265,
											"name": "SWAP3",
											"source": 6
										},
										{
											"begin": 17191,
											"end": 17265,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 17191,
											"end": 17265,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 17191,
											"end": 17265,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "260"
										},
										{
											"begin": 17191,
											"end": 17265,
											"name": "JUMP",
											"source": 6,
											"value": "[in]"
										},
										{
											"begin": 17191,
											"end": 17265,
											"name": "tag",
											"source": 6,
											"value": "259"
										},
										{
											"begin": 17191,
											"end": 17265,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 17191,
											"end": 17265,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 17191,
											"end": 17265,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 17191,
											"end": 17265,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 17191,
											"end": 17265,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 17191,
											"end": 17265,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 17191,
											"end": 17265,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 17191,
											"end": 17265,
											"name": "LOG4",
											"source": 6
										},
										{
											"begin": 17078,
											"end": 17276,
											"name": "tag",
											"source": 6,
											"value": "257"
										},
										{
											"begin": 17078,
											"end": 17276,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 17293,
											"end": 17301,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 17286,
											"end": 17301,
											"name": "SWAP3",
											"source": 6
										},
										{
											"begin": 17286,
											"end": 17301,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 17286,
											"end": 17301,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 17286,
											"end": 17301,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 16584,
											"end": 17308,
											"name": "SWAP5",
											"source": 6
										},
										{
											"begin": 16584,
											"end": 17308,
											"name": "SWAP4",
											"source": 6
										},
										{
											"begin": 16584,
											"end": 17308,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 16584,
											"end": 17308,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 16584,
											"end": 17308,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 16584,
											"end": 17308,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 16584,
											"end": 17308,
											"name": "JUMP",
											"source": 6,
											"value": "[out]"
										},
										{
											"begin": 13205,
											"end": 13499,
											"name": "tag",
											"source": 6,
											"value": "211"
										},
										{
											"begin": 13205,
											"end": 13499,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 13467,
											"end": 13482,
											"name": "TIMESTAMP",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13492,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFF"
										},
										{
											"begin": 13368,
											"end": 13492,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13408,
											"name": "PUSH",
											"source": 6,
											"value": "2"
										},
										{
											"begin": 13368,
											"end": 13415,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 13409,
											"end": 13414,
											"name": "DUP6",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13415,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 13368,
											"end": 13415,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13415,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 13368,
											"end": 13415,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13415,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13415,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13415,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 13368,
											"end": 13415,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13415,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13415,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13415,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13415,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 13368,
											"end": 13415,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13415,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 13368,
											"end": 13415,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13423,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 13416,
											"end": 13422,
											"name": "DUP5",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13423,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 13368,
											"end": 13423,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13423,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 13368,
											"end": 13423,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13423,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13423,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13423,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 13368,
											"end": 13423,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13423,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13423,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13423,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13423,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 13368,
											"end": 13423,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13423,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 13368,
											"end": 13423,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13444,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 13424,
											"end": 13443,
											"name": "DUP4",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13444,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 13368,
											"end": 13444,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13444,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 13368,
											"end": 13444,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13444,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13444,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13444,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 13368,
											"end": 13444,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13444,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13444,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13444,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13444,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 13368,
											"end": 13444,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13444,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 13368,
											"end": 13444,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13492,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13492,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13492,
											"name": "SSTORE",
											"source": 6
										},
										{
											"begin": 13368,
											"end": 13492,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 13205,
											"end": 13499,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 13205,
											"end": 13499,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 13205,
											"end": 13499,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 13205,
											"end": 13499,
											"name": "JUMP",
											"source": 6,
											"value": "[out]"
										},
										{
											"begin": 6954,
											"end": 7341,
											"name": "tag",
											"source": 3,
											"value": "226"
										},
										{
											"begin": 6954,
											"end": 7341,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 7095,
											"end": 7107,
											"name": "PUSH",
											"source": 3,
											"value": "60"
										},
										{
											"begin": 7127,
											"end": 7145,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "263"
										},
										{
											"begin": 7138,
											"end": 7144,
											"name": "DUP5",
											"source": 3
										},
										{
											"begin": 7127,
											"end": 7137,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "264"
										},
										{
											"begin": 7127,
											"end": 7145,
											"name": "JUMP",
											"source": 3,
											"value": "[in]"
										},
										{
											"begin": 7127,
											"end": 7145,
											"name": "tag",
											"source": 3,
											"value": "263"
										},
										{
											"begin": 7127,
											"end": 7145,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 7119,
											"end": 7188,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "265"
										},
										{
											"begin": 7119,
											"end": 7188,
											"name": "JUMPI",
											"source": 3
										},
										{
											"begin": 7119,
											"end": 7188,
											"name": "PUSH",
											"source": 3,
											"value": "40"
										},
										{
											"begin": 7119,
											"end": 7188,
											"name": "MLOAD",
											"source": 3
										},
										{
											"begin": 7119,
											"end": 7188,
											"name": "PUSH",
											"source": 3,
											"value": "8C379A000000000000000000000000000000000000000000000000000000000"
										},
										{
											"begin": 7119,
											"end": 7188,
											"name": "DUP2",
											"source": 3
										},
										{
											"begin": 7119,
											"end": 7188,
											"name": "MSTORE",
											"source": 3
										},
										{
											"begin": 7119,
											"end": 7188,
											"name": "PUSH",
											"source": 3,
											"value": "4"
										},
										{
											"begin": 7119,
											"end": 7188,
											"name": "ADD",
											"source": 3
										},
										{
											"begin": 7119,
											"end": 7188,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "266"
										},
										{
											"begin": 7119,
											"end": 7188,
											"name": "SWAP1",
											"source": 3
										},
										{
											"begin": 7119,
											"end": 7188,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "267"
										},
										{
											"begin": 7119,
											"end": 7188,
											"name": "JUMP",
											"source": 3,
											"value": "[in]"
										},
										{
											"begin": 7119,
											"end": 7188,
											"name": "tag",
											"source": 3,
											"value": "266"
										},
										{
											"begin": 7119,
											"end": 7188,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 7119,
											"end": 7188,
											"name": "PUSH",
											"source": 3,
											"value": "40"
										},
										{
											"begin": 7119,
											"end": 7188,
											"name": "MLOAD",
											"source": 3
										},
										{
											"begin": 7119,
											"end": 7188,
											"name": "DUP1",
											"source": 3
										},
										{
											"begin": 7119,
											"end": 7188,
											"name": "SWAP2",
											"source": 3
										},
										{
											"begin": 7119,
											"end": 7188,
											"name": "SUB",
											"source": 3
										},
										{
											"begin": 7119,
											"end": 7188,
											"name": "SWAP1",
											"source": 3
										},
										{
											"begin": 7119,
											"end": 7188,
											"name": "REVERT",
											"source": 3
										},
										{
											"begin": 7119,
											"end": 7188,
											"name": "tag",
											"source": 3,
											"value": "265"
										},
										{
											"begin": 7119,
											"end": 7188,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 7200,
											"end": 7212,
											"name": "PUSH",
											"source": 3,
											"value": "0"
										},
										{
											"begin": 7214,
											"end": 7237,
											"name": "DUP1",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7247,
											"name": "DUP6",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7260,
											"name": "PUSH",
											"source": 3,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 7241,
											"end": 7260,
											"name": "AND",
											"source": 3
										},
										{
											"begin": 7261,
											"end": 7265,
											"name": "DUP6",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "PUSH",
											"source": 3,
											"value": "40"
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "MLOAD",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "268"
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "SWAP2",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "SWAP1",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "269"
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "JUMP",
											"source": 3,
											"value": "[in]"
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "tag",
											"source": 3,
											"value": "268"
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "PUSH",
											"source": 3,
											"value": "0"
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "PUSH",
											"source": 3,
											"value": "40"
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "MLOAD",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "DUP1",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "DUP4",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "SUB",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "DUP2",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "DUP6",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "GAS",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "DELEGATECALL",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "SWAP2",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "RETURNDATASIZE",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "DUP1",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "PUSH",
											"source": 3,
											"value": "0"
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "DUP2",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "EQ",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "272"
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "JUMPI",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "PUSH",
											"source": 3,
											"value": "40"
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "MLOAD",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "SWAP2",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "PUSH",
											"source": 3,
											"value": "1F"
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "NOT",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "PUSH",
											"source": 3,
											"value": "3F"
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "RETURNDATASIZE",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "ADD",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "AND",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "DUP3",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "ADD",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "PUSH",
											"source": 3,
											"value": "40"
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "MSTORE",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "RETURNDATASIZE",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "DUP3",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "MSTORE",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "RETURNDATASIZE",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "PUSH",
											"source": 3,
											"value": "0"
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "PUSH",
											"source": 3,
											"value": "20"
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "DUP5",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "ADD",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "RETURNDATACOPY",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "271"
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "JUMP",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "tag",
											"source": 3,
											"value": "272"
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "PUSH",
											"source": 3,
											"value": "60"
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "SWAP2",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "tag",
											"source": 3,
											"value": "271"
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 7241,
											"end": 7266,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 7199,
											"end": 7266,
											"name": "SWAP2",
											"source": 3
										},
										{
											"begin": 7199,
											"end": 7266,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 7199,
											"end": 7266,
											"name": "SWAP2",
											"source": 3
										},
										{
											"begin": 7199,
											"end": 7266,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 7283,
											"end": 7334,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "273"
										},
										{
											"begin": 7300,
											"end": 7307,
											"name": "DUP3",
											"source": 3
										},
										{
											"begin": 7309,
											"end": 7319,
											"name": "DUP3",
											"source": 3
										},
										{
											"begin": 7321,
											"end": 7333,
											"name": "DUP7",
											"source": 3
										},
										{
											"begin": 7283,
											"end": 7299,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "274"
										},
										{
											"begin": 7283,
											"end": 7334,
											"name": "JUMP",
											"source": 3,
											"value": "[in]"
										},
										{
											"begin": 7283,
											"end": 7334,
											"name": "tag",
											"source": 3,
											"value": "273"
										},
										{
											"begin": 7283,
											"end": 7334,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 7276,
											"end": 7334,
											"name": "SWAP3",
											"source": 3
										},
										{
											"begin": 7276,
											"end": 7334,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 7276,
											"end": 7334,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 7276,
											"end": 7334,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 6954,
											"end": 7341,
											"name": "SWAP4",
											"source": 3
										},
										{
											"begin": 6954,
											"end": 7341,
											"name": "SWAP3",
											"source": 3
										},
										{
											"begin": 6954,
											"end": 7341,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 6954,
											"end": 7341,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 6954,
											"end": 7341,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 6954,
											"end": 7341,
											"name": "JUMP",
											"source": 3,
											"value": "[out]"
										},
										{
											"begin": 3747,
											"end": 4453,
											"name": "tag",
											"source": 2,
											"value": "231"
										},
										{
											"begin": 3747,
											"end": 4453,
											"name": "JUMPDEST",
											"source": 2
										},
										{
											"begin": 4166,
											"end": 4189,
											"name": "PUSH",
											"source": 2,
											"value": "0"
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "PUSH [tag]",
											"source": 2,
											"value": "276"
										},
										{
											"begin": 4220,
											"end": 4224,
											"name": "DUP3",
											"source": 2
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "PUSH",
											"source": 2,
											"value": "40"
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "MLOAD",
											"source": 2
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "DUP1",
											"source": 2
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "PUSH",
											"source": 2,
											"value": "40"
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "ADD",
											"source": 2
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "PUSH",
											"source": 2,
											"value": "40"
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "MSTORE",
											"source": 2
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "DUP1",
											"source": 2
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "PUSH",
											"source": 2,
											"value": "20"
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "DUP2",
											"source": 2
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "MSTORE",
											"source": 2
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "PUSH",
											"source": 2,
											"value": "20"
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "ADD",
											"source": 2
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "PUSH",
											"source": 2,
											"value": "5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564"
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "DUP2",
											"source": 2
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "MSTORE",
											"source": 2
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "POP",
											"source": 2
										},
										{
											"begin": 4200,
											"end": 4205,
											"name": "DUP6",
											"source": 2
										},
										{
											"begin": 4192,
											"end": 4219,
											"name": "PUSH",
											"source": 2,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 4192,
											"end": 4219,
											"name": "AND",
											"source": 2
										},
										{
											"begin": 4192,
											"end": 4219,
											"name": "PUSH [tag]",
											"source": 2,
											"value": "277"
										},
										{
											"begin": 4192,
											"end": 4219,
											"name": "SWAP1",
											"source": 2
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "SWAP3",
											"source": 2
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "SWAP2",
											"source": 2
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "SWAP1",
											"source": 2
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "PUSH",
											"source": 2,
											"value": "FFFFFFFF"
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "AND",
											"source": 2
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "JUMP",
											"source": 2,
											"value": "[in]"
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "tag",
											"source": 2,
											"value": "276"
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "JUMPDEST",
											"source": 2
										},
										{
											"begin": 4166,
											"end": 4261,
											"name": "SWAP1",
											"source": 2
										},
										{
											"begin": 4166,
											"end": 4261,
											"name": "POP",
											"source": 2
										},
										{
											"begin": 4295,
											"end": 4296,
											"name": "PUSH",
											"source": 2,
											"value": "0"
										},
										{
											"begin": 4275,
											"end": 4285,
											"name": "DUP2",
											"source": 2
										},
										{
											"begin": 4275,
											"end": 4292,
											"name": "MLOAD",
											"source": 2
										},
										{
											"begin": 4275,
											"end": 4296,
											"name": "GT",
											"source": 2
										},
										{
											"begin": 4271,
											"end": 4447,
											"name": "ISZERO",
											"source": 2
										},
										{
											"begin": 4271,
											"end": 4447,
											"name": "PUSH [tag]",
											"source": 2,
											"value": "278"
										},
										{
											"begin": 4271,
											"end": 4447,
											"name": "JUMPI",
											"source": 2
										},
										{
											"begin": 4370,
											"end": 4380,
											"name": "DUP1",
											"source": 2
										},
										{
											"begin": 4359,
											"end": 4389,
											"name": "DUP1",
											"source": 2
										},
										{
											"begin": 4359,
											"end": 4389,
											"name": "PUSH",
											"source": 2,
											"value": "20"
										},
										{
											"begin": 4359,
											"end": 4389,
											"name": "ADD",
											"source": 2
										},
										{
											"begin": 4359,
											"end": 4389,
											"name": "SWAP1",
											"source": 2
										},
										{
											"begin": 4359,
											"end": 4389,
											"name": "MLOAD",
											"source": 2
										},
										{
											"begin": 4359,
											"end": 4389,
											"name": "DUP2",
											"source": 2
										},
										{
											"begin": 4359,
											"end": 4389,
											"name": "ADD",
											"source": 2
										},
										{
											"begin": 4359,
											"end": 4389,
											"name": "SWAP1",
											"source": 2
										},
										{
											"begin": 4359,
											"end": 4389,
											"name": "PUSH [tag]",
											"source": 2,
											"value": "279"
										},
										{
											"begin": 4359,
											"end": 4389,
											"name": "SWAP2",
											"source": 2
										},
										{
											"begin": 4359,
											"end": 4389,
											"name": "SWAP1",
											"source": 2
										},
										{
											"begin": 4359,
											"end": 4389,
											"name": "PUSH [tag]",
											"source": 2,
											"value": "280"
										},
										{
											"begin": 4359,
											"end": 4389,
											"name": "JUMP",
											"source": 2,
											"value": "[in]"
										},
										{
											"begin": 4359,
											"end": 4389,
											"name": "tag",
											"source": 2,
											"value": "279"
										},
										{
											"begin": 4359,
											"end": 4389,
											"name": "JUMPDEST",
											"source": 2
										},
										{
											"begin": 4351,
											"end": 4436,
											"name": "PUSH [tag]",
											"source": 2,
											"value": "281"
										},
										{
											"begin": 4351,
											"end": 4436,
											"name": "JUMPI",
											"source": 2
										},
										{
											"begin": 4351,
											"end": 4436,
											"name": "PUSH",
											"source": 2,
											"value": "40"
										},
										{
											"begin": 4351,
											"end": 4436,
											"name": "MLOAD",
											"source": 2
										},
										{
											"begin": 4351,
											"end": 4436,
											"name": "PUSH",
											"source": 2,
											"value": "8C379A000000000000000000000000000000000000000000000000000000000"
										},
										{
											"begin": 4351,
											"end": 4436,
											"name": "DUP2",
											"source": 2
										},
										{
											"begin": 4351,
											"end": 4436,
											"name": "MSTORE",
											"source": 2
										},
										{
											"begin": 4351,
											"end": 4436,
											"name": "PUSH",
											"source": 2,
											"value": "4"
										},
										{
											"begin": 4351,
											"end": 4436,
											"name": "ADD",
											"source": 2
										},
										{
											"begin": 4351,
											"end": 4436,
											"name": "PUSH [tag]",
											"source": 2,
											"value": "282"
										},
										{
											"begin": 4351,
											"end": 4436,
											"name": "SWAP1",
											"source": 2
										},
										{
											"begin": 4351,
											"end": 4436,
											"name": "PUSH [tag]",
											"source": 2,
											"value": "283"
										},
										{
											"begin": 4351,
											"end": 4436,
											"name": "JUMP",
											"source": 2,
											"value": "[in]"
										},
										{
											"begin": 4351,
											"end": 4436,
											"name": "tag",
											"source": 2,
											"value": "282"
										},
										{
											"begin": 4351,
											"end": 4436,
											"name": "JUMPDEST",
											"source": 2
										},
										{
											"begin": 4351,
											"end": 4436,
											"name": "PUSH",
											"source": 2,
											"value": "40"
										},
										{
											"begin": 4351,
											"end": 4436,
											"name": "MLOAD",
											"source": 2
										},
										{
											"begin": 4351,
											"end": 4436,
											"name": "DUP1",
											"source": 2
										},
										{
											"begin": 4351,
											"end": 4436,
											"name": "SWAP2",
											"source": 2
										},
										{
											"begin": 4351,
											"end": 4436,
											"name": "SUB",
											"source": 2
										},
										{
											"begin": 4351,
											"end": 4436,
											"name": "SWAP1",
											"source": 2
										},
										{
											"begin": 4351,
											"end": 4436,
											"name": "REVERT",
											"source": 2
										},
										{
											"begin": 4351,
											"end": 4436,
											"name": "tag",
											"source": 2,
											"value": "281"
										},
										{
											"begin": 4351,
											"end": 4436,
											"name": "JUMPDEST",
											"source": 2
										},
										{
											"begin": 4271,
											"end": 4447,
											"name": "tag",
											"source": 2,
											"value": "278"
										},
										{
											"begin": 4271,
											"end": 4447,
											"name": "JUMPDEST",
											"source": 2
										},
										{
											"begin": 3817,
											"end": 4453,
											"name": "POP",
											"source": 2
										},
										{
											"begin": 3747,
											"end": 4453,
											"name": "POP",
											"source": 2
										},
										{
											"begin": 3747,
											"end": 4453,
											"name": "POP",
											"source": 2
										},
										{
											"begin": 3747,
											"end": 4453,
											"name": "JUMP",
											"source": 2,
											"value": "[out]"
										},
										{
											"begin": 12579,
											"end": 12855,
											"name": "tag",
											"source": 6,
											"value": "234"
										},
										{
											"begin": 12579,
											"end": 12855,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 12746,
											"end": 12753,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 12772,
											"end": 12812,
											"name": "PUSH",
											"source": 6,
											"value": "2"
										},
										{
											"begin": 12772,
											"end": 12819,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 12813,
											"end": 12818,
											"name": "DUP6",
											"source": 6
										},
										{
											"begin": 12772,
											"end": 12819,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 12772,
											"end": 12819,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 12772,
											"end": 12819,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 12772,
											"end": 12819,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 12772,
											"end": 12819,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 12772,
											"end": 12819,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 12772,
											"end": 12819,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 12772,
											"end": 12819,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 12772,
											"end": 12819,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 12772,
											"end": 12819,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 12772,
											"end": 12819,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 12772,
											"end": 12819,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 12772,
											"end": 12819,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 12772,
											"end": 12819,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 12772,
											"end": 12819,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 12772,
											"end": 12827,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 12820,
											"end": 12826,
											"name": "DUP5",
											"source": 6
										},
										{
											"begin": 12772,
											"end": 12827,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 12772,
											"end": 12827,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 12772,
											"end": 12827,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 12772,
											"end": 12827,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 12772,
											"end": 12827,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 12772,
											"end": 12827,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 12772,
											"end": 12827,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 12772,
											"end": 12827,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 12772,
											"end": 12827,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 12772,
											"end": 12827,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 12772,
											"end": 12827,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 12772,
											"end": 12827,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 12772,
											"end": 12827,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 12772,
											"end": 12827,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 12772,
											"end": 12827,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 12772,
											"end": 12848,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 12828,
											"end": 12847,
											"name": "DUP4",
											"source": 6
										},
										{
											"begin": 12772,
											"end": 12848,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 12772,
											"end": 12848,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 12772,
											"end": 12848,
											"name": "PUSH",
											"source": 6,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 12772,
											"end": 12848,
											"name": "AND",
											"source": 6
										},
										{
											"begin": 12772,
											"end": 12848,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 12772,
											"end": 12848,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 12772,
											"end": 12848,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 12772,
											"end": 12848,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 12772,
											"end": 12848,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 12772,
											"end": 12848,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 12772,
											"end": 12848,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 12772,
											"end": 12848,
											"name": "PUSH",
											"source": 6,
											"value": "20"
										},
										{
											"begin": 12772,
											"end": 12848,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 12772,
											"end": 12848,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 12772,
											"end": 12848,
											"name": "KECCAK256",
											"source": 6
										},
										{
											"begin": 12772,
											"end": 12848,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 12765,
											"end": 12848,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 12765,
											"end": 12848,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 12579,
											"end": 12855,
											"name": "SWAP4",
											"source": 6
										},
										{
											"begin": 12579,
											"end": 12855,
											"name": "SWAP3",
											"source": 6
										},
										{
											"begin": 12579,
											"end": 12855,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 12579,
											"end": 12855,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 12579,
											"end": 12855,
											"name": "POP",
											"source": 6
										},
										{
											"begin": 12579,
											"end": 12855,
											"name": "JUMP",
											"source": 6,
											"value": "[out]"
										},
										{
											"begin": 1175,
											"end": 1495,
											"name": "tag",
											"source": 3,
											"value": "264"
										},
										{
											"begin": 1175,
											"end": 1495,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 1235,
											"end": 1239,
											"name": "PUSH",
											"source": 3,
											"value": "0"
										},
										{
											"begin": 1487,
											"end": 1488,
											"name": "DUP1",
											"source": 3
										},
										{
											"begin": 1465,
											"end": 1472,
											"name": "DUP3",
											"source": 3
										},
										{
											"begin": 1465,
											"end": 1484,
											"name": "PUSH",
											"source": 3,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 1465,
											"end": 1484,
											"name": "AND",
											"source": 3
										},
										{
											"begin": 1465,
											"end": 1484,
											"name": "EXTCODESIZE",
											"source": 3
										},
										{
											"begin": 1465,
											"end": 1488,
											"name": "GT",
											"source": 3
										},
										{
											"begin": 1458,
											"end": 1488,
											"name": "SWAP1",
											"source": 3
										},
										{
											"begin": 1458,
											"end": 1488,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 1175,
											"end": 1495,
											"name": "SWAP2",
											"source": 3
										},
										{
											"begin": 1175,
											"end": 1495,
											"name": "SWAP1",
											"source": 3
										},
										{
											"begin": 1175,
											"end": 1495,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 1175,
											"end": 1495,
											"name": "JUMP",
											"source": 3,
											"value": "[out]"
										},
										{
											"begin": 7561,
											"end": 8303,
											"name": "tag",
											"source": 3,
											"value": "274"
										},
										{
											"begin": 7561,
											"end": 8303,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 7707,
											"end": 7719,
											"name": "PUSH",
											"source": 3,
											"value": "60"
										},
										{
											"begin": 7735,
											"end": 7742,
											"name": "DUP4",
											"source": 3
										},
										{
											"begin": 7731,
											"end": 8297,
											"name": "ISZERO",
											"source": 3
										},
										{
											"begin": 7731,
											"end": 8297,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "287"
										},
										{
											"begin": 7731,
											"end": 8297,
											"name": "JUMPI",
											"source": 3
										},
										{
											"begin": 7765,
											"end": 7775,
											"name": "DUP3",
											"source": 3
										},
										{
											"begin": 7758,
											"end": 7775,
											"name": "SWAP1",
											"source": 3
										},
										{
											"begin": 7758,
											"end": 7775,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 7758,
											"end": 7775,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "286"
										},
										{
											"begin": 7758,
											"end": 7775,
											"name": "JUMP",
											"source": 3
										},
										{
											"begin": 7731,
											"end": 8297,
											"name": "tag",
											"source": 3,
											"value": "287"
										},
										{
											"begin": 7731,
											"end": 8297,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 7896,
											"end": 7897,
											"name": "PUSH",
											"source": 3,
											"value": "0"
										},
										{
											"begin": 7876,
											"end": 7886,
											"name": "DUP4",
											"source": 3
										},
										{
											"begin": 7876,
											"end": 7893,
											"name": "MLOAD",
											"source": 3
										},
										{
											"begin": 7876,
											"end": 7897,
											"name": "GT",
											"source": 3
										},
										{
											"begin": 7872,
											"end": 8287,
											"name": "ISZERO",
											"source": 3
										},
										{
											"begin": 7872,
											"end": 8287,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "289"
										},
										{
											"begin": 7872,
											"end": 8287,
											"name": "JUMPI",
											"source": 3
										},
										{
											"begin": 8120,
											"end": 8130,
											"name": "DUP3",
											"source": 3
										},
										{
											"begin": 8114,
											"end": 8131,
											"name": "MLOAD",
											"source": 3
										},
										{
											"begin": 8180,
											"end": 8195,
											"name": "DUP1",
											"source": 3
										},
										{
											"begin": 8167,
											"end": 8177,
											"name": "DUP5",
											"source": 3
										},
										{
											"begin": 8163,
											"end": 8165,
											"name": "PUSH",
											"source": 3,
											"value": "20"
										},
										{
											"begin": 8159,
											"end": 8178,
											"name": "ADD",
											"source": 3
										},
										{
											"begin": 8152,
											"end": 8196,
											"name": "REVERT",
											"source": 3
										},
										{
											"begin": 7872,
											"end": 8287,
											"name": "tag",
											"source": 3,
											"value": "289"
										},
										{
											"begin": 7872,
											"end": 8287,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 8259,
											"end": 8271,
											"name": "DUP2",
											"source": 3
										},
										{
											"begin": 8252,
											"end": 8272,
											"name": "PUSH",
											"source": 3,
											"value": "40"
										},
										{
											"begin": 8252,
											"end": 8272,
											"name": "MLOAD",
											"source": 3
										},
										{
											"begin": 8252,
											"end": 8272,
											"name": "PUSH",
											"source": 3,
											"value": "8C379A000000000000000000000000000000000000000000000000000000000"
										},
										{
											"begin": 8252,
											"end": 8272,
											"name": "DUP2",
											"source": 3
										},
										{
											"begin": 8252,
											"end": 8272,
											"name": "MSTORE",
											"source": 3
										},
										{
											"begin": 8252,
											"end": 8272,
											"name": "PUSH",
											"source": 3,
											"value": "4"
										},
										{
											"begin": 8252,
											"end": 8272,
											"name": "ADD",
											"source": 3
										},
										{
											"begin": 8252,
											"end": 8272,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "291"
										},
										{
											"begin": 8252,
											"end": 8272,
											"name": "SWAP2",
											"source": 3
										},
										{
											"begin": 8252,
											"end": 8272,
											"name": "SWAP1",
											"source": 3
										},
										{
											"begin": 8252,
											"end": 8272,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "292"
										},
										{
											"begin": 8252,
											"end": 8272,
											"name": "JUMP",
											"source": 3,
											"value": "[in]"
										},
										{
											"begin": 8252,
											"end": 8272,
											"name": "tag",
											"source": 3,
											"value": "291"
										},
										{
											"begin": 8252,
											"end": 8272,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 8252,
											"end": 8272,
											"name": "PUSH",
											"source": 3,
											"value": "40"
										},
										{
											"begin": 8252,
											"end": 8272,
											"name": "MLOAD",
											"source": 3
										},
										{
											"begin": 8252,
											"end": 8272,
											"name": "DUP1",
											"source": 3
										},
										{
											"begin": 8252,
											"end": 8272,
											"name": "SWAP2",
											"source": 3
										},
										{
											"begin": 8252,
											"end": 8272,
											"name": "SUB",
											"source": 3
										},
										{
											"begin": 8252,
											"end": 8272,
											"name": "SWAP1",
											"source": 3
										},
										{
											"begin": 8252,
											"end": 8272,
											"name": "REVERT",
											"source": 3
										},
										{
											"begin": 7561,
											"end": 8303,
											"name": "tag",
											"source": 3,
											"value": "286"
										},
										{
											"begin": 7561,
											"end": 8303,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 7561,
											"end": 8303,
											"name": "SWAP4",
											"source": 3
										},
										{
											"begin": 7561,
											"end": 8303,
											"name": "SWAP3",
											"source": 3
										},
										{
											"begin": 7561,
											"end": 8303,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 7561,
											"end": 8303,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 7561,
											"end": 8303,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 7561,
											"end": 8303,
											"name": "JUMP",
											"source": 3,
											"value": "[out]"
										},
										{
											"begin": 3861,
											"end": 4084,
											"name": "tag",
											"source": 3,
											"value": "277"
										},
										{
											"begin": 3861,
											"end": 4084,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 3994,
											"end": 4006,
											"name": "PUSH",
											"source": 3,
											"value": "60"
										},
										{
											"begin": 4025,
											"end": 4077,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "294"
										},
										{
											"begin": 4047,
											"end": 4053,
											"name": "DUP5",
											"source": 3
										},
										{
											"begin": 4055,
											"end": 4059,
											"name": "DUP5",
											"source": 3
										},
										{
											"begin": 4061,
											"end": 4062,
											"name": "PUSH",
											"source": 3,
											"value": "0"
										},
										{
											"begin": 4064,
											"end": 4076,
											"name": "DUP6",
											"source": 3
										},
										{
											"begin": 4025,
											"end": 4046,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "295"
										},
										{
											"begin": 4025,
											"end": 4077,
											"name": "JUMP",
											"source": 3,
											"value": "[in]"
										},
										{
											"begin": 4025,
											"end": 4077,
											"name": "tag",
											"source": 3,
											"value": "294"
										},
										{
											"begin": 4025,
											"end": 4077,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 4018,
											"end": 4077,
											"name": "SWAP1",
											"source": 3
										},
										{
											"begin": 4018,
											"end": 4077,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 3861,
											"end": 4084,
											"name": "SWAP4",
											"source": 3
										},
										{
											"begin": 3861,
											"end": 4084,
											"name": "SWAP3",
											"source": 3
										},
										{
											"begin": 3861,
											"end": 4084,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 3861,
											"end": 4084,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 3861,
											"end": 4084,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 3861,
											"end": 4084,
											"name": "JUMP",
											"source": 3,
											"value": "[out]"
										},
										{
											"begin": 4948,
											"end": 5447,
											"name": "tag",
											"source": 3,
											"value": "295"
										},
										{
											"begin": 4948,
											"end": 5447,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 5113,
											"end": 5125,
											"name": "PUSH",
											"source": 3,
											"value": "60"
										},
										{
											"begin": 5170,
											"end": 5175,
											"name": "DUP3",
											"source": 3
										},
										{
											"begin": 5145,
											"end": 5166,
											"name": "SELFBALANCE",
											"source": 3
										},
										{
											"begin": 5145,
											"end": 5175,
											"name": "LT",
											"source": 3
										},
										{
											"begin": 5145,
											"end": 5175,
											"name": "ISZERO",
											"source": 3
										},
										{
											"begin": 5137,
											"end": 5218,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "297"
										},
										{
											"begin": 5137,
											"end": 5218,
											"name": "JUMPI",
											"source": 3
										},
										{
											"begin": 5137,
											"end": 5218,
											"name": "PUSH",
											"source": 3,
											"value": "40"
										},
										{
											"begin": 5137,
											"end": 5218,
											"name": "MLOAD",
											"source": 3
										},
										{
											"begin": 5137,
											"end": 5218,
											"name": "PUSH",
											"source": 3,
											"value": "8C379A000000000000000000000000000000000000000000000000000000000"
										},
										{
											"begin": 5137,
											"end": 5218,
											"name": "DUP2",
											"source": 3
										},
										{
											"begin": 5137,
											"end": 5218,
											"name": "MSTORE",
											"source": 3
										},
										{
											"begin": 5137,
											"end": 5218,
											"name": "PUSH",
											"source": 3,
											"value": "4"
										},
										{
											"begin": 5137,
											"end": 5218,
											"name": "ADD",
											"source": 3
										},
										{
											"begin": 5137,
											"end": 5218,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "298"
										},
										{
											"begin": 5137,
											"end": 5218,
											"name": "SWAP1",
											"source": 3
										},
										{
											"begin": 5137,
											"end": 5218,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "299"
										},
										{
											"begin": 5137,
											"end": 5218,
											"name": "JUMP",
											"source": 3,
											"value": "[in]"
										},
										{
											"begin": 5137,
											"end": 5218,
											"name": "tag",
											"source": 3,
											"value": "298"
										},
										{
											"begin": 5137,
											"end": 5218,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 5137,
											"end": 5218,
											"name": "PUSH",
											"source": 3,
											"value": "40"
										},
										{
											"begin": 5137,
											"end": 5218,
											"name": "MLOAD",
											"source": 3
										},
										{
											"begin": 5137,
											"end": 5218,
											"name": "DUP1",
											"source": 3
										},
										{
											"begin": 5137,
											"end": 5218,
											"name": "SWAP2",
											"source": 3
										},
										{
											"begin": 5137,
											"end": 5218,
											"name": "SUB",
											"source": 3
										},
										{
											"begin": 5137,
											"end": 5218,
											"name": "SWAP1",
											"source": 3
										},
										{
											"begin": 5137,
											"end": 5218,
											"name": "REVERT",
											"source": 3
										},
										{
											"begin": 5137,
											"end": 5218,
											"name": "tag",
											"source": 3,
											"value": "297"
										},
										{
											"begin": 5137,
											"end": 5218,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 5236,
											"end": 5254,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "300"
										},
										{
											"begin": 5247,
											"end": 5253,
											"name": "DUP6",
											"source": 3
										},
										{
											"begin": 5236,
											"end": 5246,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "264"
										},
										{
											"begin": 5236,
											"end": 5254,
											"name": "JUMP",
											"source": 3,
											"value": "[in]"
										},
										{
											"begin": 5236,
											"end": 5254,
											"name": "tag",
											"source": 3,
											"value": "300"
										},
										{
											"begin": 5236,
											"end": 5254,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 5228,
											"end": 5288,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "301"
										},
										{
											"begin": 5228,
											"end": 5288,
											"name": "JUMPI",
											"source": 3
										},
										{
											"begin": 5228,
											"end": 5288,
											"name": "PUSH",
											"source": 3,
											"value": "40"
										},
										{
											"begin": 5228,
											"end": 5288,
											"name": "MLOAD",
											"source": 3
										},
										{
											"begin": 5228,
											"end": 5288,
											"name": "PUSH",
											"source": 3,
											"value": "8C379A000000000000000000000000000000000000000000000000000000000"
										},
										{
											"begin": 5228,
											"end": 5288,
											"name": "DUP2",
											"source": 3
										},
										{
											"begin": 5228,
											"end": 5288,
											"name": "MSTORE",
											"source": 3
										},
										{
											"begin": 5228,
											"end": 5288,
											"name": "PUSH",
											"source": 3,
											"value": "4"
										},
										{
											"begin": 5228,
											"end": 5288,
											"name": "ADD",
											"source": 3
										},
										{
											"begin": 5228,
											"end": 5288,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "302"
										},
										{
											"begin": 5228,
											"end": 5288,
											"name": "SWAP1",
											"source": 3
										},
										{
											"begin": 5228,
											"end": 5288,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "303"
										},
										{
											"begin": 5228,
											"end": 5288,
											"name": "JUMP",
											"source": 3,
											"value": "[in]"
										},
										{
											"begin": 5228,
											"end": 5288,
											"name": "tag",
											"source": 3,
											"value": "302"
										},
										{
											"begin": 5228,
											"end": 5288,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 5228,
											"end": 5288,
											"name": "PUSH",
											"source": 3,
											"value": "40"
										},
										{
											"begin": 5228,
											"end": 5288,
											"name": "MLOAD",
											"source": 3
										},
										{
											"begin": 5228,
											"end": 5288,
											"name": "DUP1",
											"source": 3
										},
										{
											"begin": 5228,
											"end": 5288,
											"name": "SWAP2",
											"source": 3
										},
										{
											"begin": 5228,
											"end": 5288,
											"name": "SUB",
											"source": 3
										},
										{
											"begin": 5228,
											"end": 5288,
											"name": "SWAP1",
											"source": 3
										},
										{
											"begin": 5228,
											"end": 5288,
											"name": "REVERT",
											"source": 3
										},
										{
											"begin": 5228,
											"end": 5288,
											"name": "tag",
											"source": 3,
											"value": "301"
										},
										{
											"begin": 5228,
											"end": 5288,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 5300,
											"end": 5312,
											"name": "PUSH",
											"source": 3,
											"value": "0"
										},
										{
											"begin": 5314,
											"end": 5337,
											"name": "DUP1",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5347,
											"name": "DUP7",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5352,
											"name": "PUSH",
											"source": 3,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 5341,
											"end": 5352,
											"name": "AND",
											"source": 3
										},
										{
											"begin": 5360,
											"end": 5365,
											"name": "DUP6",
											"source": 3
										},
										{
											"begin": 5367,
											"end": 5371,
											"name": "DUP8",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "PUSH",
											"source": 3,
											"value": "40"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "MLOAD",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "304"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "SWAP2",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "SWAP1",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "269"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "JUMP",
											"source": 3,
											"value": "[in]"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "tag",
											"source": 3,
											"value": "304"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "PUSH",
											"source": 3,
											"value": "0"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "PUSH",
											"source": 3,
											"value": "40"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "MLOAD",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "DUP1",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "DUP4",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "SUB",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "DUP2",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "DUP6",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "DUP8",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "GAS",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "CALL",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "SWAP3",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "RETURNDATASIZE",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "DUP1",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "PUSH",
											"source": 3,
											"value": "0"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "DUP2",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "EQ",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "307"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "JUMPI",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "PUSH",
											"source": 3,
											"value": "40"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "MLOAD",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "SWAP2",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "PUSH",
											"source": 3,
											"value": "1F"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "NOT",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "PUSH",
											"source": 3,
											"value": "3F"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "RETURNDATASIZE",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "ADD",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "AND",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "DUP3",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "ADD",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "PUSH",
											"source": 3,
											"value": "40"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "MSTORE",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "RETURNDATASIZE",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "DUP3",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "MSTORE",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "RETURNDATASIZE",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "PUSH",
											"source": 3,
											"value": "0"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "PUSH",
											"source": 3,
											"value": "20"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "DUP5",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "ADD",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "RETURNDATACOPY",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "306"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "JUMP",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "tag",
											"source": 3,
											"value": "307"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "PUSH",
											"source": 3,
											"value": "60"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "SWAP2",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "tag",
											"source": 3,
											"value": "306"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 5299,
											"end": 5372,
											"name": "SWAP2",
											"source": 3
										},
										{
											"begin": 5299,
											"end": 5372,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 5299,
											"end": 5372,
											"name": "SWAP2",
											"source": 3
										},
										{
											"begin": 5299,
											"end": 5372,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 5389,
											"end": 5440,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "308"
										},
										{
											"begin": 5406,
											"end": 5413,
											"name": "DUP3",
											"source": 3
										},
										{
											"begin": 5415,
											"end": 5425,
											"name": "DUP3",
											"source": 3
										},
										{
											"begin": 5427,
											"end": 5439,
											"name": "DUP7",
											"source": 3
										},
										{
											"begin": 5389,
											"end": 5405,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "274"
										},
										{
											"begin": 5389,
											"end": 5440,
											"name": "JUMP",
											"source": 3,
											"value": "[in]"
										},
										{
											"begin": 5389,
											"end": 5440,
											"name": "tag",
											"source": 3,
											"value": "308"
										},
										{
											"begin": 5389,
											"end": 5440,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 5382,
											"end": 5440,
											"name": "SWAP3",
											"source": 3
										},
										{
											"begin": 5382,
											"end": 5440,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 5382,
											"end": 5440,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 5382,
											"end": 5440,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 4948,
											"end": 5447,
											"name": "SWAP5",
											"source": 3
										},
										{
											"begin": 4948,
											"end": 5447,
											"name": "SWAP4",
											"source": 3
										},
										{
											"begin": 4948,
											"end": 5447,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 4948,
											"end": 5447,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 4948,
											"end": 5447,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 4948,
											"end": 5447,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 4948,
											"end": 5447,
											"name": "JUMP",
											"source": 3,
											"value": "[out]"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "tag",
											"source": -1,
											"value": "124"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "JUMPDEST",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "40"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "MLOAD",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "DUP1",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "40"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "ADD",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "40"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "MSTORE",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "DUP1",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "AND",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "DUP2",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "MSTORE",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "20"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "ADD",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "FFFFFFFFFFFFFFFF"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "AND",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "DUP2",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "MSTORE",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "POP",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SWAP1",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "JUMP",
											"source": -1,
											"value": "[out]"
										},
										{
											"begin": 7,
											"end": 146,
											"name": "tag",
											"source": 19,
											"value": "310"
										},
										{
											"begin": 7,
											"end": 146,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 53,
											"end": 58,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 91,
											"end": 97,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 78,
											"end": 98,
											"name": "CALLDATALOAD",
											"source": 19
										},
										{
											"begin": 69,
											"end": 98,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 69,
											"end": 98,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 107,
											"end": 140,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "312"
										},
										{
											"begin": 134,
											"end": 139,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 107,
											"end": 140,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "313"
										},
										{
											"begin": 107,
											"end": 140,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 107,
											"end": 140,
											"name": "tag",
											"source": 19,
											"value": "312"
										},
										{
											"begin": 107,
											"end": 140,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 59,
											"end": 146,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 59,
											"end": 146,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 59,
											"end": 146,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 59,
											"end": 146,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 59,
											"end": 146,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 167,
											"end": 746,
											"name": "tag",
											"source": 19,
											"value": "314"
										},
										{
											"begin": 167,
											"end": 746,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 251,
											"end": 259,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 261,
											"end": 267,
											"name": "DUP1",
											"source": 19
										},
										{
											"begin": 311,
											"end": 314,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 304,
											"end": 308,
											"name": "PUSH",
											"source": 19,
											"value": "1F"
										},
										{
											"begin": 296,
											"end": 302,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 292,
											"end": 309,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 288,
											"end": 315,
											"name": "SLT",
											"source": 19
										},
										{
											"begin": 278,
											"end": 280,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "316"
										},
										{
											"begin": 278,
											"end": 280,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 319,
											"end": 398,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "317"
										},
										{
											"begin": 319,
											"end": 398,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "318"
										},
										{
											"begin": 319,
											"end": 398,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 319,
											"end": 398,
											"name": "tag",
											"source": 19,
											"value": "317"
										},
										{
											"begin": 319,
											"end": 398,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 278,
											"end": 280,
											"name": "tag",
											"source": 19,
											"value": "316"
										},
										{
											"begin": 278,
											"end": 280,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 432,
											"end": 438,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 419,
											"end": 439,
											"name": "CALLDATALOAD",
											"source": 19
										},
										{
											"begin": 409,
											"end": 439,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 409,
											"end": 439,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 462,
											"end": 480,
											"name": "PUSH",
											"source": 19,
											"value": "FFFFFFFFFFFFFFFF"
										},
										{
											"begin": 454,
											"end": 460,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 451,
											"end": 481,
											"name": "GT",
											"source": 19
										},
										{
											"begin": 448,
											"end": 450,
											"name": "ISZERO",
											"source": 19
										},
										{
											"begin": 448,
											"end": 450,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "319"
										},
										{
											"begin": 448,
											"end": 450,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 484,
											"end": 563,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "320"
										},
										{
											"begin": 484,
											"end": 563,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "321"
										},
										{
											"begin": 484,
											"end": 563,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 484,
											"end": 563,
											"name": "tag",
											"source": 19,
											"value": "320"
										},
										{
											"begin": 484,
											"end": 563,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 448,
											"end": 450,
											"name": "tag",
											"source": 19,
											"value": "319"
										},
										{
											"begin": 448,
											"end": 450,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 598,
											"end": 602,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 590,
											"end": 596,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 586,
											"end": 603,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 574,
											"end": 603,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 574,
											"end": 603,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 652,
											"end": 655,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 644,
											"end": 648,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 636,
											"end": 642,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 632,
											"end": 649,
											"name": "MUL",
											"source": 19
										},
										{
											"begin": 622,
											"end": 630,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 618,
											"end": 650,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 615,
											"end": 656,
											"name": "GT",
											"source": 19
										},
										{
											"begin": 612,
											"end": 614,
											"name": "ISZERO",
											"source": 19
										},
										{
											"begin": 612,
											"end": 614,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "322"
										},
										{
											"begin": 612,
											"end": 614,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 659,
											"end": 738,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "323"
										},
										{
											"begin": 659,
											"end": 738,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "324"
										},
										{
											"begin": 659,
											"end": 738,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 659,
											"end": 738,
											"name": "tag",
											"source": 19,
											"value": "323"
										},
										{
											"begin": 659,
											"end": 738,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 612,
											"end": 614,
											"name": "tag",
											"source": 19,
											"value": "322"
										},
										{
											"begin": 612,
											"end": 614,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 268,
											"end": 746,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 268,
											"end": 746,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 268,
											"end": 746,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 268,
											"end": 746,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 268,
											"end": 746,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 268,
											"end": 746,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 752,
											"end": 889,
											"name": "tag",
											"source": 19,
											"value": "325"
										},
										{
											"begin": 752,
											"end": 889,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 806,
											"end": 811,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 837,
											"end": 843,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 831,
											"end": 844,
											"name": "MLOAD",
											"source": 19
										},
										{
											"begin": 822,
											"end": 844,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 822,
											"end": 844,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 853,
											"end": 883,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "327"
										},
										{
											"begin": 877,
											"end": 882,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 853,
											"end": 883,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "328"
										},
										{
											"begin": 853,
											"end": 883,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 853,
											"end": 883,
											"name": "tag",
											"source": 19,
											"value": "327"
										},
										{
											"begin": 853,
											"end": 883,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 812,
											"end": 889,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 812,
											"end": 889,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 812,
											"end": 889,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 812,
											"end": 889,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 812,
											"end": 889,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 895,
											"end": 1060,
											"name": "tag",
											"source": 19,
											"value": "329"
										},
										{
											"begin": 895,
											"end": 1060,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 954,
											"end": 959,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 992,
											"end": 998,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 979,
											"end": 999,
											"name": "CALLDATALOAD",
											"source": 19
										},
										{
											"begin": 970,
											"end": 999,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 970,
											"end": 999,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 1008,
											"end": 1054,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "331"
										},
										{
											"begin": 1048,
											"end": 1053,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 1008,
											"end": 1054,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "332"
										},
										{
											"begin": 1008,
											"end": 1054,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 1008,
											"end": 1054,
											"name": "tag",
											"source": 19,
											"value": "331"
										},
										{
											"begin": 1008,
											"end": 1054,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 960,
											"end": 1060,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 960,
											"end": 1060,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 960,
											"end": 1060,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 960,
											"end": 1060,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 960,
											"end": 1060,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 1066,
											"end": 1243,
											"name": "tag",
											"source": 19,
											"value": "333"
										},
										{
											"begin": 1066,
											"end": 1243,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 1131,
											"end": 1136,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 1169,
											"end": 1175,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 1156,
											"end": 1176,
											"name": "CALLDATALOAD",
											"source": 19
										},
										{
											"begin": 1147,
											"end": 1176,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 1147,
											"end": 1176,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 1185,
											"end": 1237,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "335"
										},
										{
											"begin": 1231,
											"end": 1236,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 1185,
											"end": 1237,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "336"
										},
										{
											"begin": 1185,
											"end": 1237,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 1185,
											"end": 1237,
											"name": "tag",
											"source": 19,
											"value": "335"
										},
										{
											"begin": 1185,
											"end": 1237,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 1137,
											"end": 1243,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 1137,
											"end": 1243,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 1137,
											"end": 1243,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 1137,
											"end": 1243,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 1137,
											"end": 1243,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 1249,
											"end": 1420,
											"name": "tag",
											"source": 19,
											"value": "337"
										},
										{
											"begin": 1249,
											"end": 1420,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 1311,
											"end": 1316,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 1349,
											"end": 1355,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 1336,
											"end": 1356,
											"name": "CALLDATALOAD",
											"source": 19
										},
										{
											"begin": 1327,
											"end": 1356,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 1327,
											"end": 1356,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 1365,
											"end": 1414,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "339"
										},
										{
											"begin": 1408,
											"end": 1413,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 1365,
											"end": 1414,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "340"
										},
										{
											"begin": 1365,
											"end": 1414,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 1365,
											"end": 1414,
											"name": "tag",
											"source": 19,
											"value": "339"
										},
										{
											"begin": 1365,
											"end": 1414,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 1317,
											"end": 1420,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 1317,
											"end": 1420,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 1317,
											"end": 1420,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 1317,
											"end": 1420,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 1317,
											"end": 1420,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 1464,
											"end": 2060,
											"name": "tag",
											"source": 19,
											"value": "341"
										},
										{
											"begin": 1464,
											"end": 2060,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 1542,
											"end": 1547,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 1586,
											"end": 1590,
											"name": "PUSH",
											"source": 19,
											"value": "40"
										},
										{
											"begin": 1574,
											"end": 1583,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 1569,
											"end": 1572,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 1565,
											"end": 1584,
											"name": "SUB",
											"source": 19
										},
										{
											"begin": 1561,
											"end": 1591,
											"name": "SLT",
											"source": 19
										},
										{
											"begin": 1558,
											"end": 1560,
											"name": "ISZERO",
											"source": 19
										},
										{
											"begin": 1558,
											"end": 1560,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "343"
										},
										{
											"begin": 1558,
											"end": 1560,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 1594,
											"end": 1673,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "344"
										},
										{
											"begin": 1594,
											"end": 1673,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "345"
										},
										{
											"begin": 1594,
											"end": 1673,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 1594,
											"end": 1673,
											"name": "tag",
											"source": 19,
											"value": "344"
										},
										{
											"begin": 1594,
											"end": 1673,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 1558,
											"end": 1560,
											"name": "tag",
											"source": 19,
											"value": "343"
										},
										{
											"begin": 1558,
											"end": 1560,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 1693,
											"end": 1714,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "346"
										},
										{
											"begin": 1709,
											"end": 1713,
											"name": "PUSH",
											"source": 19,
											"value": "40"
										},
										{
											"begin": 1693,
											"end": 1714,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "347"
										},
										{
											"begin": 1693,
											"end": 1714,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 1693,
											"end": 1714,
											"name": "tag",
											"source": 19,
											"value": "346"
										},
										{
											"begin": 1693,
											"end": 1714,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 1684,
											"end": 1714,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 1684,
											"end": 1714,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 1774,
											"end": 1775,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 1814,
											"end": 1876,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "348"
										},
										{
											"begin": 1872,
											"end": 1875,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 1863,
											"end": 1869,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 1852,
											"end": 1861,
											"name": "DUP6",
											"source": 19
										},
										{
											"begin": 1848,
											"end": 1870,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 1814,
											"end": 1876,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "329"
										},
										{
											"begin": 1814,
											"end": 1876,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 1814,
											"end": 1876,
											"name": "tag",
											"source": 19,
											"value": "348"
										},
										{
											"begin": 1814,
											"end": 1876,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 1807,
											"end": 1811,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 1800,
											"end": 1805,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 1796,
											"end": 1812,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 1789,
											"end": 1877,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 1724,
											"end": 1888,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 1952,
											"end": 1954,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 1993,
											"end": 2041,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "349"
										},
										{
											"begin": 2037,
											"end": 2040,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 2028,
											"end": 2034,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 2017,
											"end": 2026,
											"name": "DUP6",
											"source": 19
										},
										{
											"begin": 2013,
											"end": 2035,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 1993,
											"end": 2041,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "350"
										},
										{
											"begin": 1993,
											"end": 2041,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 1993,
											"end": 2041,
											"name": "tag",
											"source": 19,
											"value": "349"
										},
										{
											"begin": 1993,
											"end": 2041,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 1986,
											"end": 1990,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 1979,
											"end": 1984,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 1975,
											"end": 1991,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 1968,
											"end": 2042,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 1898,
											"end": 2053,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 1548,
											"end": 2060,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 1548,
											"end": 2060,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 1548,
											"end": 2060,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 1548,
											"end": 2060,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 1548,
											"end": 2060,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 2066,
											"end": 2205,
											"name": "tag",
											"source": 19,
											"value": "351"
										},
										{
											"begin": 2066,
											"end": 2205,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 2112,
											"end": 2117,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 2150,
											"end": 2156,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 2137,
											"end": 2157,
											"name": "CALLDATALOAD",
											"source": 19
										},
										{
											"begin": 2128,
											"end": 2157,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 2128,
											"end": 2157,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 2166,
											"end": 2199,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "353"
										},
										{
											"begin": 2193,
											"end": 2198,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 2166,
											"end": 2199,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "354"
										},
										{
											"begin": 2166,
											"end": 2199,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 2166,
											"end": 2199,
											"name": "tag",
											"source": 19,
											"value": "353"
										},
										{
											"begin": 2166,
											"end": 2199,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 2118,
											"end": 2205,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 2118,
											"end": 2205,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 2118,
											"end": 2205,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 2118,
											"end": 2205,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 2118,
											"end": 2205,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 2211,
											"end": 2354,
											"name": "tag",
											"source": 19,
											"value": "355"
										},
										{
											"begin": 2211,
											"end": 2354,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 2268,
											"end": 2273,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 2299,
											"end": 2305,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 2293,
											"end": 2306,
											"name": "MLOAD",
											"source": 19
										},
										{
											"begin": 2284,
											"end": 2306,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 2284,
											"end": 2306,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 2315,
											"end": 2348,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "357"
										},
										{
											"begin": 2342,
											"end": 2347,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 2315,
											"end": 2348,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "354"
										},
										{
											"begin": 2315,
											"end": 2348,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 2315,
											"end": 2348,
											"name": "tag",
											"source": 19,
											"value": "357"
										},
										{
											"begin": 2315,
											"end": 2348,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 2274,
											"end": 2354,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 2274,
											"end": 2354,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 2274,
											"end": 2354,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 2274,
											"end": 2354,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 2274,
											"end": 2354,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 2360,
											"end": 2497,
											"name": "tag",
											"source": 19,
											"value": "350"
										},
										{
											"begin": 2360,
											"end": 2497,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 2405,
											"end": 2410,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 2443,
											"end": 2449,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 2430,
											"end": 2450,
											"name": "CALLDATALOAD",
											"source": 19
										},
										{
											"begin": 2421,
											"end": 2450,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 2421,
											"end": 2450,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 2459,
											"end": 2491,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "359"
										},
										{
											"begin": 2485,
											"end": 2490,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 2459,
											"end": 2491,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "360"
										},
										{
											"begin": 2459,
											"end": 2491,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 2459,
											"end": 2491,
											"name": "tag",
											"source": 19,
											"value": "359"
										},
										{
											"begin": 2459,
											"end": 2491,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 2411,
											"end": 2497,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 2411,
											"end": 2497,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 2411,
											"end": 2497,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 2411,
											"end": 2497,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 2411,
											"end": 2497,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 2503,
											"end": 2832,
											"name": "tag",
											"source": 19,
											"value": "50"
										},
										{
											"begin": 2503,
											"end": 2832,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 2562,
											"end": 2568,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 2611,
											"end": 2613,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 2599,
											"end": 2608,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 2590,
											"end": 2597,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 2586,
											"end": 2609,
											"name": "SUB",
											"source": 19
										},
										{
											"begin": 2582,
											"end": 2614,
											"name": "SLT",
											"source": 19
										},
										{
											"begin": 2579,
											"end": 2581,
											"name": "ISZERO",
											"source": 19
										},
										{
											"begin": 2579,
											"end": 2581,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "362"
										},
										{
											"begin": 2579,
											"end": 2581,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 2617,
											"end": 2696,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "363"
										},
										{
											"begin": 2617,
											"end": 2696,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "364"
										},
										{
											"begin": 2617,
											"end": 2696,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 2617,
											"end": 2696,
											"name": "tag",
											"source": 19,
											"value": "363"
										},
										{
											"begin": 2617,
											"end": 2696,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 2579,
											"end": 2581,
											"name": "tag",
											"source": 19,
											"value": "362"
										},
										{
											"begin": 2579,
											"end": 2581,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 2737,
											"end": 2738,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 2762,
											"end": 2815,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "365"
										},
										{
											"begin": 2807,
											"end": 2814,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 2798,
											"end": 2804,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 2787,
											"end": 2796,
											"name": "DUP6",
											"source": 19
										},
										{
											"begin": 2783,
											"end": 2805,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 2762,
											"end": 2815,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "310"
										},
										{
											"begin": 2762,
											"end": 2815,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 2762,
											"end": 2815,
											"name": "tag",
											"source": 19,
											"value": "365"
										},
										{
											"begin": 2762,
											"end": 2815,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 2752,
											"end": 2815,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 2752,
											"end": 2815,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 2708,
											"end": 2825,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 2569,
											"end": 2832,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 2569,
											"end": 2832,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 2569,
											"end": 2832,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 2569,
											"end": 2832,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 2569,
											"end": 2832,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 2838,
											"end": 3312,
											"name": "tag",
											"source": 19,
											"value": "40"
										},
										{
											"begin": 2838,
											"end": 3312,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 2906,
											"end": 2912,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 2914,
											"end": 2920,
											"name": "DUP1",
											"source": 19
										},
										{
											"begin": 2963,
											"end": 2965,
											"name": "PUSH",
											"source": 19,
											"value": "40"
										},
										{
											"begin": 2951,
											"end": 2960,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 2942,
											"end": 2949,
											"name": "DUP6",
											"source": 19
										},
										{
											"begin": 2938,
											"end": 2961,
											"name": "SUB",
											"source": 19
										},
										{
											"begin": 2934,
											"end": 2966,
											"name": "SLT",
											"source": 19
										},
										{
											"begin": 2931,
											"end": 2933,
											"name": "ISZERO",
											"source": 19
										},
										{
											"begin": 2931,
											"end": 2933,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "367"
										},
										{
											"begin": 2931,
											"end": 2933,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 2969,
											"end": 3048,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "368"
										},
										{
											"begin": 2969,
											"end": 3048,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "364"
										},
										{
											"begin": 2969,
											"end": 3048,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 2969,
											"end": 3048,
											"name": "tag",
											"source": 19,
											"value": "368"
										},
										{
											"begin": 2969,
											"end": 3048,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 2931,
											"end": 2933,
											"name": "tag",
											"source": 19,
											"value": "367"
										},
										{
											"begin": 2931,
											"end": 2933,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 3089,
											"end": 3090,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 3114,
											"end": 3167,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "369"
										},
										{
											"begin": 3159,
											"end": 3166,
											"name": "DUP6",
											"source": 19
										},
										{
											"begin": 3150,
											"end": 3156,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 3139,
											"end": 3148,
											"name": "DUP7",
											"source": 19
										},
										{
											"begin": 3135,
											"end": 3157,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 3114,
											"end": 3167,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "310"
										},
										{
											"begin": 3114,
											"end": 3167,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 3114,
											"end": 3167,
											"name": "tag",
											"source": 19,
											"value": "369"
										},
										{
											"begin": 3114,
											"end": 3167,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 3104,
											"end": 3167,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 3104,
											"end": 3167,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 3060,
											"end": 3177,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 3216,
											"end": 3218,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 3242,
											"end": 3295,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "370"
										},
										{
											"begin": 3287,
											"end": 3294,
											"name": "DUP6",
											"source": 19
										},
										{
											"begin": 3278,
											"end": 3284,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 3267,
											"end": 3276,
											"name": "DUP7",
											"source": 19
										},
										{
											"begin": 3263,
											"end": 3285,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 3242,
											"end": 3295,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "310"
										},
										{
											"begin": 3242,
											"end": 3295,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 3242,
											"end": 3295,
											"name": "tag",
											"source": 19,
											"value": "370"
										},
										{
											"begin": 3242,
											"end": 3295,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 3232,
											"end": 3295,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 3232,
											"end": 3295,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 3187,
											"end": 3305,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 2921,
											"end": 3312,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 2921,
											"end": 3312,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 2921,
											"end": 3312,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 2921,
											"end": 3312,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 2921,
											"end": 3312,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 2921,
											"end": 3312,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 3318,
											"end": 3937,
											"name": "tag",
											"source": 19,
											"value": "56"
										},
										{
											"begin": 3318,
											"end": 3937,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 3395,
											"end": 3401,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 3403,
											"end": 3409,
											"name": "DUP1",
											"source": 19
										},
										{
											"begin": 3411,
											"end": 3417,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 3460,
											"end": 3462,
											"name": "PUSH",
											"source": 19,
											"value": "60"
										},
										{
											"begin": 3448,
											"end": 3457,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 3439,
											"end": 3446,
											"name": "DUP7",
											"source": 19
										},
										{
											"begin": 3435,
											"end": 3458,
											"name": "SUB",
											"source": 19
										},
										{
											"begin": 3431,
											"end": 3463,
											"name": "SLT",
											"source": 19
										},
										{
											"begin": 3428,
											"end": 3430,
											"name": "ISZERO",
											"source": 19
										},
										{
											"begin": 3428,
											"end": 3430,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "372"
										},
										{
											"begin": 3428,
											"end": 3430,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 3466,
											"end": 3545,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "373"
										},
										{
											"begin": 3466,
											"end": 3545,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "364"
										},
										{
											"begin": 3466,
											"end": 3545,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 3466,
											"end": 3545,
											"name": "tag",
											"source": 19,
											"value": "373"
										},
										{
											"begin": 3466,
											"end": 3545,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 3428,
											"end": 3430,
											"name": "tag",
											"source": 19,
											"value": "372"
										},
										{
											"begin": 3428,
											"end": 3430,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 3586,
											"end": 3587,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 3611,
											"end": 3664,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "374"
										},
										{
											"begin": 3656,
											"end": 3663,
											"name": "DUP7",
											"source": 19
										},
										{
											"begin": 3647,
											"end": 3653,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 3636,
											"end": 3645,
											"name": "DUP8",
											"source": 19
										},
										{
											"begin": 3632,
											"end": 3654,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 3611,
											"end": 3664,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "310"
										},
										{
											"begin": 3611,
											"end": 3664,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 3611,
											"end": 3664,
											"name": "tag",
											"source": 19,
											"value": "374"
										},
										{
											"begin": 3611,
											"end": 3664,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 3601,
											"end": 3664,
											"name": "SWAP4",
											"source": 19
										},
										{
											"begin": 3601,
											"end": 3664,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 3557,
											"end": 3674,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 3713,
											"end": 3715,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 3739,
											"end": 3792,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "375"
										},
										{
											"begin": 3784,
											"end": 3791,
											"name": "DUP7",
											"source": 19
										},
										{
											"begin": 3775,
											"end": 3781,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 3764,
											"end": 3773,
											"name": "DUP8",
											"source": 19
										},
										{
											"begin": 3760,
											"end": 3782,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 3739,
											"end": 3792,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "310"
										},
										{
											"begin": 3739,
											"end": 3792,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 3739,
											"end": 3792,
											"name": "tag",
											"source": 19,
											"value": "375"
										},
										{
											"begin": 3739,
											"end": 3792,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 3729,
											"end": 3792,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 3729,
											"end": 3792,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 3684,
											"end": 3802,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 3841,
											"end": 3843,
											"name": "PUSH",
											"source": 19,
											"value": "40"
										},
										{
											"begin": 3867,
											"end": 3920,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "376"
										},
										{
											"begin": 3912,
											"end": 3919,
											"name": "DUP7",
											"source": 19
										},
										{
											"begin": 3903,
											"end": 3909,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 3892,
											"end": 3901,
											"name": "DUP8",
											"source": 19
										},
										{
											"begin": 3888,
											"end": 3910,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 3867,
											"end": 3920,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "310"
										},
										{
											"begin": 3867,
											"end": 3920,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 3867,
											"end": 3920,
											"name": "tag",
											"source": 19,
											"value": "376"
										},
										{
											"begin": 3867,
											"end": 3920,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 3857,
											"end": 3920,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 3857,
											"end": 3920,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 3812,
											"end": 3930,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 3418,
											"end": 3937,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 3418,
											"end": 3937,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 3418,
											"end": 3937,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 3418,
											"end": 3937,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 3418,
											"end": 3937,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 3418,
											"end": 3937,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 3943,
											"end": 4732,
											"name": "tag",
											"source": 19,
											"value": "82"
										},
										{
											"begin": 3943,
											"end": 4732,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 4041,
											"end": 4047,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 4049,
											"end": 4055,
											"name": "DUP1",
											"source": 19
										},
										{
											"begin": 4057,
											"end": 4063,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 4065,
											"end": 4071,
											"name": "DUP1",
											"source": 19
										},
										{
											"begin": 4114,
											"end": 4117,
											"name": "PUSH",
											"source": 19,
											"value": "80"
										},
										{
											"begin": 4102,
											"end": 4111,
											"name": "DUP6",
											"source": 19
										},
										{
											"begin": 4093,
											"end": 4100,
											"name": "DUP8",
											"source": 19
										},
										{
											"begin": 4089,
											"end": 4112,
											"name": "SUB",
											"source": 19
										},
										{
											"begin": 4085,
											"end": 4118,
											"name": "SLT",
											"source": 19
										},
										{
											"begin": 4082,
											"end": 4084,
											"name": "ISZERO",
											"source": 19
										},
										{
											"begin": 4082,
											"end": 4084,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "378"
										},
										{
											"begin": 4082,
											"end": 4084,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 4121,
											"end": 4200,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "379"
										},
										{
											"begin": 4121,
											"end": 4200,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "364"
										},
										{
											"begin": 4121,
											"end": 4200,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 4121,
											"end": 4200,
											"name": "tag",
											"source": 19,
											"value": "379"
										},
										{
											"begin": 4121,
											"end": 4200,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 4082,
											"end": 4084,
											"name": "tag",
											"source": 19,
											"value": "378"
										},
										{
											"begin": 4082,
											"end": 4084,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 4241,
											"end": 4242,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 4266,
											"end": 4319,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "380"
										},
										{
											"begin": 4311,
											"end": 4318,
											"name": "DUP8",
											"source": 19
										},
										{
											"begin": 4302,
											"end": 4308,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 4291,
											"end": 4300,
											"name": "DUP9",
											"source": 19
										},
										{
											"begin": 4287,
											"end": 4309,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 4266,
											"end": 4319,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "310"
										},
										{
											"begin": 4266,
											"end": 4319,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 4266,
											"end": 4319,
											"name": "tag",
											"source": 19,
											"value": "380"
										},
										{
											"begin": 4266,
											"end": 4319,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 4256,
											"end": 4319,
											"name": "SWAP5",
											"source": 19
										},
										{
											"begin": 4256,
											"end": 4319,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 4212,
											"end": 4329,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 4368,
											"end": 4370,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 4394,
											"end": 4447,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "381"
										},
										{
											"begin": 4439,
											"end": 4446,
											"name": "DUP8",
											"source": 19
										},
										{
											"begin": 4430,
											"end": 4436,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 4419,
											"end": 4428,
											"name": "DUP9",
											"source": 19
										},
										{
											"begin": 4415,
											"end": 4437,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 4394,
											"end": 4447,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "310"
										},
										{
											"begin": 4394,
											"end": 4447,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 4394,
											"end": 4447,
											"name": "tag",
											"source": 19,
											"value": "381"
										},
										{
											"begin": 4394,
											"end": 4447,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 4384,
											"end": 4447,
											"name": "SWAP4",
											"source": 19
										},
										{
											"begin": 4384,
											"end": 4447,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 4339,
											"end": 4457,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 4496,
											"end": 4498,
											"name": "PUSH",
											"source": 19,
											"value": "40"
										},
										{
											"begin": 4522,
											"end": 4588,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "382"
										},
										{
											"begin": 4580,
											"end": 4587,
											"name": "DUP8",
											"source": 19
										},
										{
											"begin": 4571,
											"end": 4577,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 4560,
											"end": 4569,
											"name": "DUP9",
											"source": 19
										},
										{
											"begin": 4556,
											"end": 4578,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 4522,
											"end": 4588,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "329"
										},
										{
											"begin": 4522,
											"end": 4588,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 4522,
											"end": 4588,
											"name": "tag",
											"source": 19,
											"value": "382"
										},
										{
											"begin": 4522,
											"end": 4588,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 4512,
											"end": 4588,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 4512,
											"end": 4588,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 4467,
											"end": 4598,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 4637,
											"end": 4639,
											"name": "PUSH",
											"source": 19,
											"value": "60"
										},
										{
											"begin": 4663,
											"end": 4715,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "383"
										},
										{
											"begin": 4707,
											"end": 4714,
											"name": "DUP8",
											"source": 19
										},
										{
											"begin": 4698,
											"end": 4704,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 4687,
											"end": 4696,
											"name": "DUP9",
											"source": 19
										},
										{
											"begin": 4683,
											"end": 4705,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 4663,
											"end": 4715,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "350"
										},
										{
											"begin": 4663,
											"end": 4715,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 4663,
											"end": 4715,
											"name": "tag",
											"source": 19,
											"value": "383"
										},
										{
											"begin": 4663,
											"end": 4715,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 4653,
											"end": 4715,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 4653,
											"end": 4715,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 4608,
											"end": 4725,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 4072,
											"end": 4732,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 4072,
											"end": 4732,
											"name": "SWAP6",
											"source": 19
										},
										{
											"begin": 4072,
											"end": 4732,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 4072,
											"end": 4732,
											"name": "SWAP5",
											"source": 19
										},
										{
											"begin": 4072,
											"end": 4732,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 4072,
											"end": 4732,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 4072,
											"end": 4732,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 4072,
											"end": 4732,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 4738,
											"end": 5357,
											"name": "tag",
											"source": 19,
											"value": "32"
										},
										{
											"begin": 4738,
											"end": 5357,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 4815,
											"end": 4821,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 4823,
											"end": 4829,
											"name": "DUP1",
											"source": 19
										},
										{
											"begin": 4831,
											"end": 4837,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 4880,
											"end": 4882,
											"name": "PUSH",
											"source": 19,
											"value": "60"
										},
										{
											"begin": 4868,
											"end": 4877,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 4859,
											"end": 4866,
											"name": "DUP7",
											"source": 19
										},
										{
											"begin": 4855,
											"end": 4878,
											"name": "SUB",
											"source": 19
										},
										{
											"begin": 4851,
											"end": 4883,
											"name": "SLT",
											"source": 19
										},
										{
											"begin": 4848,
											"end": 4850,
											"name": "ISZERO",
											"source": 19
										},
										{
											"begin": 4848,
											"end": 4850,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "385"
										},
										{
											"begin": 4848,
											"end": 4850,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 4886,
											"end": 4965,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "386"
										},
										{
											"begin": 4886,
											"end": 4965,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "364"
										},
										{
											"begin": 4886,
											"end": 4965,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 4886,
											"end": 4965,
											"name": "tag",
											"source": 19,
											"value": "386"
										},
										{
											"begin": 4886,
											"end": 4965,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 4848,
											"end": 4850,
											"name": "tag",
											"source": 19,
											"value": "385"
										},
										{
											"begin": 4848,
											"end": 4850,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 5006,
											"end": 5007,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 5031,
											"end": 5084,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "387"
										},
										{
											"begin": 5076,
											"end": 5083,
											"name": "DUP7",
											"source": 19
										},
										{
											"begin": 5067,
											"end": 5073,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 5056,
											"end": 5065,
											"name": "DUP8",
											"source": 19
										},
										{
											"begin": 5052,
											"end": 5074,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 5031,
											"end": 5084,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "310"
										},
										{
											"begin": 5031,
											"end": 5084,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 5031,
											"end": 5084,
											"name": "tag",
											"source": 19,
											"value": "387"
										},
										{
											"begin": 5031,
											"end": 5084,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 5021,
											"end": 5084,
											"name": "SWAP4",
											"source": 19
										},
										{
											"begin": 5021,
											"end": 5084,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 4977,
											"end": 5094,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 5133,
											"end": 5135,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 5159,
											"end": 5212,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "388"
										},
										{
											"begin": 5204,
											"end": 5211,
											"name": "DUP7",
											"source": 19
										},
										{
											"begin": 5195,
											"end": 5201,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 5184,
											"end": 5193,
											"name": "DUP8",
											"source": 19
										},
										{
											"begin": 5180,
											"end": 5202,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 5159,
											"end": 5212,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "310"
										},
										{
											"begin": 5159,
											"end": 5212,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 5159,
											"end": 5212,
											"name": "tag",
											"source": 19,
											"value": "388"
										},
										{
											"begin": 5159,
											"end": 5212,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 5149,
											"end": 5212,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 5149,
											"end": 5212,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 5104,
											"end": 5222,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 5261,
											"end": 5263,
											"name": "PUSH",
											"source": 19,
											"value": "40"
										},
										{
											"begin": 5287,
											"end": 5340,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "389"
										},
										{
											"begin": 5332,
											"end": 5339,
											"name": "DUP7",
											"source": 19
										},
										{
											"begin": 5323,
											"end": 5329,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 5312,
											"end": 5321,
											"name": "DUP8",
											"source": 19
										},
										{
											"begin": 5308,
											"end": 5330,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 5287,
											"end": 5340,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "351"
										},
										{
											"begin": 5287,
											"end": 5340,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 5287,
											"end": 5340,
											"name": "tag",
											"source": 19,
											"value": "389"
										},
										{
											"begin": 5287,
											"end": 5340,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 5277,
											"end": 5340,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 5277,
											"end": 5340,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 5232,
											"end": 5350,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 4838,
											"end": 5357,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 4838,
											"end": 5357,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 4838,
											"end": 5357,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 4838,
											"end": 5357,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 4838,
											"end": 5357,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 4838,
											"end": 5357,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 5363,
											"end": 5863,
											"name": "tag",
											"source": 19,
											"value": "26"
										},
										{
											"begin": 5363,
											"end": 5863,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 5444,
											"end": 5450,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 5452,
											"end": 5458,
											"name": "DUP1",
											"source": 19
										},
										{
											"begin": 5501,
											"end": 5503,
											"name": "PUSH",
											"source": 19,
											"value": "40"
										},
										{
											"begin": 5489,
											"end": 5498,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 5480,
											"end": 5487,
											"name": "DUP6",
											"source": 19
										},
										{
											"begin": 5476,
											"end": 5499,
											"name": "SUB",
											"source": 19
										},
										{
											"begin": 5472,
											"end": 5504,
											"name": "SLT",
											"source": 19
										},
										{
											"begin": 5469,
											"end": 5471,
											"name": "ISZERO",
											"source": 19
										},
										{
											"begin": 5469,
											"end": 5471,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "391"
										},
										{
											"begin": 5469,
											"end": 5471,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 5507,
											"end": 5586,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "392"
										},
										{
											"begin": 5507,
											"end": 5586,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "364"
										},
										{
											"begin": 5507,
											"end": 5586,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 5507,
											"end": 5586,
											"name": "tag",
											"source": 19,
											"value": "392"
										},
										{
											"begin": 5507,
											"end": 5586,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 5469,
											"end": 5471,
											"name": "tag",
											"source": 19,
											"value": "391"
										},
										{
											"begin": 5469,
											"end": 5471,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 5627,
											"end": 5628,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 5652,
											"end": 5705,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "393"
										},
										{
											"begin": 5697,
											"end": 5704,
											"name": "DUP6",
											"source": 19
										},
										{
											"begin": 5688,
											"end": 5694,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 5677,
											"end": 5686,
											"name": "DUP7",
											"source": 19
										},
										{
											"begin": 5673,
											"end": 5695,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 5652,
											"end": 5705,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "310"
										},
										{
											"begin": 5652,
											"end": 5705,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 5652,
											"end": 5705,
											"name": "tag",
											"source": 19,
											"value": "393"
										},
										{
											"begin": 5652,
											"end": 5705,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 5642,
											"end": 5705,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 5642,
											"end": 5705,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 5598,
											"end": 5715,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 5754,
											"end": 5756,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 5780,
											"end": 5846,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "394"
										},
										{
											"begin": 5838,
											"end": 5845,
											"name": "DUP6",
											"source": 19
										},
										{
											"begin": 5829,
											"end": 5835,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 5818,
											"end": 5827,
											"name": "DUP7",
											"source": 19
										},
										{
											"begin": 5814,
											"end": 5836,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 5780,
											"end": 5846,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "329"
										},
										{
											"begin": 5780,
											"end": 5846,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 5780,
											"end": 5846,
											"name": "tag",
											"source": 19,
											"value": "394"
										},
										{
											"begin": 5780,
											"end": 5846,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 5770,
											"end": 5846,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 5770,
											"end": 5846,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 5725,
											"end": 5856,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 5459,
											"end": 5863,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 5459,
											"end": 5863,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 5459,
											"end": 5863,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 5459,
											"end": 5863,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 5459,
											"end": 5863,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 5459,
											"end": 5863,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 5869,
											"end": 6512,
											"name": "tag",
											"source": 19,
											"value": "92"
										},
										{
											"begin": 5869,
											"end": 6512,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 5958,
											"end": 5964,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 5966,
											"end": 5972,
											"name": "DUP1",
											"source": 19
										},
										{
											"begin": 5974,
											"end": 5980,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 6023,
											"end": 6025,
											"name": "PUSH",
											"source": 19,
											"value": "60"
										},
										{
											"begin": 6011,
											"end": 6020,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 6002,
											"end": 6009,
											"name": "DUP7",
											"source": 19
										},
										{
											"begin": 5998,
											"end": 6021,
											"name": "SUB",
											"source": 19
										},
										{
											"begin": 5994,
											"end": 6026,
											"name": "SLT",
											"source": 19
										},
										{
											"begin": 5991,
											"end": 5993,
											"name": "ISZERO",
											"source": 19
										},
										{
											"begin": 5991,
											"end": 5993,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "396"
										},
										{
											"begin": 5991,
											"end": 5993,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 6029,
											"end": 6108,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "397"
										},
										{
											"begin": 6029,
											"end": 6108,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "364"
										},
										{
											"begin": 6029,
											"end": 6108,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 6029,
											"end": 6108,
											"name": "tag",
											"source": 19,
											"value": "397"
										},
										{
											"begin": 6029,
											"end": 6108,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 5991,
											"end": 5993,
											"name": "tag",
											"source": 19,
											"value": "396"
										},
										{
											"begin": 5991,
											"end": 5993,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 6149,
											"end": 6150,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 6174,
											"end": 6227,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "398"
										},
										{
											"begin": 6219,
											"end": 6226,
											"name": "DUP7",
											"source": 19
										},
										{
											"begin": 6210,
											"end": 6216,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 6199,
											"end": 6208,
											"name": "DUP8",
											"source": 19
										},
										{
											"begin": 6195,
											"end": 6217,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 6174,
											"end": 6227,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "310"
										},
										{
											"begin": 6174,
											"end": 6227,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 6174,
											"end": 6227,
											"name": "tag",
											"source": 19,
											"value": "398"
										},
										{
											"begin": 6174,
											"end": 6227,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 6164,
											"end": 6227,
											"name": "SWAP4",
											"source": 19
										},
										{
											"begin": 6164,
											"end": 6227,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 6120,
											"end": 6237,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 6276,
											"end": 6278,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 6302,
											"end": 6368,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "399"
										},
										{
											"begin": 6360,
											"end": 6367,
											"name": "DUP7",
											"source": 19
										},
										{
											"begin": 6351,
											"end": 6357,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 6340,
											"end": 6349,
											"name": "DUP8",
											"source": 19
										},
										{
											"begin": 6336,
											"end": 6358,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 6302,
											"end": 6368,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "329"
										},
										{
											"begin": 6302,
											"end": 6368,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 6302,
											"end": 6368,
											"name": "tag",
											"source": 19,
											"value": "399"
										},
										{
											"begin": 6302,
											"end": 6368,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 6292,
											"end": 6368,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 6292,
											"end": 6368,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 6247,
											"end": 6378,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 6417,
											"end": 6419,
											"name": "PUSH",
											"source": 19,
											"value": "40"
										},
										{
											"begin": 6443,
											"end": 6495,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "400"
										},
										{
											"begin": 6487,
											"end": 6494,
											"name": "DUP7",
											"source": 19
										},
										{
											"begin": 6478,
											"end": 6484,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 6467,
											"end": 6476,
											"name": "DUP8",
											"source": 19
										},
										{
											"begin": 6463,
											"end": 6485,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 6443,
											"end": 6495,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "350"
										},
										{
											"begin": 6443,
											"end": 6495,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 6443,
											"end": 6495,
											"name": "tag",
											"source": 19,
											"value": "400"
										},
										{
											"begin": 6443,
											"end": 6495,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 6433,
											"end": 6495,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 6433,
											"end": 6495,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 6388,
											"end": 6505,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 5981,
											"end": 6512,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 5981,
											"end": 6512,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 5981,
											"end": 6512,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 5981,
											"end": 6512,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 5981,
											"end": 6512,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 5981,
											"end": 6512,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 6518,
											"end": 7196,
											"name": "tag",
											"source": 19,
											"value": "87"
										},
										{
											"begin": 6518,
											"end": 7196,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 6624,
											"end": 6630,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 6632,
											"end": 6638,
											"name": "DUP1",
											"source": 19
										},
										{
											"begin": 6640,
											"end": 6646,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 6689,
											"end": 6692,
											"name": "PUSH",
											"source": 19,
											"value": "80"
										},
										{
											"begin": 6677,
											"end": 6686,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 6668,
											"end": 6675,
											"name": "DUP7",
											"source": 19
										},
										{
											"begin": 6664,
											"end": 6687,
											"name": "SUB",
											"source": 19
										},
										{
											"begin": 6660,
											"end": 6693,
											"name": "SLT",
											"source": 19
										},
										{
											"begin": 6657,
											"end": 6659,
											"name": "ISZERO",
											"source": 19
										},
										{
											"begin": 6657,
											"end": 6659,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "402"
										},
										{
											"begin": 6657,
											"end": 6659,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 6696,
											"end": 6775,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "403"
										},
										{
											"begin": 6696,
											"end": 6775,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "364"
										},
										{
											"begin": 6696,
											"end": 6775,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 6696,
											"end": 6775,
											"name": "tag",
											"source": 19,
											"value": "403"
										},
										{
											"begin": 6696,
											"end": 6775,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 6657,
											"end": 6659,
											"name": "tag",
											"source": 19,
											"value": "402"
										},
										{
											"begin": 6657,
											"end": 6659,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 6816,
											"end": 6817,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 6841,
											"end": 6894,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "404"
										},
										{
											"begin": 6886,
											"end": 6893,
											"name": "DUP7",
											"source": 19
										},
										{
											"begin": 6877,
											"end": 6883,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 6866,
											"end": 6875,
											"name": "DUP8",
											"source": 19
										},
										{
											"begin": 6862,
											"end": 6884,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 6841,
											"end": 6894,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "310"
										},
										{
											"begin": 6841,
											"end": 6894,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 6841,
											"end": 6894,
											"name": "tag",
											"source": 19,
											"value": "404"
										},
										{
											"begin": 6841,
											"end": 6894,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 6831,
											"end": 6894,
											"name": "SWAP4",
											"source": 19
										},
										{
											"begin": 6831,
											"end": 6894,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 6787,
											"end": 6904,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 6943,
											"end": 6945,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 6969,
											"end": 7051,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "405"
										},
										{
											"begin": 7043,
											"end": 7050,
											"name": "DUP7",
											"source": 19
										},
										{
											"begin": 7034,
											"end": 7040,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 7023,
											"end": 7032,
											"name": "DUP8",
											"source": 19
										},
										{
											"begin": 7019,
											"end": 7041,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 6969,
											"end": 7051,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "341"
										},
										{
											"begin": 6969,
											"end": 7051,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 6969,
											"end": 7051,
											"name": "tag",
											"source": 19,
											"value": "405"
										},
										{
											"begin": 6969,
											"end": 7051,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 6959,
											"end": 7051,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 6959,
											"end": 7051,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 6914,
											"end": 7061,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 7100,
											"end": 7102,
											"name": "PUSH",
											"source": 19,
											"value": "60"
										},
										{
											"begin": 7126,
											"end": 7179,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "406"
										},
										{
											"begin": 7171,
											"end": 7178,
											"name": "DUP7",
											"source": 19
										},
										{
											"begin": 7162,
											"end": 7168,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 7151,
											"end": 7160,
											"name": "DUP8",
											"source": 19
										},
										{
											"begin": 7147,
											"end": 7169,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 7126,
											"end": 7179,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "310"
										},
										{
											"begin": 7126,
											"end": 7179,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 7126,
											"end": 7179,
											"name": "tag",
											"source": 19,
											"value": "406"
										},
										{
											"begin": 7126,
											"end": 7179,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 7116,
											"end": 7179,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 7116,
											"end": 7179,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 7071,
											"end": 7189,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 6647,
											"end": 7196,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 6647,
											"end": 7196,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 6647,
											"end": 7196,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 6647,
											"end": 7196,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 6647,
											"end": 7196,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 6647,
											"end": 7196,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 7202,
											"end": 7676,
											"name": "tag",
											"source": 19,
											"value": "44"
										},
										{
											"begin": 7202,
											"end": 7676,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 7270,
											"end": 7276,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 7278,
											"end": 7284,
											"name": "DUP1",
											"source": 19
										},
										{
											"begin": 7327,
											"end": 7329,
											"name": "PUSH",
											"source": 19,
											"value": "40"
										},
										{
											"begin": 7315,
											"end": 7324,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 7306,
											"end": 7313,
											"name": "DUP6",
											"source": 19
										},
										{
											"begin": 7302,
											"end": 7325,
											"name": "SUB",
											"source": 19
										},
										{
											"begin": 7298,
											"end": 7330,
											"name": "SLT",
											"source": 19
										},
										{
											"begin": 7295,
											"end": 7297,
											"name": "ISZERO",
											"source": 19
										},
										{
											"begin": 7295,
											"end": 7297,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "408"
										},
										{
											"begin": 7295,
											"end": 7297,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 7333,
											"end": 7412,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "409"
										},
										{
											"begin": 7333,
											"end": 7412,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "364"
										},
										{
											"begin": 7333,
											"end": 7412,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 7333,
											"end": 7412,
											"name": "tag",
											"source": 19,
											"value": "409"
										},
										{
											"begin": 7333,
											"end": 7412,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 7295,
											"end": 7297,
											"name": "tag",
											"source": 19,
											"value": "408"
										},
										{
											"begin": 7295,
											"end": 7297,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 7453,
											"end": 7454,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 7478,
											"end": 7531,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "410"
										},
										{
											"begin": 7523,
											"end": 7530,
											"name": "DUP6",
											"source": 19
										},
										{
											"begin": 7514,
											"end": 7520,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 7503,
											"end": 7512,
											"name": "DUP7",
											"source": 19
										},
										{
											"begin": 7499,
											"end": 7521,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 7478,
											"end": 7531,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "310"
										},
										{
											"begin": 7478,
											"end": 7531,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 7478,
											"end": 7531,
											"name": "tag",
											"source": 19,
											"value": "410"
										},
										{
											"begin": 7478,
											"end": 7531,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 7468,
											"end": 7531,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 7468,
											"end": 7531,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 7424,
											"end": 7541,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 7580,
											"end": 7582,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 7606,
											"end": 7659,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "411"
										},
										{
											"begin": 7651,
											"end": 7658,
											"name": "DUP6",
											"source": 19
										},
										{
											"begin": 7642,
											"end": 7648,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 7631,
											"end": 7640,
											"name": "DUP7",
											"source": 19
										},
										{
											"begin": 7627,
											"end": 7649,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 7606,
											"end": 7659,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "351"
										},
										{
											"begin": 7606,
											"end": 7659,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 7606,
											"end": 7659,
											"name": "tag",
											"source": 19,
											"value": "411"
										},
										{
											"begin": 7606,
											"end": 7659,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 7596,
											"end": 7659,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 7596,
											"end": 7659,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 7551,
											"end": 7669,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 7285,
											"end": 7676,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 7285,
											"end": 7676,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 7285,
											"end": 7676,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 7285,
											"end": 7676,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 7285,
											"end": 7676,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 7285,
											"end": 7676,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 7682,
											"end": 8263,
											"name": "tag",
											"source": 19,
											"value": "68"
										},
										{
											"begin": 7682,
											"end": 8263,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 7779,
											"end": 7785,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 7787,
											"end": 7793,
											"name": "DUP1",
											"source": 19
										},
										{
											"begin": 7836,
											"end": 7838,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 7824,
											"end": 7833,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 7815,
											"end": 7822,
											"name": "DUP6",
											"source": 19
										},
										{
											"begin": 7811,
											"end": 7834,
											"name": "SUB",
											"source": 19
										},
										{
											"begin": 7807,
											"end": 7839,
											"name": "SLT",
											"source": 19
										},
										{
											"begin": 7804,
											"end": 7806,
											"name": "ISZERO",
											"source": 19
										},
										{
											"begin": 7804,
											"end": 7806,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "413"
										},
										{
											"begin": 7804,
											"end": 7806,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 7842,
											"end": 7921,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "414"
										},
										{
											"begin": 7842,
											"end": 7921,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "364"
										},
										{
											"begin": 7842,
											"end": 7921,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 7842,
											"end": 7921,
											"name": "tag",
											"source": 19,
											"value": "414"
										},
										{
											"begin": 7842,
											"end": 7921,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 7804,
											"end": 7806,
											"name": "tag",
											"source": 19,
											"value": "413"
										},
										{
											"begin": 7804,
											"end": 7806,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 7990,
											"end": 7991,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 7979,
											"end": 7988,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 7975,
											"end": 7992,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 7962,
											"end": 7993,
											"name": "CALLDATALOAD",
											"source": 19
										},
										{
											"begin": 8020,
											"end": 8038,
											"name": "PUSH",
											"source": 19,
											"value": "FFFFFFFFFFFFFFFF"
										},
										{
											"begin": 8012,
											"end": 8018,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 8009,
											"end": 8039,
											"name": "GT",
											"source": 19
										},
										{
											"begin": 8006,
											"end": 8008,
											"name": "ISZERO",
											"source": 19
										},
										{
											"begin": 8006,
											"end": 8008,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "415"
										},
										{
											"begin": 8006,
											"end": 8008,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 8042,
											"end": 8121,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "416"
										},
										{
											"begin": 8042,
											"end": 8121,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "417"
										},
										{
											"begin": 8042,
											"end": 8121,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 8042,
											"end": 8121,
											"name": "tag",
											"source": 19,
											"value": "416"
										},
										{
											"begin": 8042,
											"end": 8121,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 8006,
											"end": 8008,
											"name": "tag",
											"source": 19,
											"value": "415"
										},
										{
											"begin": 8006,
											"end": 8008,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 8155,
											"end": 8246,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "418"
										},
										{
											"begin": 8238,
											"end": 8245,
											"name": "DUP6",
											"source": 19
										},
										{
											"begin": 8229,
											"end": 8235,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 8218,
											"end": 8227,
											"name": "DUP7",
											"source": 19
										},
										{
											"begin": 8214,
											"end": 8236,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 8155,
											"end": 8246,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "314"
										},
										{
											"begin": 8155,
											"end": 8246,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 8155,
											"end": 8246,
											"name": "tag",
											"source": 19,
											"value": "418"
										},
										{
											"begin": 8155,
											"end": 8246,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 8137,
											"end": 8246,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 8137,
											"end": 8246,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 8137,
											"end": 8246,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 8137,
											"end": 8246,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 7933,
											"end": 8256,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 7794,
											"end": 8263,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 7794,
											"end": 8263,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 7794,
											"end": 8263,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 7794,
											"end": 8263,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 7794,
											"end": 8263,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 7794,
											"end": 8263,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 8269,
											"end": 8614,
											"name": "tag",
											"source": 19,
											"value": "280"
										},
										{
											"begin": 8269,
											"end": 8614,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 8336,
											"end": 8342,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 8385,
											"end": 8387,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 8373,
											"end": 8382,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 8364,
											"end": 8371,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 8360,
											"end": 8383,
											"name": "SUB",
											"source": 19
										},
										{
											"begin": 8356,
											"end": 8388,
											"name": "SLT",
											"source": 19
										},
										{
											"begin": 8353,
											"end": 8355,
											"name": "ISZERO",
											"source": 19
										},
										{
											"begin": 8353,
											"end": 8355,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "420"
										},
										{
											"begin": 8353,
											"end": 8355,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 8391,
											"end": 8470,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "421"
										},
										{
											"begin": 8391,
											"end": 8470,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "364"
										},
										{
											"begin": 8391,
											"end": 8470,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 8391,
											"end": 8470,
											"name": "tag",
											"source": 19,
											"value": "421"
										},
										{
											"begin": 8391,
											"end": 8470,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 8353,
											"end": 8355,
											"name": "tag",
											"source": 19,
											"value": "420"
										},
										{
											"begin": 8353,
											"end": 8355,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 8511,
											"end": 8512,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 8536,
											"end": 8597,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "422"
										},
										{
											"begin": 8589,
											"end": 8596,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 8580,
											"end": 8586,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 8569,
											"end": 8578,
											"name": "DUP6",
											"source": 19
										},
										{
											"begin": 8565,
											"end": 8587,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 8536,
											"end": 8597,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "325"
										},
										{
											"begin": 8536,
											"end": 8597,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 8536,
											"end": 8597,
											"name": "tag",
											"source": 19,
											"value": "422"
										},
										{
											"begin": 8536,
											"end": 8597,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 8526,
											"end": 8597,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 8526,
											"end": 8597,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 8482,
											"end": 8607,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 8343,
											"end": 8614,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 8343,
											"end": 8614,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 8343,
											"end": 8614,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 8343,
											"end": 8614,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 8343,
											"end": 8614,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 8620,
											"end": 9627,
											"name": "tag",
											"source": 19,
											"value": "103"
										},
										{
											"begin": 8620,
											"end": 9627,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 8763,
											"end": 8769,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 8771,
											"end": 8777,
											"name": "DUP1",
											"source": 19
										},
										{
											"begin": 8779,
											"end": 8785,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 8787,
											"end": 8793,
											"name": "DUP1",
											"source": 19
										},
										{
											"begin": 8795,
											"end": 8801,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 8844,
											"end": 8847,
											"name": "PUSH",
											"source": 19,
											"value": "A0"
										},
										{
											"begin": 8832,
											"end": 8841,
											"name": "DUP7",
											"source": 19
										},
										{
											"begin": 8823,
											"end": 8830,
											"name": "DUP9",
											"source": 19
										},
										{
											"begin": 8819,
											"end": 8842,
											"name": "SUB",
											"source": 19
										},
										{
											"begin": 8815,
											"end": 8848,
											"name": "SLT",
											"source": 19
										},
										{
											"begin": 8812,
											"end": 8814,
											"name": "ISZERO",
											"source": 19
										},
										{
											"begin": 8812,
											"end": 8814,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "424"
										},
										{
											"begin": 8812,
											"end": 8814,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 8851,
											"end": 8930,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "425"
										},
										{
											"begin": 8851,
											"end": 8930,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "364"
										},
										{
											"begin": 8851,
											"end": 8930,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 8851,
											"end": 8930,
											"name": "tag",
											"source": 19,
											"value": "425"
										},
										{
											"begin": 8851,
											"end": 8930,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 8812,
											"end": 8814,
											"name": "tag",
											"source": 19,
											"value": "424"
										},
										{
											"begin": 8812,
											"end": 8814,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 8971,
											"end": 8972,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 8996,
											"end": 9068,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "426"
										},
										{
											"begin": 9060,
											"end": 9067,
											"name": "DUP9",
											"source": 19
										},
										{
											"begin": 9051,
											"end": 9057,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 9040,
											"end": 9049,
											"name": "DUP10",
											"source": 19
										},
										{
											"begin": 9036,
											"end": 9058,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 8996,
											"end": 9068,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "333"
										},
										{
											"begin": 8996,
											"end": 9068,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 8996,
											"end": 9068,
											"name": "tag",
											"source": 19,
											"value": "426"
										},
										{
											"begin": 8996,
											"end": 9068,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 8986,
											"end": 9068,
											"name": "SWAP6",
											"source": 19
										},
										{
											"begin": 8986,
											"end": 9068,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 8942,
											"end": 9078,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 9117,
											"end": 9119,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 9143,
											"end": 9212,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "427"
										},
										{
											"begin": 9204,
											"end": 9211,
											"name": "DUP9",
											"source": 19
										},
										{
											"begin": 9195,
											"end": 9201,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 9184,
											"end": 9193,
											"name": "DUP10",
											"source": 19
										},
										{
											"begin": 9180,
											"end": 9202,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 9143,
											"end": 9212,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "337"
										},
										{
											"begin": 9143,
											"end": 9212,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 9143,
											"end": 9212,
											"name": "tag",
											"source": 19,
											"value": "427"
										},
										{
											"begin": 9143,
											"end": 9212,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 9133,
											"end": 9212,
											"name": "SWAP5",
											"source": 19
										},
										{
											"begin": 9133,
											"end": 9212,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 9088,
											"end": 9222,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 9261,
											"end": 9263,
											"name": "PUSH",
											"source": 19,
											"value": "40"
										},
										{
											"begin": 9287,
											"end": 9340,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "428"
										},
										{
											"begin": 9332,
											"end": 9339,
											"name": "DUP9",
											"source": 19
										},
										{
											"begin": 9323,
											"end": 9329,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 9312,
											"end": 9321,
											"name": "DUP10",
											"source": 19
										},
										{
											"begin": 9308,
											"end": 9330,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 9287,
											"end": 9340,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "351"
										},
										{
											"begin": 9287,
											"end": 9340,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 9287,
											"end": 9340,
											"name": "tag",
											"source": 19,
											"value": "428"
										},
										{
											"begin": 9287,
											"end": 9340,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 9277,
											"end": 9340,
											"name": "SWAP4",
											"source": 19
										},
										{
											"begin": 9277,
											"end": 9340,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 9232,
											"end": 9350,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 9389,
											"end": 9391,
											"name": "PUSH",
											"source": 19,
											"value": "60"
										},
										{
											"begin": 9415,
											"end": 9481,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "429"
										},
										{
											"begin": 9473,
											"end": 9480,
											"name": "DUP9",
											"source": 19
										},
										{
											"begin": 9464,
											"end": 9470,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 9453,
											"end": 9462,
											"name": "DUP10",
											"source": 19
										},
										{
											"begin": 9449,
											"end": 9471,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 9415,
											"end": 9481,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "329"
										},
										{
											"begin": 9415,
											"end": 9481,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 9415,
											"end": 9481,
											"name": "tag",
											"source": 19,
											"value": "429"
										},
										{
											"begin": 9415,
											"end": 9481,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 9405,
											"end": 9481,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 9405,
											"end": 9481,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 9360,
											"end": 9491,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 9530,
											"end": 9533,
											"name": "PUSH",
											"source": 19,
											"value": "80"
										},
										{
											"begin": 9557,
											"end": 9610,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "430"
										},
										{
											"begin": 9602,
											"end": 9609,
											"name": "DUP9",
											"source": 19
										},
										{
											"begin": 9593,
											"end": 9599,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 9582,
											"end": 9591,
											"name": "DUP10",
											"source": 19
										},
										{
											"begin": 9578,
											"end": 9600,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 9557,
											"end": 9610,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "351"
										},
										{
											"begin": 9557,
											"end": 9610,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 9557,
											"end": 9610,
											"name": "tag",
											"source": 19,
											"value": "430"
										},
										{
											"begin": 9557,
											"end": 9610,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 9547,
											"end": 9610,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 9547,
											"end": 9610,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 9501,
											"end": 9620,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 8802,
											"end": 9627,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 8802,
											"end": 9627,
											"name": "SWAP6",
											"source": 19
										},
										{
											"begin": 8802,
											"end": 9627,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 8802,
											"end": 9627,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 8802,
											"end": 9627,
											"name": "SWAP6",
											"source": 19
										},
										{
											"begin": 8802,
											"end": 9627,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 8802,
											"end": 9627,
											"name": "SWAP4",
											"source": 19
										},
										{
											"begin": 8802,
											"end": 9627,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 8802,
											"end": 9627,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 9633,
											"end": 9984,
											"name": "tag",
											"source": 19,
											"value": "119"
										},
										{
											"begin": 9633,
											"end": 9984,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 9703,
											"end": 9709,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 9752,
											"end": 9754,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 9740,
											"end": 9749,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 9731,
											"end": 9738,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 9727,
											"end": 9750,
											"name": "SUB",
											"source": 19
										},
										{
											"begin": 9723,
											"end": 9755,
											"name": "SLT",
											"source": 19
										},
										{
											"begin": 9720,
											"end": 9722,
											"name": "ISZERO",
											"source": 19
										},
										{
											"begin": 9720,
											"end": 9722,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "432"
										},
										{
											"begin": 9720,
											"end": 9722,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 9758,
											"end": 9837,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "433"
										},
										{
											"begin": 9758,
											"end": 9837,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "364"
										},
										{
											"begin": 9758,
											"end": 9837,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 9758,
											"end": 9837,
											"name": "tag",
											"source": 19,
											"value": "433"
										},
										{
											"begin": 9758,
											"end": 9837,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 9720,
											"end": 9722,
											"name": "tag",
											"source": 19,
											"value": "432"
										},
										{
											"begin": 9720,
											"end": 9722,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 9878,
											"end": 9879,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 9903,
											"end": 9967,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "434"
										},
										{
											"begin": 9959,
											"end": 9966,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 9950,
											"end": 9956,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 9939,
											"end": 9948,
											"name": "DUP6",
											"source": 19
										},
										{
											"begin": 9935,
											"end": 9957,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 9903,
											"end": 9967,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "355"
										},
										{
											"begin": 9903,
											"end": 9967,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 9903,
											"end": 9967,
											"name": "tag",
											"source": 19,
											"value": "434"
										},
										{
											"begin": 9903,
											"end": 9967,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 9893,
											"end": 9967,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 9893,
											"end": 9967,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 9849,
											"end": 9977,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 9710,
											"end": 9984,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 9710,
											"end": 9984,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 9710,
											"end": 9984,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 9710,
											"end": 9984,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 9710,
											"end": 9984,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 9990,
											"end": 10182,
											"name": "tag",
											"source": 19,
											"value": "435"
										},
										{
											"begin": 9990,
											"end": 10182,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 10077,
											"end": 10087,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 10112,
											"end": 10176,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "437"
										},
										{
											"begin": 10172,
											"end": 10175,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 10164,
											"end": 10170,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 10112,
											"end": 10176,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "438"
										},
										{
											"begin": 10112,
											"end": 10176,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 10112,
											"end": 10176,
											"name": "tag",
											"source": 19,
											"value": "437"
										},
										{
											"begin": 10112,
											"end": 10176,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 10098,
											"end": 10176,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 10098,
											"end": 10176,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 10088,
											"end": 10182,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 10088,
											"end": 10182,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 10088,
											"end": 10182,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 10088,
											"end": 10182,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 10088,
											"end": 10182,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 10188,
											"end": 10306,
											"name": "tag",
											"source": 19,
											"value": "439"
										},
										{
											"begin": 10188,
											"end": 10306,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 10275,
											"end": 10299,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "441"
										},
										{
											"begin": 10293,
											"end": 10298,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 10275,
											"end": 10299,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "442"
										},
										{
											"begin": 10275,
											"end": 10299,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 10275,
											"end": 10299,
											"name": "tag",
											"source": 19,
											"value": "441"
										},
										{
											"begin": 10275,
											"end": 10299,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 10270,
											"end": 10273,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 10263,
											"end": 10300,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 10253,
											"end": 10306,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 10253,
											"end": 10306,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 10253,
											"end": 10306,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 10338,
											"end": 11321,
											"name": "tag",
											"source": 19,
											"value": "443"
										},
										{
											"begin": 10338,
											"end": 11321,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 10475,
											"end": 10478,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 10504,
											"end": 10567,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "445"
										},
										{
											"begin": 10561,
											"end": 10566,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 10504,
											"end": 10567,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "446"
										},
										{
											"begin": 10504,
											"end": 10567,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 10504,
											"end": 10567,
											"name": "tag",
											"source": 19,
											"value": "445"
										},
										{
											"begin": 10504,
											"end": 10567,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 10583,
											"end": 10678,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "447"
										},
										{
											"begin": 10671,
											"end": 10677,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 10666,
											"end": 10669,
											"name": "DUP6",
											"source": 19
										},
										{
											"begin": 10583,
											"end": 10678,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "448"
										},
										{
											"begin": 10583,
											"end": 10678,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 10583,
											"end": 10678,
											"name": "tag",
											"source": 19,
											"value": "447"
										},
										{
											"begin": 10583,
											"end": 10678,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 10576,
											"end": 10678,
											"name": "SWAP4",
											"source": 19
										},
										{
											"begin": 10576,
											"end": 10678,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 10704,
											"end": 10707,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 10749,
											"end": 10753,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 10741,
											"end": 10747,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 10737,
											"end": 10754,
											"name": "MUL",
											"source": 19
										},
										{
											"begin": 10732,
											"end": 10735,
											"name": "DUP6",
											"source": 19
										},
										{
											"begin": 10728,
											"end": 10755,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 10779,
											"end": 10844,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "449"
										},
										{
											"begin": 10838,
											"end": 10843,
											"name": "DUP6",
											"source": 19
										},
										{
											"begin": 10779,
											"end": 10844,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "450"
										},
										{
											"begin": 10779,
											"end": 10844,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 10779,
											"end": 10844,
											"name": "tag",
											"source": 19,
											"value": "449"
										},
										{
											"begin": 10779,
											"end": 10844,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 10867,
											"end": 10874,
											"name": "DUP1",
											"source": 19
										},
										{
											"begin": 10898,
											"end": 10899,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 10883,
											"end": 11276,
											"name": "tag",
											"source": 19,
											"value": "451"
										},
										{
											"begin": 10883,
											"end": 11276,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 10908,
											"end": 10914,
											"name": "DUP6",
											"source": 19
										},
										{
											"begin": 10905,
											"end": 10906,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 10902,
											"end": 10915,
											"name": "LT",
											"source": 19
										},
										{
											"begin": 10883,
											"end": 11276,
											"name": "ISZERO",
											"source": 19
										},
										{
											"begin": 10883,
											"end": 11276,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "453"
										},
										{
											"begin": 10883,
											"end": 11276,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 10979,
											"end": 10988,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 10973,
											"end": 10977,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 10969,
											"end": 10989,
											"name": "SUB",
											"source": 19
										},
										{
											"begin": 10964,
											"end": 10967,
											"name": "DUP10",
											"source": 19
										},
										{
											"begin": 10957,
											"end": 10990,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 11030,
											"end": 11036,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 11024,
											"end": 11037,
											"name": "MLOAD",
											"source": 19
										},
										{
											"begin": 11058,
											"end": 11140,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "454"
										},
										{
											"begin": 11135,
											"end": 11139,
											"name": "DUP6",
											"source": 19
										},
										{
											"begin": 11120,
											"end": 11133,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 11058,
											"end": 11140,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "435"
										},
										{
											"begin": 11058,
											"end": 11140,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 11058,
											"end": 11140,
											"name": "tag",
											"source": 19,
											"value": "454"
										},
										{
											"begin": 11058,
											"end": 11140,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 11050,
											"end": 11140,
											"name": "SWAP5",
											"source": 19
										},
										{
											"begin": 11050,
											"end": 11140,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 11163,
											"end": 11232,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "455"
										},
										{
											"begin": 11225,
											"end": 11231,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 11163,
											"end": 11232,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "456"
										},
										{
											"begin": 11163,
											"end": 11232,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 11163,
											"end": 11232,
											"name": "tag",
											"source": 19,
											"value": "455"
										},
										{
											"begin": 11163,
											"end": 11232,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 11153,
											"end": 11232,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 11153,
											"end": 11232,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 11261,
											"end": 11265,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 11256,
											"end": 11259,
											"name": "DUP11",
											"source": 19
										},
										{
											"begin": 11252,
											"end": 11266,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 11245,
											"end": 11266,
											"name": "SWAP10",
											"source": 19
										},
										{
											"begin": 11245,
											"end": 11266,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 10943,
											"end": 11276,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 10930,
											"end": 10931,
											"name": "PUSH",
											"source": 19,
											"value": "1"
										},
										{
											"begin": 10927,
											"end": 10928,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 10923,
											"end": 10932,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 10918,
											"end": 10932,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 10918,
											"end": 10932,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 10883,
											"end": 11276,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "451"
										},
										{
											"begin": 10883,
											"end": 11276,
											"name": "JUMP",
											"source": 19
										},
										{
											"begin": 10883,
											"end": 11276,
											"name": "tag",
											"source": 19,
											"value": "453"
										},
										{
											"begin": 10883,
											"end": 11276,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 10887,
											"end": 10901,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 11292,
											"end": 11296,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 11285,
											"end": 11296,
											"name": "SWAP8",
											"source": 19
										},
										{
											"begin": 11285,
											"end": 11296,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 11312,
											"end": 11315,
											"name": "DUP8",
											"source": 19
										},
										{
											"begin": 11305,
											"end": 11315,
											"name": "SWAP6",
											"source": 19
										},
										{
											"begin": 11305,
											"end": 11315,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 10480,
											"end": 11321,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 10480,
											"end": 11321,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 10480,
											"end": 11321,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 10480,
											"end": 11321,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 10480,
											"end": 11321,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 10480,
											"end": 11321,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 10480,
											"end": 11321,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 10480,
											"end": 11321,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 10480,
											"end": 11321,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 10480,
											"end": 11321,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 11327,
											"end": 11667,
											"name": "tag",
											"source": 19,
											"value": "438"
										},
										{
											"begin": 11327,
											"end": 11667,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 11403,
											"end": 11406,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 11431,
											"end": 11469,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "458"
										},
										{
											"begin": 11463,
											"end": 11468,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 11431,
											"end": 11469,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "459"
										},
										{
											"begin": 11431,
											"end": 11469,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 11431,
											"end": 11469,
											"name": "tag",
											"source": 19,
											"value": "458"
										},
										{
											"begin": 11431,
											"end": 11469,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 11485,
											"end": 11545,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "460"
										},
										{
											"begin": 11538,
											"end": 11544,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 11533,
											"end": 11536,
											"name": "DUP6",
											"source": 19
										},
										{
											"begin": 11485,
											"end": 11545,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "461"
										},
										{
											"begin": 11485,
											"end": 11545,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 11485,
											"end": 11545,
											"name": "tag",
											"source": 19,
											"value": "460"
										},
										{
											"begin": 11485,
											"end": 11545,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 11478,
											"end": 11545,
											"name": "SWAP4",
											"source": 19
										},
										{
											"begin": 11478,
											"end": 11545,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 11554,
											"end": 11606,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "462"
										},
										{
											"begin": 11599,
											"end": 11605,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 11594,
											"end": 11597,
											"name": "DUP6",
											"source": 19
										},
										{
											"begin": 11587,
											"end": 11591,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 11580,
											"end": 11585,
											"name": "DUP7",
											"source": 19
										},
										{
											"begin": 11576,
											"end": 11592,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 11554,
											"end": 11606,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "463"
										},
										{
											"begin": 11554,
											"end": 11606,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 11554,
											"end": 11606,
											"name": "tag",
											"source": 19,
											"value": "462"
										},
										{
											"begin": 11554,
											"end": 11606,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 11631,
											"end": 11660,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "464"
										},
										{
											"begin": 11653,
											"end": 11659,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 11631,
											"end": 11660,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "465"
										},
										{
											"begin": 11631,
											"end": 11660,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 11631,
											"end": 11660,
											"name": "tag",
											"source": 19,
											"value": "464"
										},
										{
											"begin": 11631,
											"end": 11660,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 11626,
											"end": 11629,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 11622,
											"end": 11661,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 11615,
											"end": 11661,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 11615,
											"end": 11661,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 11407,
											"end": 11667,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 11407,
											"end": 11667,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 11407,
											"end": 11667,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 11407,
											"end": 11667,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 11407,
											"end": 11667,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 11407,
											"end": 11667,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 11673,
											"end": 12046,
											"name": "tag",
											"source": 19,
											"value": "466"
										},
										{
											"begin": 11673,
											"end": 12046,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 11777,
											"end": 11780,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 11805,
											"end": 11843,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "468"
										},
										{
											"begin": 11837,
											"end": 11842,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 11805,
											"end": 11843,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "459"
										},
										{
											"begin": 11805,
											"end": 11843,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 11805,
											"end": 11843,
											"name": "tag",
											"source": 19,
											"value": "468"
										},
										{
											"begin": 11805,
											"end": 11843,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 11859,
											"end": 11947,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "469"
										},
										{
											"begin": 11940,
											"end": 11946,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 11935,
											"end": 11938,
											"name": "DUP6",
											"source": 19
										},
										{
											"begin": 11859,
											"end": 11947,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "470"
										},
										{
											"begin": 11859,
											"end": 11947,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 11859,
											"end": 11947,
											"name": "tag",
											"source": 19,
											"value": "469"
										},
										{
											"begin": 11859,
											"end": 11947,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 11852,
											"end": 11947,
											"name": "SWAP4",
											"source": 19
										},
										{
											"begin": 11852,
											"end": 11947,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 11956,
											"end": 12008,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "471"
										},
										{
											"begin": 12001,
											"end": 12007,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 11996,
											"end": 11999,
											"name": "DUP6",
											"source": 19
										},
										{
											"begin": 11989,
											"end": 11993,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 11982,
											"end": 11987,
											"name": "DUP7",
											"source": 19
										},
										{
											"begin": 11978,
											"end": 11994,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 11956,
											"end": 12008,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "463"
										},
										{
											"begin": 11956,
											"end": 12008,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 11956,
											"end": 12008,
											"name": "tag",
											"source": 19,
											"value": "471"
										},
										{
											"begin": 11956,
											"end": 12008,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 12033,
											"end": 12039,
											"name": "DUP1",
											"source": 19
										},
										{
											"begin": 12028,
											"end": 12031,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 12024,
											"end": 12040,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 12017,
											"end": 12040,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 12017,
											"end": 12040,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 11781,
											"end": 12046,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 11781,
											"end": 12046,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 11781,
											"end": 12046,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 11781,
											"end": 12046,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 11781,
											"end": 12046,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 11781,
											"end": 12046,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 12052,
											"end": 12199,
											"name": "tag",
											"source": 19,
											"value": "472"
										},
										{
											"begin": 12052,
											"end": 12199,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 12142,
											"end": 12192,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "474"
										},
										{
											"begin": 12186,
											"end": 12191,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 12142,
											"end": 12192,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "475"
										},
										{
											"begin": 12142,
											"end": 12192,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 12142,
											"end": 12192,
											"name": "tag",
											"source": 19,
											"value": "474"
										},
										{
											"begin": 12142,
											"end": 12192,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 12137,
											"end": 12140,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 12130,
											"end": 12193,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 12120,
											"end": 12199,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 12120,
											"end": 12199,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 12120,
											"end": 12199,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 12205,
											"end": 12362,
											"name": "tag",
											"source": 19,
											"value": "476"
										},
										{
											"begin": 12205,
											"end": 12362,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 12305,
											"end": 12355,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "478"
										},
										{
											"begin": 12349,
											"end": 12354,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 12305,
											"end": 12355,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "475"
										},
										{
											"begin": 12305,
											"end": 12355,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 12305,
											"end": 12355,
											"name": "tag",
											"source": 19,
											"value": "478"
										},
										{
											"begin": 12305,
											"end": 12355,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 12300,
											"end": 12303,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 12293,
											"end": 12356,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 12283,
											"end": 12362,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 12283,
											"end": 12362,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 12283,
											"end": 12362,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 12368,
											"end": 12549,
											"name": "tag",
											"source": 19,
											"value": "479"
										},
										{
											"begin": 12368,
											"end": 12549,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 12480,
											"end": 12542,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "481"
										},
										{
											"begin": 12536,
											"end": 12541,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 12480,
											"end": 12542,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "482"
										},
										{
											"begin": 12480,
											"end": 12542,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 12480,
											"end": 12542,
											"name": "tag",
											"source": 19,
											"value": "481"
										},
										{
											"begin": 12480,
											"end": 12542,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 12475,
											"end": 12478,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 12468,
											"end": 12543,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 12458,
											"end": 12549,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 12458,
											"end": 12549,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 12458,
											"end": 12549,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 12555,
											"end": 12919,
											"name": "tag",
											"source": 19,
											"value": "483"
										},
										{
											"begin": 12555,
											"end": 12919,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 12643,
											"end": 12646,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 12671,
											"end": 12710,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "485"
										},
										{
											"begin": 12704,
											"end": 12709,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 12671,
											"end": 12710,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "486"
										},
										{
											"begin": 12671,
											"end": 12710,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 12671,
											"end": 12710,
											"name": "tag",
											"source": 19,
											"value": "485"
										},
										{
											"begin": 12671,
											"end": 12710,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 12726,
											"end": 12797,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "487"
										},
										{
											"begin": 12790,
											"end": 12796,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 12785,
											"end": 12788,
											"name": "DUP6",
											"source": 19
										},
										{
											"begin": 12726,
											"end": 12797,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "488"
										},
										{
											"begin": 12726,
											"end": 12797,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 12726,
											"end": 12797,
											"name": "tag",
											"source": 19,
											"value": "487"
										},
										{
											"begin": 12726,
											"end": 12797,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 12719,
											"end": 12797,
											"name": "SWAP4",
											"source": 19
										},
										{
											"begin": 12719,
											"end": 12797,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 12806,
											"end": 12858,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "489"
										},
										{
											"begin": 12851,
											"end": 12857,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 12846,
											"end": 12849,
											"name": "DUP6",
											"source": 19
										},
										{
											"begin": 12839,
											"end": 12843,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 12832,
											"end": 12837,
											"name": "DUP7",
											"source": 19
										},
										{
											"begin": 12828,
											"end": 12844,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 12806,
											"end": 12858,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "463"
										},
										{
											"begin": 12806,
											"end": 12858,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 12806,
											"end": 12858,
											"name": "tag",
											"source": 19,
											"value": "489"
										},
										{
											"begin": 12806,
											"end": 12858,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 12883,
											"end": 12912,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "490"
										},
										{
											"begin": 12905,
											"end": 12911,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 12883,
											"end": 12912,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "465"
										},
										{
											"begin": 12883,
											"end": 12912,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 12883,
											"end": 12912,
											"name": "tag",
											"source": 19,
											"value": "490"
										},
										{
											"begin": 12883,
											"end": 12912,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 12878,
											"end": 12881,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 12874,
											"end": 12913,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 12867,
											"end": 12913,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 12867,
											"end": 12913,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 12647,
											"end": 12919,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 12647,
											"end": 12919,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 12647,
											"end": 12919,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 12647,
											"end": 12919,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 12647,
											"end": 12919,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 12647,
											"end": 12919,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 12925,
											"end": 13291,
											"name": "tag",
											"source": 19,
											"value": "491"
										},
										{
											"begin": 12925,
											"end": 13291,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 13067,
											"end": 13070,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 13088,
											"end": 13155,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "493"
										},
										{
											"begin": 13152,
											"end": 13154,
											"name": "PUSH",
											"source": 19,
											"value": "17"
										},
										{
											"begin": 13147,
											"end": 13150,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 13088,
											"end": 13155,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "488"
										},
										{
											"begin": 13088,
											"end": 13155,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 13088,
											"end": 13155,
											"name": "tag",
											"source": 19,
											"value": "493"
										},
										{
											"begin": 13088,
											"end": 13155,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 13081,
											"end": 13155,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 13081,
											"end": 13155,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 13164,
											"end": 13257,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "494"
										},
										{
											"begin": 13253,
											"end": 13256,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 13164,
											"end": 13257,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "495"
										},
										{
											"begin": 13164,
											"end": 13257,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 13164,
											"end": 13257,
											"name": "tag",
											"source": 19,
											"value": "494"
										},
										{
											"begin": 13164,
											"end": 13257,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 13282,
											"end": 13284,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 13277,
											"end": 13280,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 13273,
											"end": 13285,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 13266,
											"end": 13285,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 13266,
											"end": 13285,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 13071,
											"end": 13291,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 13071,
											"end": 13291,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 13071,
											"end": 13291,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 13071,
											"end": 13291,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 13297,
											"end": 13663,
											"name": "tag",
											"source": 19,
											"value": "496"
										},
										{
											"begin": 13297,
											"end": 13663,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 13439,
											"end": 13442,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 13460,
											"end": 13527,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "498"
										},
										{
											"begin": 13524,
											"end": 13526,
											"name": "PUSH",
											"source": 19,
											"value": "26"
										},
										{
											"begin": 13519,
											"end": 13522,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 13460,
											"end": 13527,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "488"
										},
										{
											"begin": 13460,
											"end": 13527,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 13460,
											"end": 13527,
											"name": "tag",
											"source": 19,
											"value": "498"
										},
										{
											"begin": 13460,
											"end": 13527,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 13453,
											"end": 13527,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 13453,
											"end": 13527,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 13536,
											"end": 13629,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "499"
										},
										{
											"begin": 13625,
											"end": 13628,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 13536,
											"end": 13629,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "500"
										},
										{
											"begin": 13536,
											"end": 13629,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 13536,
											"end": 13629,
											"name": "tag",
											"source": 19,
											"value": "499"
										},
										{
											"begin": 13536,
											"end": 13629,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 13654,
											"end": 13656,
											"name": "PUSH",
											"source": 19,
											"value": "40"
										},
										{
											"begin": 13649,
											"end": 13652,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 13645,
											"end": 13657,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 13638,
											"end": 13657,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 13638,
											"end": 13657,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 13443,
											"end": 13663,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 13443,
											"end": 13663,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 13443,
											"end": 13663,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 13443,
											"end": 13663,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 13669,
											"end": 14035,
											"name": "tag",
											"source": 19,
											"value": "501"
										},
										{
											"begin": 13669,
											"end": 14035,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 13811,
											"end": 13814,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 13832,
											"end": 13899,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "503"
										},
										{
											"begin": 13896,
											"end": 13898,
											"name": "PUSH",
											"source": 19,
											"value": "26"
										},
										{
											"begin": 13891,
											"end": 13894,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 13832,
											"end": 13899,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "488"
										},
										{
											"begin": 13832,
											"end": 13899,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 13832,
											"end": 13899,
											"name": "tag",
											"source": 19,
											"value": "503"
										},
										{
											"begin": 13832,
											"end": 13899,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 13825,
											"end": 13899,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 13825,
											"end": 13899,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 13908,
											"end": 14001,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "504"
										},
										{
											"begin": 13997,
											"end": 14000,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 13908,
											"end": 14001,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "505"
										},
										{
											"begin": 13908,
											"end": 14001,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 13908,
											"end": 14001,
											"name": "tag",
											"source": 19,
											"value": "504"
										},
										{
											"begin": 13908,
											"end": 14001,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 14026,
											"end": 14028,
											"name": "PUSH",
											"source": 19,
											"value": "40"
										},
										{
											"begin": 14021,
											"end": 14024,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 14017,
											"end": 14029,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 14010,
											"end": 14029,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 14010,
											"end": 14029,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 13815,
											"end": 14035,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 13815,
											"end": 14035,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 13815,
											"end": 14035,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 13815,
											"end": 14035,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 14041,
											"end": 14407,
											"name": "tag",
											"source": 19,
											"value": "506"
										},
										{
											"begin": 14041,
											"end": 14407,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 14183,
											"end": 14186,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 14204,
											"end": 14271,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "508"
										},
										{
											"begin": 14268,
											"end": 14270,
											"name": "PUSH",
											"source": 19,
											"value": "1D"
										},
										{
											"begin": 14263,
											"end": 14266,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 14204,
											"end": 14271,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "488"
										},
										{
											"begin": 14204,
											"end": 14271,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 14204,
											"end": 14271,
											"name": "tag",
											"source": 19,
											"value": "508"
										},
										{
											"begin": 14204,
											"end": 14271,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 14197,
											"end": 14271,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 14197,
											"end": 14271,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 14280,
											"end": 14373,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "509"
										},
										{
											"begin": 14369,
											"end": 14372,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 14280,
											"end": 14373,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "510"
										},
										{
											"begin": 14280,
											"end": 14373,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 14280,
											"end": 14373,
											"name": "tag",
											"source": 19,
											"value": "509"
										},
										{
											"begin": 14280,
											"end": 14373,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 14398,
											"end": 14400,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 14393,
											"end": 14396,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 14389,
											"end": 14401,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 14382,
											"end": 14401,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 14382,
											"end": 14401,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 14187,
											"end": 14407,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 14187,
											"end": 14407,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 14187,
											"end": 14407,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 14187,
											"end": 14407,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 14413,
											"end": 14779,
											"name": "tag",
											"source": 19,
											"value": "511"
										},
										{
											"begin": 14413,
											"end": 14779,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 14555,
											"end": 14558,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 14576,
											"end": 14643,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "513"
										},
										{
											"begin": 14640,
											"end": 14642,
											"name": "PUSH",
											"source": 19,
											"value": "2A"
										},
										{
											"begin": 14635,
											"end": 14638,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 14576,
											"end": 14643,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "488"
										},
										{
											"begin": 14576,
											"end": 14643,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 14576,
											"end": 14643,
											"name": "tag",
											"source": 19,
											"value": "513"
										},
										{
											"begin": 14576,
											"end": 14643,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 14569,
											"end": 14643,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 14569,
											"end": 14643,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 14652,
											"end": 14745,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "514"
										},
										{
											"begin": 14741,
											"end": 14744,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 14652,
											"end": 14745,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "515"
										},
										{
											"begin": 14652,
											"end": 14745,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 14652,
											"end": 14745,
											"name": "tag",
											"source": 19,
											"value": "514"
										},
										{
											"begin": 14652,
											"end": 14745,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 14770,
											"end": 14772,
											"name": "PUSH",
											"source": 19,
											"value": "40"
										},
										{
											"begin": 14765,
											"end": 14768,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 14761,
											"end": 14773,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 14754,
											"end": 14773,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 14754,
											"end": 14773,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 14559,
											"end": 14779,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 14559,
											"end": 14779,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 14559,
											"end": 14779,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 14559,
											"end": 14779,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 14785,
											"end": 15151,
											"name": "tag",
											"source": 19,
											"value": "516"
										},
										{
											"begin": 14785,
											"end": 15151,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 14927,
											"end": 14930,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 14948,
											"end": 15015,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "518"
										},
										{
											"begin": 15012,
											"end": 15014,
											"name": "PUSH",
											"source": 19,
											"value": "1C"
										},
										{
											"begin": 15007,
											"end": 15010,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 14948,
											"end": 15015,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "488"
										},
										{
											"begin": 14948,
											"end": 15015,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 14948,
											"end": 15015,
											"name": "tag",
											"source": 19,
											"value": "518"
										},
										{
											"begin": 14948,
											"end": 15015,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 14941,
											"end": 15015,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 14941,
											"end": 15015,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 15024,
											"end": 15117,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "519"
										},
										{
											"begin": 15113,
											"end": 15116,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 15024,
											"end": 15117,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "520"
										},
										{
											"begin": 15024,
											"end": 15117,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 15024,
											"end": 15117,
											"name": "tag",
											"source": 19,
											"value": "519"
										},
										{
											"begin": 15024,
											"end": 15117,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 15142,
											"end": 15144,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 15137,
											"end": 15140,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 15133,
											"end": 15145,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 15126,
											"end": 15145,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 15126,
											"end": 15145,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 14931,
											"end": 15151,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 14931,
											"end": 15151,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 14931,
											"end": 15151,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 14931,
											"end": 15151,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 15229,
											"end": 15761,
											"name": "tag",
											"source": 19,
											"value": "521"
										},
										{
											"begin": 15229,
											"end": 15761,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 15384,
											"end": 15388,
											"name": "PUSH",
											"source": 19,
											"value": "40"
										},
										{
											"begin": 15379,
											"end": 15382,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 15375,
											"end": 15389,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 15472,
											"end": 15476,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 15465,
											"end": 15470,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 15461,
											"end": 15477,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 15455,
											"end": 15478,
											"name": "MLOAD",
											"source": 19
										},
										{
											"begin": 15491,
											"end": 15567,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "523"
										},
										{
											"begin": 15561,
											"end": 15565,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 15556,
											"end": 15559,
											"name": "DUP6",
											"source": 19
										},
										{
											"begin": 15552,
											"end": 15566,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 15538,
											"end": 15550,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 15491,
											"end": 15567,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "472"
										},
										{
											"begin": 15491,
											"end": 15567,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 15491,
											"end": 15567,
											"name": "tag",
											"source": 19,
											"value": "523"
										},
										{
											"begin": 15491,
											"end": 15567,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 15399,
											"end": 15577,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 15664,
											"end": 15668,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 15657,
											"end": 15662,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 15653,
											"end": 15669,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 15647,
											"end": 15670,
											"name": "MLOAD",
											"source": 19
										},
										{
											"begin": 15683,
											"end": 15744,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "524"
										},
										{
											"begin": 15738,
											"end": 15742,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 15733,
											"end": 15736,
											"name": "DUP6",
											"source": 19
										},
										{
											"begin": 15729,
											"end": 15743,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 15715,
											"end": 15727,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 15683,
											"end": 15744,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "525"
										},
										{
											"begin": 15683,
											"end": 15744,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 15683,
											"end": 15744,
											"name": "tag",
											"source": 19,
											"value": "524"
										},
										{
											"begin": 15683,
											"end": 15744,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 15587,
											"end": 15754,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 15353,
											"end": 15761,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 15353,
											"end": 15761,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 15353,
											"end": 15761,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 15353,
											"end": 15761,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 15767,
											"end": 15885,
											"name": "tag",
											"source": 19,
											"value": "526"
										},
										{
											"begin": 15767,
											"end": 15885,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 15854,
											"end": 15878,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "528"
										},
										{
											"begin": 15872,
											"end": 15877,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 15854,
											"end": 15878,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "529"
										},
										{
											"begin": 15854,
											"end": 15878,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 15854,
											"end": 15878,
											"name": "tag",
											"source": 19,
											"value": "528"
										},
										{
											"begin": 15854,
											"end": 15878,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 15849,
											"end": 15852,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 15842,
											"end": 15879,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 15832,
											"end": 15885,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 15832,
											"end": 15885,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 15832,
											"end": 15885,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 15891,
											"end": 16006,
											"name": "tag",
											"source": 19,
											"value": "530"
										},
										{
											"begin": 15891,
											"end": 16006,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 15976,
											"end": 15999,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "532"
										},
										{
											"begin": 15993,
											"end": 15998,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 15976,
											"end": 15999,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "533"
										},
										{
											"begin": 15976,
											"end": 15999,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 15976,
											"end": 15999,
											"name": "tag",
											"source": 19,
											"value": "532"
										},
										{
											"begin": 15976,
											"end": 15999,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 15971,
											"end": 15974,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 15964,
											"end": 16000,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 15954,
											"end": 16006,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 15954,
											"end": 16006,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 15954,
											"end": 16006,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 16012,
											"end": 16117,
											"name": "tag",
											"source": 19,
											"value": "525"
										},
										{
											"begin": 16012,
											"end": 16117,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 16087,
											"end": 16110,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "535"
										},
										{
											"begin": 16104,
											"end": 16109,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 16087,
											"end": 16110,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "536"
										},
										{
											"begin": 16087,
											"end": 16110,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 16087,
											"end": 16110,
											"name": "tag",
											"source": 19,
											"value": "535"
										},
										{
											"begin": 16087,
											"end": 16110,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 16082,
											"end": 16085,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 16075,
											"end": 16111,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 16065,
											"end": 16117,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 16065,
											"end": 16117,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 16065,
											"end": 16117,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 16123,
											"end": 16238,
											"name": "tag",
											"source": 19,
											"value": "537"
										},
										{
											"begin": 16123,
											"end": 16238,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 16208,
											"end": 16231,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "539"
										},
										{
											"begin": 16225,
											"end": 16230,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 16208,
											"end": 16231,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "536"
										},
										{
											"begin": 16208,
											"end": 16231,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 16208,
											"end": 16231,
											"name": "tag",
											"source": 19,
											"value": "539"
										},
										{
											"begin": 16208,
											"end": 16231,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 16203,
											"end": 16206,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 16196,
											"end": 16232,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 16186,
											"end": 16238,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 16186,
											"end": 16238,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 16186,
											"end": 16238,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 16244,
											"end": 16515,
											"name": "tag",
											"source": 19,
											"value": "269"
										},
										{
											"begin": 16244,
											"end": 16515,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 16374,
											"end": 16377,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 16396,
											"end": 16489,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "541"
										},
										{
											"begin": 16485,
											"end": 16488,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 16476,
											"end": 16482,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 16396,
											"end": 16489,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "466"
										},
										{
											"begin": 16396,
											"end": 16489,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 16396,
											"end": 16489,
											"name": "tag",
											"source": 19,
											"value": "541"
										},
										{
											"begin": 16396,
											"end": 16489,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 16389,
											"end": 16489,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 16389,
											"end": 16489,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 16506,
											"end": 16509,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 16499,
											"end": 16509,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 16499,
											"end": 16509,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 16378,
											"end": 16515,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 16378,
											"end": 16515,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 16378,
											"end": 16515,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 16378,
											"end": 16515,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 16378,
											"end": 16515,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 16521,
											"end": 16743,
											"name": "tag",
											"source": 19,
											"value": "37"
										},
										{
											"begin": 16521,
											"end": 16743,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 16614,
											"end": 16618,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 16652,
											"end": 16654,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 16641,
											"end": 16650,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 16637,
											"end": 16655,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 16629,
											"end": 16655,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 16629,
											"end": 16655,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 16665,
											"end": 16736,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "543"
										},
										{
											"begin": 16733,
											"end": 16734,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 16722,
											"end": 16731,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 16718,
											"end": 16735,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 16709,
											"end": 16715,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 16665,
											"end": 16736,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "439"
										},
										{
											"begin": 16665,
											"end": 16736,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 16665,
											"end": 16736,
											"name": "tag",
											"source": 19,
											"value": "543"
										},
										{
											"begin": 16665,
											"end": 16736,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 16619,
											"end": 16743,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 16619,
											"end": 16743,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 16619,
											"end": 16743,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 16619,
											"end": 16743,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 16619,
											"end": 16743,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 16749,
											"end": 17081,
											"name": "tag",
											"source": 19,
											"value": "114"
										},
										{
											"begin": 16749,
											"end": 17081,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 16870,
											"end": 16874,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 16908,
											"end": 16910,
											"name": "PUSH",
											"source": 19,
											"value": "40"
										},
										{
											"begin": 16897,
											"end": 16906,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 16893,
											"end": 16911,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 16885,
											"end": 16911,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 16885,
											"end": 16911,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 16921,
											"end": 16992,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "545"
										},
										{
											"begin": 16989,
											"end": 16990,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 16978,
											"end": 16987,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 16974,
											"end": 16991,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 16965,
											"end": 16971,
											"name": "DUP6",
											"source": 19
										},
										{
											"begin": 16921,
											"end": 16992,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "439"
										},
										{
											"begin": 16921,
											"end": 16992,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 16921,
											"end": 16992,
											"name": "tag",
											"source": 19,
											"value": "545"
										},
										{
											"begin": 16921,
											"end": 16992,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 17002,
											"end": 17074,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "546"
										},
										{
											"begin": 17070,
											"end": 17072,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 17059,
											"end": 17068,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 17055,
											"end": 17073,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 17046,
											"end": 17052,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 17002,
											"end": 17074,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "439"
										},
										{
											"begin": 17002,
											"end": 17074,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 17002,
											"end": 17074,
											"name": "tag",
											"source": 19,
											"value": "546"
										},
										{
											"begin": 17002,
											"end": 17074,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 16875,
											"end": 17081,
											"name": "SWAP4",
											"source": 19
										},
										{
											"begin": 16875,
											"end": 17081,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 16875,
											"end": 17081,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 16875,
											"end": 17081,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 16875,
											"end": 17081,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 16875,
											"end": 17081,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 17087,
											"end": 17529,
											"name": "tag",
											"source": 19,
											"value": "230"
										},
										{
											"begin": 17087,
											"end": 17529,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 17236,
											"end": 17240,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 17274,
											"end": 17276,
											"name": "PUSH",
											"source": 19,
											"value": "60"
										},
										{
											"begin": 17263,
											"end": 17272,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 17259,
											"end": 17277,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 17251,
											"end": 17277,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 17251,
											"end": 17277,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 17287,
											"end": 17358,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "548"
										},
										{
											"begin": 17355,
											"end": 17356,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 17344,
											"end": 17353,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 17340,
											"end": 17357,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 17331,
											"end": 17337,
											"name": "DUP7",
											"source": 19
										},
										{
											"begin": 17287,
											"end": 17358,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "439"
										},
										{
											"begin": 17287,
											"end": 17358,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 17287,
											"end": 17358,
											"name": "tag",
											"source": 19,
											"value": "548"
										},
										{
											"begin": 17287,
											"end": 17358,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 17368,
											"end": 17440,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "549"
										},
										{
											"begin": 17436,
											"end": 17438,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 17425,
											"end": 17434,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 17421,
											"end": 17439,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 17412,
											"end": 17418,
											"name": "DUP6",
											"source": 19
										},
										{
											"begin": 17368,
											"end": 17440,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "439"
										},
										{
											"begin": 17368,
											"end": 17440,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 17368,
											"end": 17440,
											"name": "tag",
											"source": 19,
											"value": "549"
										},
										{
											"begin": 17368,
											"end": 17440,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 17450,
											"end": 17522,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "550"
										},
										{
											"begin": 17518,
											"end": 17520,
											"name": "PUSH",
											"source": 19,
											"value": "40"
										},
										{
											"begin": 17507,
											"end": 17516,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 17503,
											"end": 17521,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 17494,
											"end": 17500,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 17450,
											"end": 17522,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "526"
										},
										{
											"begin": 17450,
											"end": 17522,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 17450,
											"end": 17522,
											"name": "tag",
											"source": 19,
											"value": "550"
										},
										{
											"begin": 17450,
											"end": 17522,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 17241,
											"end": 17529,
											"name": "SWAP5",
											"source": 19
										},
										{
											"begin": 17241,
											"end": 17529,
											"name": "SWAP4",
											"source": 19
										},
										{
											"begin": 17241,
											"end": 17529,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 17241,
											"end": 17529,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 17241,
											"end": 17529,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 17241,
											"end": 17529,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 17241,
											"end": 17529,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 17535,
											"end": 17944,
											"name": "tag",
											"source": 19,
											"value": "71"
										},
										{
											"begin": 17535,
											"end": 17944,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 17696,
											"end": 17700,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 17734,
											"end": 17736,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 17723,
											"end": 17732,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 17719,
											"end": 17737,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 17711,
											"end": 17737,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 17711,
											"end": 17737,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 17783,
											"end": 17792,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 17777,
											"end": 17781,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 17773,
											"end": 17793,
											"name": "SUB",
											"source": 19
										},
										{
											"begin": 17769,
											"end": 17770,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 17758,
											"end": 17767,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 17754,
											"end": 17771,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 17747,
											"end": 17794,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 17811,
											"end": 17937,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "552"
										},
										{
											"begin": 17932,
											"end": 17936,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 17923,
											"end": 17929,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 17811,
											"end": 17937,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "443"
										},
										{
											"begin": 17811,
											"end": 17937,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 17811,
											"end": 17937,
											"name": "tag",
											"source": 19,
											"value": "552"
										},
										{
											"begin": 17811,
											"end": 17937,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 17803,
											"end": 17937,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 17803,
											"end": 17937,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 17701,
											"end": 17944,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 17701,
											"end": 17944,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 17701,
											"end": 17944,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 17701,
											"end": 17944,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 17701,
											"end": 17944,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 17950,
											"end": 18304,
											"name": "tag",
											"source": 19,
											"value": "47"
										},
										{
											"begin": 17950,
											"end": 18304,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 18082,
											"end": 18086,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 18120,
											"end": 18122,
											"name": "PUSH",
											"source": 19,
											"value": "40"
										},
										{
											"begin": 18109,
											"end": 18118,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 18105,
											"end": 18123,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 18097,
											"end": 18123,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 18097,
											"end": 18123,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 18133,
											"end": 18217,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "554"
										},
										{
											"begin": 18214,
											"end": 18215,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 18203,
											"end": 18212,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 18199,
											"end": 18216,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 18190,
											"end": 18196,
											"name": "DUP6",
											"source": 19
										},
										{
											"begin": 18133,
											"end": 18217,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "476"
										},
										{
											"begin": 18133,
											"end": 18217,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 18133,
											"end": 18217,
											"name": "tag",
											"source": 19,
											"value": "554"
										},
										{
											"begin": 18133,
											"end": 18217,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 18227,
											"end": 18297,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "555"
										},
										{
											"begin": 18293,
											"end": 18295,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 18282,
											"end": 18291,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 18278,
											"end": 18296,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 18269,
											"end": 18275,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 18227,
											"end": 18297,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "537"
										},
										{
											"begin": 18227,
											"end": 18297,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 18227,
											"end": 18297,
											"name": "tag",
											"source": 19,
											"value": "555"
										},
										{
											"begin": 18227,
											"end": 18297,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 18087,
											"end": 18304,
											"name": "SWAP4",
											"source": 19
										},
										{
											"begin": 18087,
											"end": 18304,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 18087,
											"end": 18304,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 18087,
											"end": 18304,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 18087,
											"end": 18304,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 18087,
											"end": 18304,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 18310,
											"end": 18582,
											"name": "tag",
											"source": 19,
											"value": "65"
										},
										{
											"begin": 18310,
											"end": 18582,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 18428,
											"end": 18432,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 18466,
											"end": 18468,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 18455,
											"end": 18464,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 18451,
											"end": 18469,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 18443,
											"end": 18469,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 18443,
											"end": 18469,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 18479,
											"end": 18575,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "557"
										},
										{
											"begin": 18572,
											"end": 18573,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 18561,
											"end": 18570,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 18557,
											"end": 18574,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 18548,
											"end": 18554,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 18479,
											"end": 18575,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "479"
										},
										{
											"begin": 18479,
											"end": 18575,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 18479,
											"end": 18575,
											"name": "tag",
											"source": 19,
											"value": "557"
										},
										{
											"begin": 18479,
											"end": 18575,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 18433,
											"end": 18582,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 18433,
											"end": 18582,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 18433,
											"end": 18582,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 18433,
											"end": 18582,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 18433,
											"end": 18582,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 18588,
											"end": 18901,
											"name": "tag",
											"source": 19,
											"value": "292"
										},
										{
											"begin": 18588,
											"end": 18901,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 18701,
											"end": 18705,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 18739,
											"end": 18741,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 18728,
											"end": 18737,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 18724,
											"end": 18742,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 18716,
											"end": 18742,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 18716,
											"end": 18742,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 18788,
											"end": 18797,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 18782,
											"end": 18786,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 18778,
											"end": 18798,
											"name": "SUB",
											"source": 19
										},
										{
											"begin": 18774,
											"end": 18775,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 18763,
											"end": 18772,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 18759,
											"end": 18776,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 18752,
											"end": 18799,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 18816,
											"end": 18894,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "559"
										},
										{
											"begin": 18889,
											"end": 18893,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 18880,
											"end": 18886,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 18816,
											"end": 18894,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "483"
										},
										{
											"begin": 18816,
											"end": 18894,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 18816,
											"end": 18894,
											"name": "tag",
											"source": 19,
											"value": "559"
										},
										{
											"begin": 18816,
											"end": 18894,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 18808,
											"end": 18894,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 18808,
											"end": 18894,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 18706,
											"end": 18901,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 18706,
											"end": 18901,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 18706,
											"end": 18901,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 18706,
											"end": 18901,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 18706,
											"end": 18901,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 18907,
											"end": 19326,
											"name": "tag",
											"source": 19,
											"value": "176"
										},
										{
											"begin": 18907,
											"end": 19326,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 19073,
											"end": 19077,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 19111,
											"end": 19113,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 19100,
											"end": 19109,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 19096,
											"end": 19114,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 19088,
											"end": 19114,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 19088,
											"end": 19114,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 19160,
											"end": 19169,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 19154,
											"end": 19158,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 19150,
											"end": 19170,
											"name": "SUB",
											"source": 19
										},
										{
											"begin": 19146,
											"end": 19147,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 19135,
											"end": 19144,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 19131,
											"end": 19148,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 19124,
											"end": 19171,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 19188,
											"end": 19319,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "561"
										},
										{
											"begin": 19314,
											"end": 19318,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 19188,
											"end": 19319,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "491"
										},
										{
											"begin": 19188,
											"end": 19319,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 19188,
											"end": 19319,
											"name": "tag",
											"source": 19,
											"value": "561"
										},
										{
											"begin": 19188,
											"end": 19319,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 19180,
											"end": 19319,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 19180,
											"end": 19319,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 19078,
											"end": 19326,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 19078,
											"end": 19326,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 19078,
											"end": 19326,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 19078,
											"end": 19326,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 19332,
											"end": 19751,
											"name": "tag",
											"source": 19,
											"value": "299"
										},
										{
											"begin": 19332,
											"end": 19751,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 19498,
											"end": 19502,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 19536,
											"end": 19538,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 19525,
											"end": 19534,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 19521,
											"end": 19539,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 19513,
											"end": 19539,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 19513,
											"end": 19539,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 19585,
											"end": 19594,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 19579,
											"end": 19583,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 19575,
											"end": 19595,
											"name": "SUB",
											"source": 19
										},
										{
											"begin": 19571,
											"end": 19572,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 19560,
											"end": 19569,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 19556,
											"end": 19573,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 19549,
											"end": 19596,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 19613,
											"end": 19744,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "563"
										},
										{
											"begin": 19739,
											"end": 19743,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 19613,
											"end": 19744,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "496"
										},
										{
											"begin": 19613,
											"end": 19744,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 19613,
											"end": 19744,
											"name": "tag",
											"source": 19,
											"value": "563"
										},
										{
											"begin": 19613,
											"end": 19744,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 19605,
											"end": 19744,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 19605,
											"end": 19744,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 19503,
											"end": 19751,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 19503,
											"end": 19751,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 19503,
											"end": 19751,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 19503,
											"end": 19751,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 19757,
											"end": 20176,
											"name": "tag",
											"source": 19,
											"value": "267"
										},
										{
											"begin": 19757,
											"end": 20176,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 19923,
											"end": 19927,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 19961,
											"end": 19963,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 19950,
											"end": 19959,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 19946,
											"end": 19964,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 19938,
											"end": 19964,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 19938,
											"end": 19964,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 20010,
											"end": 20019,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 20004,
											"end": 20008,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 20000,
											"end": 20020,
											"name": "SUB",
											"source": 19
										},
										{
											"begin": 19996,
											"end": 19997,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 19985,
											"end": 19994,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 19981,
											"end": 19998,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 19974,
											"end": 20021,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 20038,
											"end": 20169,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "565"
										},
										{
											"begin": 20164,
											"end": 20168,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 20038,
											"end": 20169,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "501"
										},
										{
											"begin": 20038,
											"end": 20169,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 20038,
											"end": 20169,
											"name": "tag",
											"source": 19,
											"value": "565"
										},
										{
											"begin": 20038,
											"end": 20169,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 20030,
											"end": 20169,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 20030,
											"end": 20169,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 19928,
											"end": 20176,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 19928,
											"end": 20176,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 19928,
											"end": 20176,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 19928,
											"end": 20176,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 20182,
											"end": 20601,
											"name": "tag",
											"source": 19,
											"value": "303"
										},
										{
											"begin": 20182,
											"end": 20601,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 20348,
											"end": 20352,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 20386,
											"end": 20388,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 20375,
											"end": 20384,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 20371,
											"end": 20389,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 20363,
											"end": 20389,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 20363,
											"end": 20389,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 20435,
											"end": 20444,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 20429,
											"end": 20433,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 20425,
											"end": 20445,
											"name": "SUB",
											"source": 19
										},
										{
											"begin": 20421,
											"end": 20422,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 20410,
											"end": 20419,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 20406,
											"end": 20423,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 20399,
											"end": 20446,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 20463,
											"end": 20594,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "567"
										},
										{
											"begin": 20589,
											"end": 20593,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 20463,
											"end": 20594,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "506"
										},
										{
											"begin": 20463,
											"end": 20594,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 20463,
											"end": 20594,
											"name": "tag",
											"source": 19,
											"value": "567"
										},
										{
											"begin": 20463,
											"end": 20594,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 20455,
											"end": 20594,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 20455,
											"end": 20594,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 20353,
											"end": 20601,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 20353,
											"end": 20601,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 20353,
											"end": 20601,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 20353,
											"end": 20601,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 20607,
											"end": 21026,
											"name": "tag",
											"source": 19,
											"value": "283"
										},
										{
											"begin": 20607,
											"end": 21026,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 20773,
											"end": 20777,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 20811,
											"end": 20813,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 20800,
											"end": 20809,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 20796,
											"end": 20814,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 20788,
											"end": 20814,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 20788,
											"end": 20814,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 20860,
											"end": 20869,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 20854,
											"end": 20858,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 20850,
											"end": 20870,
											"name": "SUB",
											"source": 19
										},
										{
											"begin": 20846,
											"end": 20847,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 20835,
											"end": 20844,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 20831,
											"end": 20848,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 20824,
											"end": 20871,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 20888,
											"end": 21019,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "569"
										},
										{
											"begin": 21014,
											"end": 21018,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 20888,
											"end": 21019,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "511"
										},
										{
											"begin": 20888,
											"end": 21019,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 20888,
											"end": 21019,
											"name": "tag",
											"source": 19,
											"value": "569"
										},
										{
											"begin": 20888,
											"end": 21019,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 20880,
											"end": 21019,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 20880,
											"end": 21019,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 20778,
											"end": 21026,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 20778,
											"end": 21026,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 20778,
											"end": 21026,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 20778,
											"end": 21026,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 21032,
											"end": 21451,
											"name": "tag",
											"source": 19,
											"value": "108"
										},
										{
											"begin": 21032,
											"end": 21451,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 21198,
											"end": 21202,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 21236,
											"end": 21238,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 21225,
											"end": 21234,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 21221,
											"end": 21239,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 21213,
											"end": 21239,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 21213,
											"end": 21239,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 21285,
											"end": 21294,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 21279,
											"end": 21283,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 21275,
											"end": 21295,
											"name": "SUB",
											"source": 19
										},
										{
											"begin": 21271,
											"end": 21272,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 21260,
											"end": 21269,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 21256,
											"end": 21273,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 21249,
											"end": 21296,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 21313,
											"end": 21444,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "571"
										},
										{
											"begin": 21439,
											"end": 21443,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 21313,
											"end": 21444,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "516"
										},
										{
											"begin": 21313,
											"end": 21444,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 21313,
											"end": 21444,
											"name": "tag",
											"source": 19,
											"value": "571"
										},
										{
											"begin": 21313,
											"end": 21444,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 21305,
											"end": 21444,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 21305,
											"end": 21444,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 21203,
											"end": 21451,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 21203,
											"end": 21451,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 21203,
											"end": 21451,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 21203,
											"end": 21451,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 21457,
											"end": 21795,
											"name": "tag",
											"source": 19,
											"value": "53"
										},
										{
											"begin": 21457,
											"end": 21795,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 21608,
											"end": 21612,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 21646,
											"end": 21648,
											"name": "PUSH",
											"source": 19,
											"value": "40"
										},
										{
											"begin": 21635,
											"end": 21644,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 21631,
											"end": 21649,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 21623,
											"end": 21649,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 21623,
											"end": 21649,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 21659,
											"end": 21788,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "573"
										},
										{
											"begin": 21785,
											"end": 21786,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 21774,
											"end": 21783,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 21770,
											"end": 21787,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 21761,
											"end": 21767,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 21659,
											"end": 21788,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "521"
										},
										{
											"begin": 21659,
											"end": 21788,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 21659,
											"end": 21788,
											"name": "tag",
											"source": 19,
											"value": "573"
										},
										{
											"begin": 21659,
											"end": 21788,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 21613,
											"end": 21795,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 21613,
											"end": 21795,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 21613,
											"end": 21795,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 21613,
											"end": 21795,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 21613,
											"end": 21795,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 21801,
											"end": 22023,
											"name": "tag",
											"source": 19,
											"value": "29"
										},
										{
											"begin": 21801,
											"end": 22023,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 21894,
											"end": 21898,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 21932,
											"end": 21934,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 21921,
											"end": 21930,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 21917,
											"end": 21935,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 21909,
											"end": 21935,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 21909,
											"end": 21935,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 21945,
											"end": 22016,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "575"
										},
										{
											"begin": 22013,
											"end": 22014,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 22002,
											"end": 22011,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 21998,
											"end": 22015,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 21989,
											"end": 21995,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 21945,
											"end": 22016,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "526"
										},
										{
											"begin": 21945,
											"end": 22016,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 21945,
											"end": 22016,
											"name": "tag",
											"source": 19,
											"value": "575"
										},
										{
											"begin": 21945,
											"end": 22016,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 21899,
											"end": 22023,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 21899,
											"end": 22023,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 21899,
											"end": 22023,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 21899,
											"end": 22023,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 21899,
											"end": 22023,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 22029,
											"end": 22361,
											"name": "tag",
											"source": 19,
											"value": "260"
										},
										{
											"begin": 22029,
											"end": 22361,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 22150,
											"end": 22154,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 22188,
											"end": 22190,
											"name": "PUSH",
											"source": 19,
											"value": "40"
										},
										{
											"begin": 22177,
											"end": 22186,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 22173,
											"end": 22191,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 22165,
											"end": 22191,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 22165,
											"end": 22191,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 22201,
											"end": 22272,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "577"
										},
										{
											"begin": 22269,
											"end": 22270,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 22258,
											"end": 22267,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 22254,
											"end": 22271,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 22245,
											"end": 22251,
											"name": "DUP6",
											"source": 19
										},
										{
											"begin": 22201,
											"end": 22272,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "526"
										},
										{
											"begin": 22201,
											"end": 22272,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 22201,
											"end": 22272,
											"name": "tag",
											"source": 19,
											"value": "577"
										},
										{
											"begin": 22201,
											"end": 22272,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 22282,
											"end": 22354,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "578"
										},
										{
											"begin": 22350,
											"end": 22352,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 22339,
											"end": 22348,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 22335,
											"end": 22353,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 22326,
											"end": 22332,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 22282,
											"end": 22354,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "526"
										},
										{
											"begin": 22282,
											"end": 22354,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 22282,
											"end": 22354,
											"name": "tag",
											"source": 19,
											"value": "578"
										},
										{
											"begin": 22282,
											"end": 22354,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 22155,
											"end": 22361,
											"name": "SWAP4",
											"source": 19
										},
										{
											"begin": 22155,
											"end": 22361,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 22155,
											"end": 22361,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 22155,
											"end": 22361,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 22155,
											"end": 22361,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 22155,
											"end": 22361,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 22367,
											"end": 22809,
											"name": "tag",
											"source": 19,
											"value": "197"
										},
										{
											"begin": 22367,
											"end": 22809,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 22516,
											"end": 22520,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 22554,
											"end": 22556,
											"name": "PUSH",
											"source": 19,
											"value": "60"
										},
										{
											"begin": 22543,
											"end": 22552,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 22539,
											"end": 22557,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 22531,
											"end": 22557,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 22531,
											"end": 22557,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 22567,
											"end": 22638,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "580"
										},
										{
											"begin": 22635,
											"end": 22636,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 22624,
											"end": 22633,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 22620,
											"end": 22637,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 22611,
											"end": 22617,
											"name": "DUP7",
											"source": 19
										},
										{
											"begin": 22567,
											"end": 22638,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "526"
										},
										{
											"begin": 22567,
											"end": 22638,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 22567,
											"end": 22638,
											"name": "tag",
											"source": 19,
											"value": "580"
										},
										{
											"begin": 22567,
											"end": 22638,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 22648,
											"end": 22720,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "581"
										},
										{
											"begin": 22716,
											"end": 22718,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 22705,
											"end": 22714,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 22701,
											"end": 22719,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 22692,
											"end": 22698,
											"name": "DUP6",
											"source": 19
										},
										{
											"begin": 22648,
											"end": 22720,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "526"
										},
										{
											"begin": 22648,
											"end": 22720,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 22648,
											"end": 22720,
											"name": "tag",
											"source": 19,
											"value": "581"
										},
										{
											"begin": 22648,
											"end": 22720,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 22730,
											"end": 22802,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "582"
										},
										{
											"begin": 22798,
											"end": 22800,
											"name": "PUSH",
											"source": 19,
											"value": "40"
										},
										{
											"begin": 22787,
											"end": 22796,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 22783,
											"end": 22801,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 22774,
											"end": 22780,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 22730,
											"end": 22802,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "526"
										},
										{
											"begin": 22730,
											"end": 22802,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 22730,
											"end": 22802,
											"name": "tag",
											"source": 19,
											"value": "582"
										},
										{
											"begin": 22730,
											"end": 22802,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 22521,
											"end": 22809,
											"name": "SWAP5",
											"source": 19
										},
										{
											"begin": 22521,
											"end": 22809,
											"name": "SWAP4",
											"source": 19
										},
										{
											"begin": 22521,
											"end": 22809,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 22521,
											"end": 22809,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 22521,
											"end": 22809,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 22521,
											"end": 22809,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 22521,
											"end": 22809,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 22815,
											"end": 23033,
											"name": "tag",
											"source": 19,
											"value": "75"
										},
										{
											"begin": 22815,
											"end": 23033,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 22906,
											"end": 22910,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 22944,
											"end": 22946,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 22933,
											"end": 22942,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 22929,
											"end": 22947,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 22921,
											"end": 22947,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 22921,
											"end": 22947,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 22957,
											"end": 23026,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "584"
										},
										{
											"begin": 23023,
											"end": 23024,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 23012,
											"end": 23021,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 23008,
											"end": 23025,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 22999,
											"end": 23005,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 22957,
											"end": 23026,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "530"
										},
										{
											"begin": 22957,
											"end": 23026,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 22957,
											"end": 23026,
											"name": "tag",
											"source": 19,
											"value": "584"
										},
										{
											"begin": 22957,
											"end": 23026,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 22911,
											"end": 23033,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 22911,
											"end": 23033,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 22911,
											"end": 23033,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 22911,
											"end": 23033,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 22911,
											"end": 23033,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 23039,
											"end": 23763,
											"name": "tag",
											"source": 19,
											"value": "147"
										},
										{
											"begin": 23039,
											"end": 23763,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 23116,
											"end": 23120,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 23122,
											"end": 23128,
											"name": "DUP1",
											"source": 19
										},
										{
											"begin": 23178,
											"end": 23189,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 23165,
											"end": 23190,
											"name": "CALLDATALOAD",
											"source": 19
										},
										{
											"begin": 23278,
											"end": 23279,
											"name": "PUSH",
											"source": 19,
											"value": "1"
										},
										{
											"begin": 23272,
											"end": 23276,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 23268,
											"end": 23280,
											"name": "SUB",
											"source": 19
										},
										{
											"begin": 23257,
											"end": 23265,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 23241,
											"end": 23255,
											"name": "CALLDATASIZE",
											"source": 19
										},
										{
											"begin": 23237,
											"end": 23266,
											"name": "SUB",
											"source": 19
										},
										{
											"begin": 23233,
											"end": 23281,
											"name": "SUB",
											"source": 19
										},
										{
											"begin": 23213,
											"end": 23231,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 23209,
											"end": 23282,
											"name": "SLT",
											"source": 19
										},
										{
											"begin": 23199,
											"end": 23201,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "586"
										},
										{
											"begin": 23199,
											"end": 23201,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 23286,
											"end": 23365,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "587"
										},
										{
											"begin": 23286,
											"end": 23365,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "588"
										},
										{
											"begin": 23286,
											"end": 23365,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 23286,
											"end": 23365,
											"name": "tag",
											"source": 19,
											"value": "587"
										},
										{
											"begin": 23286,
											"end": 23365,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 23199,
											"end": 23201,
											"name": "tag",
											"source": 19,
											"value": "586"
										},
										{
											"begin": 23199,
											"end": 23201,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 23398,
											"end": 23416,
											"name": "DUP1",
											"source": 19
										},
										{
											"begin": 23388,
											"end": 23396,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 23384,
											"end": 23417,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 23376,
											"end": 23417,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 23376,
											"end": 23417,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 23450,
											"end": 23454,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 23437,
											"end": 23455,
											"name": "CALLDATALOAD",
											"source": 19
										},
										{
											"begin": 23427,
											"end": 23455,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 23427,
											"end": 23455,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 23478,
											"end": 23496,
											"name": "PUSH",
											"source": 19,
											"value": "FFFFFFFFFFFFFFFF"
										},
										{
											"begin": 23470,
											"end": 23476,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 23467,
											"end": 23497,
											"name": "GT",
											"source": 19
										},
										{
											"begin": 23464,
											"end": 23466,
											"name": "ISZERO",
											"source": 19
										},
										{
											"begin": 23464,
											"end": 23466,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "589"
										},
										{
											"begin": 23464,
											"end": 23466,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 23500,
											"end": 23579,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "590"
										},
										{
											"begin": 23500,
											"end": 23579,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "591"
										},
										{
											"begin": 23500,
											"end": 23579,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 23500,
											"end": 23579,
											"name": "tag",
											"source": 19,
											"value": "590"
										},
										{
											"begin": 23500,
											"end": 23579,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 23464,
											"end": 23466,
											"name": "tag",
											"source": 19,
											"value": "589"
										},
										{
											"begin": 23464,
											"end": 23466,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 23608,
											"end": 23610,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 23602,
											"end": 23606,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 23598,
											"end": 23611,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 23590,
											"end": 23611,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 23590,
											"end": 23611,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 23665,
											"end": 23669,
											"name": "PUSH",
											"source": 19,
											"value": "1"
										},
										{
											"begin": 23657,
											"end": 23663,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 23653,
											"end": 23670,
											"name": "MUL",
											"source": 19
										},
										{
											"begin": 23637,
											"end": 23651,
											"name": "CALLDATASIZE",
											"source": 19
										},
										{
											"begin": 23633,
											"end": 23671,
											"name": "SUB",
											"source": 19
										},
										{
											"begin": 23627,
											"end": 23631,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 23623,
											"end": 23672,
											"name": "SGT",
											"source": 19
										},
										{
											"begin": 23620,
											"end": 23622,
											"name": "ISZERO",
											"source": 19
										},
										{
											"begin": 23620,
											"end": 23622,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "592"
										},
										{
											"begin": 23620,
											"end": 23622,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 23675,
											"end": 23754,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "593"
										},
										{
											"begin": 23675,
											"end": 23754,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "594"
										},
										{
											"begin": 23675,
											"end": 23754,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 23675,
											"end": 23754,
											"name": "tag",
											"source": 19,
											"value": "593"
										},
										{
											"begin": 23675,
											"end": 23754,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 23620,
											"end": 23622,
											"name": "tag",
											"source": 19,
											"value": "592"
										},
										{
											"begin": 23620,
											"end": 23622,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 23129,
											"end": 23763,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 23129,
											"end": 23763,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 23129,
											"end": 23763,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 23129,
											"end": 23763,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 23129,
											"end": 23763,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 23129,
											"end": 23763,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 23129,
											"end": 23763,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 23769,
											"end": 23898,
											"name": "tag",
											"source": 19,
											"value": "347"
										},
										{
											"begin": 23769,
											"end": 23898,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 23803,
											"end": 23809,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 23830,
											"end": 23850,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "596"
										},
										{
											"begin": 23830,
											"end": 23850,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "597"
										},
										{
											"begin": 23830,
											"end": 23850,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 23830,
											"end": 23850,
											"name": "tag",
											"source": 19,
											"value": "596"
										},
										{
											"begin": 23830,
											"end": 23850,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 23820,
											"end": 23850,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 23820,
											"end": 23850,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 23859,
											"end": 23892,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "598"
										},
										{
											"begin": 23887,
											"end": 23891,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 23879,
											"end": 23885,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 23859,
											"end": 23892,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "599"
										},
										{
											"begin": 23859,
											"end": 23892,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 23859,
											"end": 23892,
											"name": "tag",
											"source": 19,
											"value": "598"
										},
										{
											"begin": 23859,
											"end": 23892,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 23810,
											"end": 23898,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 23810,
											"end": 23898,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 23810,
											"end": 23898,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 23810,
											"end": 23898,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 23904,
											"end": 23979,
											"name": "tag",
											"source": 19,
											"value": "597"
										},
										{
											"begin": 23904,
											"end": 23979,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 23937,
											"end": 23943,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 23970,
											"end": 23972,
											"name": "PUSH",
											"source": 19,
											"value": "40"
										},
										{
											"begin": 23964,
											"end": 23973,
											"name": "MLOAD",
											"source": 19
										},
										{
											"begin": 23954,
											"end": 23973,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 23954,
											"end": 23973,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 23944,
											"end": 23979,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 23944,
											"end": 23979,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 23985,
											"end": 24126,
											"name": "tag",
											"source": 19,
											"value": "450"
										},
										{
											"begin": 23985,
											"end": 24126,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 24061,
											"end": 24065,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 24084,
											"end": 24087,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 24076,
											"end": 24087,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 24076,
											"end": 24087,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 24114,
											"end": 24118,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 24109,
											"end": 24112,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 24105,
											"end": 24119,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 24097,
											"end": 24119,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 24097,
											"end": 24119,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 24066,
											"end": 24126,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 24066,
											"end": 24126,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 24066,
											"end": 24126,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 24066,
											"end": 24126,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 24132,
											"end": 24255,
											"name": "tag",
											"source": 19,
											"value": "446"
										},
										{
											"begin": 24132,
											"end": 24255,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 24208,
											"end": 24214,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 24242,
											"end": 24247,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 24236,
											"end": 24248,
											"name": "MLOAD",
											"source": 19
										},
										{
											"begin": 24226,
											"end": 24248,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 24226,
											"end": 24248,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 24215,
											"end": 24255,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 24215,
											"end": 24255,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 24215,
											"end": 24255,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 24215,
											"end": 24255,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 24261,
											"end": 24359,
											"name": "tag",
											"source": 19,
											"value": "459"
										},
										{
											"begin": 24261,
											"end": 24359,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 24312,
											"end": 24318,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 24346,
											"end": 24351,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 24340,
											"end": 24352,
											"name": "MLOAD",
											"source": 19
										},
										{
											"begin": 24330,
											"end": 24352,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 24330,
											"end": 24352,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 24319,
											"end": 24359,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 24319,
											"end": 24359,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 24319,
											"end": 24359,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 24319,
											"end": 24359,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 24365,
											"end": 24464,
											"name": "tag",
											"source": 19,
											"value": "486"
										},
										{
											"begin": 24365,
											"end": 24464,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 24417,
											"end": 24423,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 24451,
											"end": 24456,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 24445,
											"end": 24457,
											"name": "MLOAD",
											"source": 19
										},
										{
											"begin": 24435,
											"end": 24457,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 24435,
											"end": 24457,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 24424,
											"end": 24464,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 24424,
											"end": 24464,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 24424,
											"end": 24464,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 24424,
											"end": 24464,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 24470,
											"end": 24592,
											"name": "tag",
											"source": 19,
											"value": "456"
										},
										{
											"begin": 24470,
											"end": 24592,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 24549,
											"end": 24553,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 24581,
											"end": 24585,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 24576,
											"end": 24579,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 24572,
											"end": 24586,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 24564,
											"end": 24586,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 24564,
											"end": 24586,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 24554,
											"end": 24592,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 24554,
											"end": 24592,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 24554,
											"end": 24592,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 24554,
											"end": 24592,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 24598,
											"end": 24791,
											"name": "tag",
											"source": 19,
											"value": "448"
										},
										{
											"begin": 24598,
											"end": 24791,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 24706,
											"end": 24717,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 24740,
											"end": 24746,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 24735,
											"end": 24738,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 24728,
											"end": 24747,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 24780,
											"end": 24784,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 24775,
											"end": 24778,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 24771,
											"end": 24785,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 24756,
											"end": 24785,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 24756,
											"end": 24785,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 24718,
											"end": 24791,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 24718,
											"end": 24791,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 24718,
											"end": 24791,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 24718,
											"end": 24791,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 24718,
											"end": 24791,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 24797,
											"end": 24955,
											"name": "tag",
											"source": 19,
											"value": "461"
										},
										{
											"begin": 24797,
											"end": 24955,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 24870,
											"end": 24881,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 24904,
											"end": 24910,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 24899,
											"end": 24902,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 24892,
											"end": 24911,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 24944,
											"end": 24948,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 24939,
											"end": 24942,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 24935,
											"end": 24949,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 24920,
											"end": 24949,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 24920,
											"end": 24949,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 24882,
											"end": 24955,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 24882,
											"end": 24955,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 24882,
											"end": 24955,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 24882,
											"end": 24955,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 24882,
											"end": 24955,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 24961,
											"end": 25108,
											"name": "tag",
											"source": 19,
											"value": "470"
										},
										{
											"begin": 24961,
											"end": 25108,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 25062,
											"end": 25073,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 25099,
											"end": 25102,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 25084,
											"end": 25102,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 25084,
											"end": 25102,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 25074,
											"end": 25108,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 25074,
											"end": 25108,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 25074,
											"end": 25108,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 25074,
											"end": 25108,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 25074,
											"end": 25108,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 25114,
											"end": 25283,
											"name": "tag",
											"source": 19,
											"value": "488"
										},
										{
											"begin": 25114,
											"end": 25283,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 25198,
											"end": 25209,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 25232,
											"end": 25238,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 25227,
											"end": 25230,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 25220,
											"end": 25239,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 25272,
											"end": 25276,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 25267,
											"end": 25270,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 25263,
											"end": 25277,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 25248,
											"end": 25277,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 25248,
											"end": 25277,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 25210,
											"end": 25283,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 25210,
											"end": 25283,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 25210,
											"end": 25283,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 25210,
											"end": 25283,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 25210,
											"end": 25283,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 25289,
											"end": 25594,
											"name": "tag",
											"source": 19,
											"value": "195"
										},
										{
											"begin": 25289,
											"end": 25594,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 25329,
											"end": 25332,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 25348,
											"end": 25368,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "611"
										},
										{
											"begin": 25366,
											"end": 25367,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 25348,
											"end": 25368,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "529"
										},
										{
											"begin": 25348,
											"end": 25368,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 25348,
											"end": 25368,
											"name": "tag",
											"source": 19,
											"value": "611"
										},
										{
											"begin": 25348,
											"end": 25368,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 25343,
											"end": 25368,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 25343,
											"end": 25368,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 25382,
											"end": 25402,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "612"
										},
										{
											"begin": 25400,
											"end": 25401,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 25382,
											"end": 25402,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "529"
										},
										{
											"begin": 25382,
											"end": 25402,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 25382,
											"end": 25402,
											"name": "tag",
											"source": 19,
											"value": "612"
										},
										{
											"begin": 25382,
											"end": 25402,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 25377,
											"end": 25402,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 25377,
											"end": 25402,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 25536,
											"end": 25537,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 25468,
											"end": 25534,
											"name": "PUSH",
											"source": 19,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 25464,
											"end": 25538,
											"name": "SUB",
											"source": 19
										},
										{
											"begin": 25461,
											"end": 25462,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 25458,
											"end": 25539,
											"name": "GT",
											"source": 19
										},
										{
											"begin": 25455,
											"end": 25457,
											"name": "ISZERO",
											"source": 19
										},
										{
											"begin": 25455,
											"end": 25457,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "613"
										},
										{
											"begin": 25455,
											"end": 25457,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 25542,
											"end": 25560,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "614"
										},
										{
											"begin": 25542,
											"end": 25560,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "615"
										},
										{
											"begin": 25542,
											"end": 25560,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 25542,
											"end": 25560,
											"name": "tag",
											"source": 19,
											"value": "614"
										},
										{
											"begin": 25542,
											"end": 25560,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 25455,
											"end": 25457,
											"name": "tag",
											"source": 19,
											"value": "613"
										},
										{
											"begin": 25455,
											"end": 25457,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 25586,
											"end": 25587,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 25583,
											"end": 25584,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 25579,
											"end": 25588,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 25572,
											"end": 25588,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 25572,
											"end": 25588,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 25333,
											"end": 25594,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 25333,
											"end": 25594,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 25333,
											"end": 25594,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 25333,
											"end": 25594,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 25333,
											"end": 25594,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 25600,
											"end": 25785,
											"name": "tag",
											"source": 19,
											"value": "184"
										},
										{
											"begin": 25600,
											"end": 25785,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 25640,
											"end": 25641,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 25657,
											"end": 25677,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "617"
										},
										{
											"begin": 25675,
											"end": 25676,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 25657,
											"end": 25677,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "529"
										},
										{
											"begin": 25657,
											"end": 25677,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 25657,
											"end": 25677,
											"name": "tag",
											"source": 19,
											"value": "617"
										},
										{
											"begin": 25657,
											"end": 25677,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 25652,
											"end": 25677,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 25652,
											"end": 25677,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 25691,
											"end": 25711,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "618"
										},
										{
											"begin": 25709,
											"end": 25710,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 25691,
											"end": 25711,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "529"
										},
										{
											"begin": 25691,
											"end": 25711,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 25691,
											"end": 25711,
											"name": "tag",
											"source": 19,
											"value": "618"
										},
										{
											"begin": 25691,
											"end": 25711,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 25686,
											"end": 25711,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 25686,
											"end": 25711,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 25730,
											"end": 25731,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 25720,
											"end": 25722,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "619"
										},
										{
											"begin": 25720,
											"end": 25722,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 25735,
											"end": 25753,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "620"
										},
										{
											"begin": 25735,
											"end": 25753,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "621"
										},
										{
											"begin": 25735,
											"end": 25753,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 25735,
											"end": 25753,
											"name": "tag",
											"source": 19,
											"value": "620"
										},
										{
											"begin": 25735,
											"end": 25753,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 25720,
											"end": 25722,
											"name": "tag",
											"source": 19,
											"value": "619"
										},
										{
											"begin": 25720,
											"end": 25722,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 25777,
											"end": 25778,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 25774,
											"end": 25775,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 25770,
											"end": 25779,
											"name": "DIV",
											"source": 19
										},
										{
											"begin": 25765,
											"end": 25779,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 25765,
											"end": 25779,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 25642,
											"end": 25785,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 25642,
											"end": 25785,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 25642,
											"end": 25785,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 25642,
											"end": 25785,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 25642,
											"end": 25785,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 25791,
											"end": 26139,
											"name": "tag",
											"source": 19,
											"value": "182"
										},
										{
											"begin": 25791,
											"end": 26139,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 25831,
											"end": 25838,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 25854,
											"end": 25874,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "623"
										},
										{
											"begin": 25872,
											"end": 25873,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 25854,
											"end": 25874,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "529"
										},
										{
											"begin": 25854,
											"end": 25874,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 25854,
											"end": 25874,
											"name": "tag",
											"source": 19,
											"value": "623"
										},
										{
											"begin": 25854,
											"end": 25874,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 25849,
											"end": 25874,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 25849,
											"end": 25874,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 25888,
											"end": 25908,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "624"
										},
										{
											"begin": 25906,
											"end": 25907,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 25888,
											"end": 25908,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "529"
										},
										{
											"begin": 25888,
											"end": 25908,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 25888,
											"end": 25908,
											"name": "tag",
											"source": 19,
											"value": "624"
										},
										{
											"begin": 25888,
											"end": 25908,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 25883,
											"end": 25908,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 25883,
											"end": 25908,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 26076,
											"end": 26077,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 26008,
											"end": 26074,
											"name": "PUSH",
											"source": 19,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 26004,
											"end": 26078,
											"name": "DIV",
											"source": 19
										},
										{
											"begin": 26001,
											"end": 26002,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 25998,
											"end": 26079,
											"name": "GT",
											"source": 19
										},
										{
											"begin": 25993,
											"end": 25994,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 25986,
											"end": 25995,
											"name": "ISZERO",
											"source": 19
										},
										{
											"begin": 25979,
											"end": 25996,
											"name": "ISZERO",
											"source": 19
										},
										{
											"begin": 25975,
											"end": 26080,
											"name": "AND",
											"source": 19
										},
										{
											"begin": 25972,
											"end": 25974,
											"name": "ISZERO",
											"source": 19
										},
										{
											"begin": 25972,
											"end": 25974,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "625"
										},
										{
											"begin": 25972,
											"end": 25974,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 26083,
											"end": 26101,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "626"
										},
										{
											"begin": 26083,
											"end": 26101,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "615"
										},
										{
											"begin": 26083,
											"end": 26101,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 26083,
											"end": 26101,
											"name": "tag",
											"source": 19,
											"value": "626"
										},
										{
											"begin": 26083,
											"end": 26101,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 25972,
											"end": 25974,
											"name": "tag",
											"source": 19,
											"value": "625"
										},
										{
											"begin": 25972,
											"end": 25974,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 26131,
											"end": 26132,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 26128,
											"end": 26129,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 26124,
											"end": 26133,
											"name": "MUL",
											"source": 19
										},
										{
											"begin": 26113,
											"end": 26133,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 26113,
											"end": 26133,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 25839,
											"end": 26139,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 25839,
											"end": 26139,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 25839,
											"end": 26139,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 25839,
											"end": 26139,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 25839,
											"end": 26139,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 26145,
											"end": 26336,
											"name": "tag",
											"source": 19,
											"value": "204"
										},
										{
											"begin": 26145,
											"end": 26336,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 26185,
											"end": 26189,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 26205,
											"end": 26225,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "628"
										},
										{
											"begin": 26223,
											"end": 26224,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 26205,
											"end": 26225,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "529"
										},
										{
											"begin": 26205,
											"end": 26225,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 26205,
											"end": 26225,
											"name": "tag",
											"source": 19,
											"value": "628"
										},
										{
											"begin": 26205,
											"end": 26225,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 26200,
											"end": 26225,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 26200,
											"end": 26225,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 26239,
											"end": 26259,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "629"
										},
										{
											"begin": 26257,
											"end": 26258,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 26239,
											"end": 26259,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "529"
										},
										{
											"begin": 26239,
											"end": 26259,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 26239,
											"end": 26259,
											"name": "tag",
											"source": 19,
											"value": "629"
										},
										{
											"begin": 26239,
											"end": 26259,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 26234,
											"end": 26259,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 26234,
											"end": 26259,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 26278,
											"end": 26279,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 26275,
											"end": 26276,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 26272,
											"end": 26280,
											"name": "LT",
											"source": 19
										},
										{
											"begin": 26269,
											"end": 26271,
											"name": "ISZERO",
											"source": 19
										},
										{
											"begin": 26269,
											"end": 26271,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "630"
										},
										{
											"begin": 26269,
											"end": 26271,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 26283,
											"end": 26301,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "631"
										},
										{
											"begin": 26283,
											"end": 26301,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "615"
										},
										{
											"begin": 26283,
											"end": 26301,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 26283,
											"end": 26301,
											"name": "tag",
											"source": 19,
											"value": "631"
										},
										{
											"begin": 26283,
											"end": 26301,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 26269,
											"end": 26271,
											"name": "tag",
											"source": 19,
											"value": "630"
										},
										{
											"begin": 26269,
											"end": 26271,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 26328,
											"end": 26329,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 26325,
											"end": 26326,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 26321,
											"end": 26330,
											"name": "SUB",
											"source": 19
										},
										{
											"begin": 26313,
											"end": 26330,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 26313,
											"end": 26330,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 26190,
											"end": 26336,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 26190,
											"end": 26336,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 26190,
											"end": 26336,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 26190,
											"end": 26336,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 26190,
											"end": 26336,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 26342,
											"end": 26438,
											"name": "tag",
											"source": 19,
											"value": "442"
										},
										{
											"begin": 26342,
											"end": 26438,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 26379,
											"end": 26386,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 26408,
											"end": 26432,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "633"
										},
										{
											"begin": 26426,
											"end": 26431,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 26408,
											"end": 26432,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "634"
										},
										{
											"begin": 26408,
											"end": 26432,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 26408,
											"end": 26432,
											"name": "tag",
											"source": 19,
											"value": "633"
										},
										{
											"begin": 26408,
											"end": 26432,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 26397,
											"end": 26432,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 26397,
											"end": 26432,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 26387,
											"end": 26438,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 26387,
											"end": 26438,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 26387,
											"end": 26438,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 26387,
											"end": 26438,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 26444,
											"end": 26534,
											"name": "tag",
											"source": 19,
											"value": "635"
										},
										{
											"begin": 26444,
											"end": 26534,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 26478,
											"end": 26485,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 26521,
											"end": 26526,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 26514,
											"end": 26527,
											"name": "ISZERO",
											"source": 19
										},
										{
											"begin": 26507,
											"end": 26528,
											"name": "ISZERO",
											"source": 19
										},
										{
											"begin": 26496,
											"end": 26528,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 26496,
											"end": 26528,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 26486,
											"end": 26534,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 26486,
											"end": 26534,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 26486,
											"end": 26534,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 26486,
											"end": 26534,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 26540,
											"end": 26649,
											"name": "tag",
											"source": 19,
											"value": "637"
										},
										{
											"begin": 26540,
											"end": 26649,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 26590,
											"end": 26597,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 26619,
											"end": 26643,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "639"
										},
										{
											"begin": 26637,
											"end": 26642,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 26619,
											"end": 26643,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "442"
										},
										{
											"begin": 26619,
											"end": 26643,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 26619,
											"end": 26643,
											"name": "tag",
											"source": 19,
											"value": "639"
										},
										{
											"begin": 26619,
											"end": 26643,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 26608,
											"end": 26643,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 26608,
											"end": 26643,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 26598,
											"end": 26649,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 26598,
											"end": 26649,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 26598,
											"end": 26649,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 26598,
											"end": 26649,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 26655,
											"end": 26770,
											"name": "tag",
											"source": 19,
											"value": "640"
										},
										{
											"begin": 26655,
											"end": 26770,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 26711,
											"end": 26718,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 26740,
											"end": 26764,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "642"
										},
										{
											"begin": 26758,
											"end": 26763,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 26740,
											"end": 26764,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "442"
										},
										{
											"begin": 26740,
											"end": 26764,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 26740,
											"end": 26764,
											"name": "tag",
											"source": 19,
											"value": "642"
										},
										{
											"begin": 26740,
											"end": 26764,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 26729,
											"end": 26764,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 26729,
											"end": 26764,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 26719,
											"end": 26770,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 26719,
											"end": 26770,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 26719,
											"end": 26770,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 26719,
											"end": 26770,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 26776,
											"end": 26888,
											"name": "tag",
											"source": 19,
											"value": "643"
										},
										{
											"begin": 26776,
											"end": 26888,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 26829,
											"end": 26836,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 26858,
											"end": 26882,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "645"
										},
										{
											"begin": 26876,
											"end": 26881,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 26858,
											"end": 26882,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "442"
										},
										{
											"begin": 26858,
											"end": 26882,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 26858,
											"end": 26882,
											"name": "tag",
											"source": 19,
											"value": "645"
										},
										{
											"begin": 26858,
											"end": 26882,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 26847,
											"end": 26882,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 26847,
											"end": 26882,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 26837,
											"end": 26888,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 26837,
											"end": 26888,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 26837,
											"end": 26888,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 26837,
											"end": 26888,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 26894,
											"end": 27020,
											"name": "tag",
											"source": 19,
											"value": "634"
										},
										{
											"begin": 26894,
											"end": 27020,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 26931,
											"end": 26938,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 26971,
											"end": 27013,
											"name": "PUSH",
											"source": 19,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 26964,
											"end": 26969,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 26960,
											"end": 27014,
											"name": "AND",
											"source": 19
										},
										{
											"begin": 26949,
											"end": 27014,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 26949,
											"end": 27014,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 26939,
											"end": 27020,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 26939,
											"end": 27020,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 26939,
											"end": 27020,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 26939,
											"end": 27020,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 27026,
											"end": 27103,
											"name": "tag",
											"source": 19,
											"value": "529"
										},
										{
											"begin": 27026,
											"end": 27103,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 27063,
											"end": 27070,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 27092,
											"end": 27097,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 27081,
											"end": 27097,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 27081,
											"end": 27097,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 27071,
											"end": 27103,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 27071,
											"end": 27103,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 27071,
											"end": 27103,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 27071,
											"end": 27103,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 27109,
											"end": 27202,
											"name": "tag",
											"source": 19,
											"value": "533"
										},
										{
											"begin": 27109,
											"end": 27202,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 27145,
											"end": 27152,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 27185,
											"end": 27195,
											"name": "PUSH",
											"source": 19,
											"value": "FFFFFFFF"
										},
										{
											"begin": 27178,
											"end": 27183,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 27174,
											"end": 27196,
											"name": "AND",
											"source": 19
										},
										{
											"begin": 27163,
											"end": 27196,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 27163,
											"end": 27196,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 27153,
											"end": 27202,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 27153,
											"end": 27202,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 27153,
											"end": 27202,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 27153,
											"end": 27202,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 27208,
											"end": 27309,
											"name": "tag",
											"source": 19,
											"value": "536"
										},
										{
											"begin": 27208,
											"end": 27309,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 27244,
											"end": 27251,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 27284,
											"end": 27302,
											"name": "PUSH",
											"source": 19,
											"value": "FFFFFFFFFFFFFFFF"
										},
										{
											"begin": 27277,
											"end": 27282,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 27273,
											"end": 27303,
											"name": "AND",
											"source": 19
										},
										{
											"begin": 27262,
											"end": 27303,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 27262,
											"end": 27303,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 27252,
											"end": 27309,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 27252,
											"end": 27309,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 27252,
											"end": 27309,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 27252,
											"end": 27309,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 27315,
											"end": 27467,
											"name": "tag",
											"source": 19,
											"value": "475"
										},
										{
											"begin": 27315,
											"end": 27467,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 27378,
											"end": 27387,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 27411,
											"end": 27461,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "651"
										},
										{
											"begin": 27455,
											"end": 27460,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 27411,
											"end": 27461,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "652"
										},
										{
											"begin": 27411,
											"end": 27461,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 27411,
											"end": 27461,
											"name": "tag",
											"source": 19,
											"value": "651"
										},
										{
											"begin": 27411,
											"end": 27461,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 27398,
											"end": 27461,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 27398,
											"end": 27461,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 27388,
											"end": 27467,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 27388,
											"end": 27467,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 27388,
											"end": 27467,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 27388,
											"end": 27467,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 27473,
											"end": 27599,
											"name": "tag",
											"source": 19,
											"value": "652"
										},
										{
											"begin": 27473,
											"end": 27599,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 27536,
											"end": 27545,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 27569,
											"end": 27593,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "654"
										},
										{
											"begin": 27587,
											"end": 27592,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 27569,
											"end": 27593,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "634"
										},
										{
											"begin": 27569,
											"end": 27593,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 27569,
											"end": 27593,
											"name": "tag",
											"source": 19,
											"value": "654"
										},
										{
											"begin": 27569,
											"end": 27593,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 27556,
											"end": 27593,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 27556,
											"end": 27593,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 27546,
											"end": 27599,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 27546,
											"end": 27599,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 27546,
											"end": 27599,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 27546,
											"end": 27599,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 27605,
											"end": 27781,
											"name": "tag",
											"source": 19,
											"value": "482"
										},
										{
											"begin": 27605,
											"end": 27781,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 27680,
											"end": 27689,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 27713,
											"end": 27775,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "656"
										},
										{
											"begin": 27769,
											"end": 27774,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 27713,
											"end": 27775,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "657"
										},
										{
											"begin": 27713,
											"end": 27775,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 27713,
											"end": 27775,
											"name": "tag",
											"source": 19,
											"value": "656"
										},
										{
											"begin": 27713,
											"end": 27775,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 27700,
											"end": 27775,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 27700,
											"end": 27775,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 27690,
											"end": 27781,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 27690,
											"end": 27781,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 27690,
											"end": 27781,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 27690,
											"end": 27781,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 27787,
											"end": 27925,
											"name": "tag",
											"source": 19,
											"value": "657"
										},
										{
											"begin": 27787,
											"end": 27925,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 27862,
											"end": 27871,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 27895,
											"end": 27919,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "659"
										},
										{
											"begin": 27913,
											"end": 27918,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 27895,
											"end": 27919,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "634"
										},
										{
											"begin": 27895,
											"end": 27919,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 27895,
											"end": 27919,
											"name": "tag",
											"source": 19,
											"value": "659"
										},
										{
											"begin": 27895,
											"end": 27919,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 27882,
											"end": 27919,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 27882,
											"end": 27919,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 27872,
											"end": 27925,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 27872,
											"end": 27925,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 27872,
											"end": 27925,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 27872,
											"end": 27925,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 27931,
											"end": 28238,
											"name": "tag",
											"source": 19,
											"value": "463"
										},
										{
											"begin": 27931,
											"end": 28238,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 27999,
											"end": 28000,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 28009,
											"end": 28122,
											"name": "tag",
											"source": 19,
											"value": "661"
										},
										{
											"begin": 28009,
											"end": 28122,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 28023,
											"end": 28029,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 28020,
											"end": 28021,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 28017,
											"end": 28030,
											"name": "LT",
											"source": 19
										},
										{
											"begin": 28009,
											"end": 28122,
											"name": "ISZERO",
											"source": 19
										},
										{
											"begin": 28009,
											"end": 28122,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "663"
										},
										{
											"begin": 28009,
											"end": 28122,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 28108,
											"end": 28109,
											"name": "DUP1",
											"source": 19
										},
										{
											"begin": 28103,
											"end": 28106,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 28099,
											"end": 28110,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 28093,
											"end": 28111,
											"name": "MLOAD",
											"source": 19
										},
										{
											"begin": 28089,
											"end": 28090,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 28084,
											"end": 28087,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 28080,
											"end": 28091,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 28073,
											"end": 28112,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 28045,
											"end": 28047,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 28042,
											"end": 28043,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 28038,
											"end": 28048,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 28033,
											"end": 28048,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 28033,
											"end": 28048,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 28009,
											"end": 28122,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "661"
										},
										{
											"begin": 28009,
											"end": 28122,
											"name": "JUMP",
											"source": 19
										},
										{
											"begin": 28009,
											"end": 28122,
											"name": "tag",
											"source": 19,
											"value": "663"
										},
										{
											"begin": 28009,
											"end": 28122,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 28140,
											"end": 28146,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 28137,
											"end": 28138,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 28134,
											"end": 28147,
											"name": "GT",
											"source": 19
										},
										{
											"begin": 28131,
											"end": 28133,
											"name": "ISZERO",
											"source": 19
										},
										{
											"begin": 28131,
											"end": 28133,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "664"
										},
										{
											"begin": 28131,
											"end": 28133,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 28220,
											"end": 28221,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 28211,
											"end": 28217,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 28206,
											"end": 28209,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 28202,
											"end": 28218,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 28195,
											"end": 28222,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 28131,
											"end": 28133,
											"name": "tag",
											"source": 19,
											"value": "664"
										},
										{
											"begin": 28131,
											"end": 28133,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 27980,
											"end": 28238,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 27980,
											"end": 28238,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 27980,
											"end": 28238,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 27980,
											"end": 28238,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 27980,
											"end": 28238,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 28244,
											"end": 28525,
											"name": "tag",
											"source": 19,
											"value": "599"
										},
										{
											"begin": 28244,
											"end": 28525,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 28327,
											"end": 28354,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "666"
										},
										{
											"begin": 28349,
											"end": 28353,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 28327,
											"end": 28354,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "465"
										},
										{
											"begin": 28327,
											"end": 28354,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 28327,
											"end": 28354,
											"name": "tag",
											"source": 19,
											"value": "666"
										},
										{
											"begin": 28327,
											"end": 28354,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 28319,
											"end": 28325,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 28315,
											"end": 28355,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 28457,
											"end": 28463,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 28445,
											"end": 28455,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 28442,
											"end": 28464,
											"name": "LT",
											"source": 19
										},
										{
											"begin": 28421,
											"end": 28439,
											"name": "PUSH",
											"source": 19,
											"value": "FFFFFFFFFFFFFFFF"
										},
										{
											"begin": 28409,
											"end": 28419,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 28406,
											"end": 28440,
											"name": "GT",
											"source": 19
										},
										{
											"begin": 28403,
											"end": 28465,
											"name": "OR",
											"source": 19
										},
										{
											"begin": 28400,
											"end": 28402,
											"name": "ISZERO",
											"source": 19
										},
										{
											"begin": 28400,
											"end": 28402,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "667"
										},
										{
											"begin": 28400,
											"end": 28402,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 28468,
											"end": 28486,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "668"
										},
										{
											"begin": 28468,
											"end": 28486,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "136"
										},
										{
											"begin": 28468,
											"end": 28486,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 28468,
											"end": 28486,
											"name": "tag",
											"source": 19,
											"value": "668"
										},
										{
											"begin": 28468,
											"end": 28486,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 28400,
											"end": 28402,
											"name": "tag",
											"source": 19,
											"value": "667"
										},
										{
											"begin": 28400,
											"end": 28402,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 28508,
											"end": 28518,
											"name": "DUP1",
											"source": 19
										},
										{
											"begin": 28504,
											"end": 28506,
											"name": "PUSH",
											"source": 19,
											"value": "40"
										},
										{
											"begin": 28497,
											"end": 28519,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 28287,
											"end": 28525,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 28287,
											"end": 28525,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 28287,
											"end": 28525,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 28287,
											"end": 28525,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 28531,
											"end": 28764,
											"name": "tag",
											"source": 19,
											"value": "152"
										},
										{
											"begin": 28531,
											"end": 28764,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 28570,
											"end": 28573,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 28593,
											"end": 28617,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "670"
										},
										{
											"begin": 28611,
											"end": 28616,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 28593,
											"end": 28617,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "529"
										},
										{
											"begin": 28593,
											"end": 28617,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 28593,
											"end": 28617,
											"name": "tag",
											"source": 19,
											"value": "670"
										},
										{
											"begin": 28593,
											"end": 28617,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 28584,
											"end": 28617,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 28584,
											"end": 28617,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 28639,
											"end": 28705,
											"name": "PUSH",
											"source": 19,
											"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
										},
										{
											"begin": 28632,
											"end": 28637,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 28629,
											"end": 28706,
											"name": "EQ",
											"source": 19
										},
										{
											"begin": 28626,
											"end": 28628,
											"name": "ISZERO",
											"source": 19
										},
										{
											"begin": 28626,
											"end": 28628,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "671"
										},
										{
											"begin": 28626,
											"end": 28628,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 28709,
											"end": 28727,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "672"
										},
										{
											"begin": 28709,
											"end": 28727,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "615"
										},
										{
											"begin": 28709,
											"end": 28727,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 28709,
											"end": 28727,
											"name": "tag",
											"source": 19,
											"value": "672"
										},
										{
											"begin": 28709,
											"end": 28727,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 28626,
											"end": 28628,
											"name": "tag",
											"source": 19,
											"value": "671"
										},
										{
											"begin": 28626,
											"end": 28628,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 28756,
											"end": 28757,
											"name": "PUSH",
											"source": 19,
											"value": "1"
										},
										{
											"begin": 28749,
											"end": 28754,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 28745,
											"end": 28758,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 28738,
											"end": 28758,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 28738,
											"end": 28758,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 28574,
											"end": 28764,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 28574,
											"end": 28764,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 28574,
											"end": 28764,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 28574,
											"end": 28764,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 28770,
											"end": 28950,
											"name": "tag",
											"source": 19,
											"value": "615"
										},
										{
											"begin": 28770,
											"end": 28950,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 28818,
											"end": 28895,
											"name": "PUSH",
											"source": 19,
											"value": "4E487B7100000000000000000000000000000000000000000000000000000000"
										},
										{
											"begin": 28815,
											"end": 28816,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 28808,
											"end": 28896,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 28915,
											"end": 28919,
											"name": "PUSH",
											"source": 19,
											"value": "11"
										},
										{
											"begin": 28912,
											"end": 28913,
											"name": "PUSH",
											"source": 19,
											"value": "4"
										},
										{
											"begin": 28905,
											"end": 28920,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 28939,
											"end": 28943,
											"name": "PUSH",
											"source": 19,
											"value": "24"
										},
										{
											"begin": 28936,
											"end": 28937,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 28929,
											"end": 28944,
											"name": "REVERT",
											"source": 19
										},
										{
											"begin": 28956,
											"end": 29136,
											"name": "tag",
											"source": 19,
											"value": "621"
										},
										{
											"begin": 28956,
											"end": 29136,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 29004,
											"end": 29081,
											"name": "PUSH",
											"source": 19,
											"value": "4E487B7100000000000000000000000000000000000000000000000000000000"
										},
										{
											"begin": 29001,
											"end": 29002,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 28994,
											"end": 29082,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 29101,
											"end": 29105,
											"name": "PUSH",
											"source": 19,
											"value": "12"
										},
										{
											"begin": 29098,
											"end": 29099,
											"name": "PUSH",
											"source": 19,
											"value": "4"
										},
										{
											"begin": 29091,
											"end": 29106,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 29125,
											"end": 29129,
											"name": "PUSH",
											"source": 19,
											"value": "24"
										},
										{
											"begin": 29122,
											"end": 29123,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 29115,
											"end": 29130,
											"name": "REVERT",
											"source": 19
										},
										{
											"begin": 29142,
											"end": 29322,
											"name": "tag",
											"source": 19,
											"value": "145"
										},
										{
											"begin": 29142,
											"end": 29322,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 29190,
											"end": 29267,
											"name": "PUSH",
											"source": 19,
											"value": "4E487B7100000000000000000000000000000000000000000000000000000000"
										},
										{
											"begin": 29187,
											"end": 29188,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 29180,
											"end": 29268,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 29287,
											"end": 29291,
											"name": "PUSH",
											"source": 19,
											"value": "32"
										},
										{
											"begin": 29284,
											"end": 29285,
											"name": "PUSH",
											"source": 19,
											"value": "4"
										},
										{
											"begin": 29277,
											"end": 29292,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 29311,
											"end": 29315,
											"name": "PUSH",
											"source": 19,
											"value": "24"
										},
										{
											"begin": 29308,
											"end": 29309,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 29301,
											"end": 29316,
											"name": "REVERT",
											"source": 19
										},
										{
											"begin": 29328,
											"end": 29508,
											"name": "tag",
											"source": 19,
											"value": "136"
										},
										{
											"begin": 29328,
											"end": 29508,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 29376,
											"end": 29453,
											"name": "PUSH",
											"source": 19,
											"value": "4E487B7100000000000000000000000000000000000000000000000000000000"
										},
										{
											"begin": 29373,
											"end": 29374,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 29366,
											"end": 29454,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 29473,
											"end": 29477,
											"name": "PUSH",
											"source": 19,
											"value": "41"
										},
										{
											"begin": 29470,
											"end": 29471,
											"name": "PUSH",
											"source": 19,
											"value": "4"
										},
										{
											"begin": 29463,
											"end": 29478,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 29497,
											"end": 29501,
											"name": "PUSH",
											"source": 19,
											"value": "24"
										},
										{
											"begin": 29494,
											"end": 29495,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 29487,
											"end": 29502,
											"name": "REVERT",
											"source": 19
										},
										{
											"begin": 29514,
											"end": 29631,
											"name": "tag",
											"source": 19,
											"value": "321"
										},
										{
											"begin": 29514,
											"end": 29631,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 29623,
											"end": 29624,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 29620,
											"end": 29621,
											"name": "DUP1",
											"source": 19
										},
										{
											"begin": 29613,
											"end": 29625,
											"name": "REVERT",
											"source": 19
										},
										{
											"begin": 29637,
											"end": 29754,
											"name": "tag",
											"source": 19,
											"value": "318"
										},
										{
											"begin": 29637,
											"end": 29754,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 29746,
											"end": 29747,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 29743,
											"end": 29744,
											"name": "DUP1",
											"source": 19
										},
										{
											"begin": 29736,
											"end": 29748,
											"name": "REVERT",
											"source": 19
										},
										{
											"begin": 29760,
											"end": 29877,
											"name": "tag",
											"source": 19,
											"value": "591"
										},
										{
											"begin": 29760,
											"end": 29877,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 29869,
											"end": 29870,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 29866,
											"end": 29867,
											"name": "DUP1",
											"source": 19
										},
										{
											"begin": 29859,
											"end": 29871,
											"name": "REVERT",
											"source": 19
										},
										{
											"begin": 29883,
											"end": 30000,
											"name": "tag",
											"source": 19,
											"value": "345"
										},
										{
											"begin": 29883,
											"end": 30000,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 29992,
											"end": 29993,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 29989,
											"end": 29990,
											"name": "DUP1",
											"source": 19
										},
										{
											"begin": 29982,
											"end": 29994,
											"name": "REVERT",
											"source": 19
										},
										{
											"begin": 30006,
											"end": 30123,
											"name": "tag",
											"source": 19,
											"value": "588"
										},
										{
											"begin": 30006,
											"end": 30123,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 30115,
											"end": 30116,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 30112,
											"end": 30113,
											"name": "DUP1",
											"source": 19
										},
										{
											"begin": 30105,
											"end": 30117,
											"name": "REVERT",
											"source": 19
										},
										{
											"begin": 30252,
											"end": 30369,
											"name": "tag",
											"source": 19,
											"value": "324"
										},
										{
											"begin": 30252,
											"end": 30369,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 30361,
											"end": 30362,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 30358,
											"end": 30359,
											"name": "DUP1",
											"source": 19
										},
										{
											"begin": 30351,
											"end": 30363,
											"name": "REVERT",
											"source": 19
										},
										{
											"begin": 30375,
											"end": 30492,
											"name": "tag",
											"source": 19,
											"value": "594"
										},
										{
											"begin": 30375,
											"end": 30492,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 30484,
											"end": 30485,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 30481,
											"end": 30482,
											"name": "DUP1",
											"source": 19
										},
										{
											"begin": 30474,
											"end": 30486,
											"name": "REVERT",
											"source": 19
										},
										{
											"begin": 30498,
											"end": 30615,
											"name": "tag",
											"source": 19,
											"value": "417"
										},
										{
											"begin": 30498,
											"end": 30615,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 30607,
											"end": 30608,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 30604,
											"end": 30605,
											"name": "DUP1",
											"source": 19
										},
										{
											"begin": 30597,
											"end": 30609,
											"name": "REVERT",
											"source": 19
										},
										{
											"begin": 30621,
											"end": 30738,
											"name": "tag",
											"source": 19,
											"value": "364"
										},
										{
											"begin": 30621,
											"end": 30738,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 30730,
											"end": 30731,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 30727,
											"end": 30728,
											"name": "DUP1",
											"source": 19
										},
										{
											"begin": 30720,
											"end": 30732,
											"name": "REVERT",
											"source": 19
										},
										{
											"begin": 30744,
											"end": 30846,
											"name": "tag",
											"source": 19,
											"value": "465"
										},
										{
											"begin": 30744,
											"end": 30846,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 30785,
											"end": 30791,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 30836,
											"end": 30838,
											"name": "PUSH",
											"source": 19,
											"value": "1F"
										},
										{
											"begin": 30832,
											"end": 30839,
											"name": "NOT",
											"source": 19
										},
										{
											"begin": 30827,
											"end": 30829,
											"name": "PUSH",
											"source": 19,
											"value": "1F"
										},
										{
											"begin": 30820,
											"end": 30825,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 30816,
											"end": 30830,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 30812,
											"end": 30840,
											"name": "AND",
											"source": 19
										},
										{
											"begin": 30802,
											"end": 30840,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 30802,
											"end": 30840,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 30792,
											"end": 30846,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 30792,
											"end": 30846,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 30792,
											"end": 30846,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 30792,
											"end": 30846,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 30852,
											"end": 31025,
											"name": "tag",
											"source": 19,
											"value": "495"
										},
										{
											"begin": 30852,
											"end": 31025,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 30992,
											"end": 31017,
											"name": "PUSH",
											"source": 19,
											"value": "475265776172642F6F6E6C792D6C697175696461746F72000000000000000000"
										},
										{
											"begin": 30988,
											"end": 30989,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 30980,
											"end": 30986,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 30976,
											"end": 30990,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 30969,
											"end": 31018,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 30958,
											"end": 31025,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 30958,
											"end": 31025,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 31031,
											"end": 31256,
											"name": "tag",
											"source": 19,
											"value": "500"
										},
										{
											"begin": 31031,
											"end": 31256,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 31171,
											"end": 31205,
											"name": "PUSH",
											"source": 19,
											"value": "416464726573733A20696E73756666696369656E742062616C616E636520666F"
										},
										{
											"begin": 31167,
											"end": 31168,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 31159,
											"end": 31165,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 31155,
											"end": 31169,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 31148,
											"end": 31206,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 31240,
											"end": 31248,
											"name": "PUSH",
											"source": 19,
											"value": "722063616C6C0000000000000000000000000000000000000000000000000000"
										},
										{
											"begin": 31235,
											"end": 31237,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 31227,
											"end": 31233,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 31223,
											"end": 31238,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 31216,
											"end": 31249,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 31137,
											"end": 31256,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 31137,
											"end": 31256,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 31262,
											"end": 31487,
											"name": "tag",
											"source": 19,
											"value": "505"
										},
										{
											"begin": 31262,
											"end": 31487,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 31402,
											"end": 31436,
											"name": "PUSH",
											"source": 19,
											"value": "416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F"
										},
										{
											"begin": 31398,
											"end": 31399,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 31390,
											"end": 31396,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 31386,
											"end": 31400,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 31379,
											"end": 31437,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 31471,
											"end": 31479,
											"name": "PUSH",
											"source": 19,
											"value": "6E74726163740000000000000000000000000000000000000000000000000000"
										},
										{
											"begin": 31466,
											"end": 31468,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 31458,
											"end": 31464,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 31454,
											"end": 31469,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 31447,
											"end": 31480,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 31368,
											"end": 31487,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 31368,
											"end": 31487,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 31493,
											"end": 31672,
											"name": "tag",
											"source": 19,
											"value": "510"
										},
										{
											"begin": 31493,
											"end": 31672,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 31633,
											"end": 31664,
											"name": "PUSH",
											"source": 19,
											"value": "416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000"
										},
										{
											"begin": 31629,
											"end": 31630,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 31621,
											"end": 31627,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 31617,
											"end": 31631,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 31610,
											"end": 31665,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 31599,
											"end": 31672,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 31599,
											"end": 31672,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 31678,
											"end": 31907,
											"name": "tag",
											"source": 19,
											"value": "515"
										},
										{
											"begin": 31678,
											"end": 31907,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 31818,
											"end": 31852,
											"name": "PUSH",
											"source": 19,
											"value": "5361666545524332303A204552433230206F7065726174696F6E20646964206E"
										},
										{
											"begin": 31814,
											"end": 31815,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 31806,
											"end": 31812,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 31802,
											"end": 31816,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 31795,
											"end": 31853,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 31887,
											"end": 31899,
											"name": "PUSH",
											"source": 19,
											"value": "6F74207375636365656400000000000000000000000000000000000000000000"
										},
										{
											"begin": 31882,
											"end": 31884,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 31874,
											"end": 31880,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 31870,
											"end": 31885,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 31863,
											"end": 31900,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 31784,
											"end": 31907,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 31784,
											"end": 31907,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 31913,
											"end": 32091,
											"name": "tag",
											"source": 19,
											"value": "520"
										},
										{
											"begin": 31913,
											"end": 32091,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 32053,
											"end": 32083,
											"name": "PUSH",
											"source": 19,
											"value": "475265776172642F6F6E6C792D4761756765436F6E74726F6C6C657200000000"
										},
										{
											"begin": 32049,
											"end": 32050,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 32041,
											"end": 32047,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 32037,
											"end": 32051,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 32030,
											"end": 32084,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 32019,
											"end": 32091,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 32019,
											"end": 32091,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 32097,
											"end": 32219,
											"name": "tag",
											"source": 19,
											"value": "313"
										},
										{
											"begin": 32097,
											"end": 32219,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 32170,
											"end": 32194,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "696"
										},
										{
											"begin": 32188,
											"end": 32193,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 32170,
											"end": 32194,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "442"
										},
										{
											"begin": 32170,
											"end": 32194,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 32170,
											"end": 32194,
											"name": "tag",
											"source": 19,
											"value": "696"
										},
										{
											"begin": 32170,
											"end": 32194,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 32163,
											"end": 32168,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 32160,
											"end": 32195,
											"name": "EQ",
											"source": 19
										},
										{
											"begin": 32150,
											"end": 32152,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "697"
										},
										{
											"begin": 32150,
											"end": 32152,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 32209,
											"end": 32210,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 32206,
											"end": 32207,
											"name": "DUP1",
											"source": 19
										},
										{
											"begin": 32199,
											"end": 32211,
											"name": "REVERT",
											"source": 19
										},
										{
											"begin": 32150,
											"end": 32152,
											"name": "tag",
											"source": 19,
											"value": "697"
										},
										{
											"begin": 32150,
											"end": 32152,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 32140,
											"end": 32219,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 32140,
											"end": 32219,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 32225,
											"end": 32341,
											"name": "tag",
											"source": 19,
											"value": "328"
										},
										{
											"begin": 32225,
											"end": 32341,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 32295,
											"end": 32316,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "699"
										},
										{
											"begin": 32310,
											"end": 32315,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 32295,
											"end": 32316,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "635"
										},
										{
											"begin": 32295,
											"end": 32316,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 32295,
											"end": 32316,
											"name": "tag",
											"source": 19,
											"value": "699"
										},
										{
											"begin": 32295,
											"end": 32316,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 32288,
											"end": 32293,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 32285,
											"end": 32317,
											"name": "EQ",
											"source": 19
										},
										{
											"begin": 32275,
											"end": 32277,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "700"
										},
										{
											"begin": 32275,
											"end": 32277,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 32331,
											"end": 32332,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 32328,
											"end": 32329,
											"name": "DUP1",
											"source": 19
										},
										{
											"begin": 32321,
											"end": 32333,
											"name": "REVERT",
											"source": 19
										},
										{
											"begin": 32275,
											"end": 32277,
											"name": "tag",
											"source": 19,
											"value": "700"
										},
										{
											"begin": 32275,
											"end": 32277,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 32265,
											"end": 32341,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 32265,
											"end": 32341,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 32347,
											"end": 32495,
											"name": "tag",
											"source": 19,
											"value": "332"
										},
										{
											"begin": 32347,
											"end": 32495,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 32433,
											"end": 32470,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "702"
										},
										{
											"begin": 32464,
											"end": 32469,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 32433,
											"end": 32470,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "637"
										},
										{
											"begin": 32433,
											"end": 32470,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 32433,
											"end": 32470,
											"name": "tag",
											"source": 19,
											"value": "702"
										},
										{
											"begin": 32433,
											"end": 32470,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 32426,
											"end": 32431,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 32423,
											"end": 32471,
											"name": "EQ",
											"source": 19
										},
										{
											"begin": 32413,
											"end": 32415,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "703"
										},
										{
											"begin": 32413,
											"end": 32415,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 32485,
											"end": 32486,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 32482,
											"end": 32483,
											"name": "DUP1",
											"source": 19
										},
										{
											"begin": 32475,
											"end": 32487,
											"name": "REVERT",
											"source": 19
										},
										{
											"begin": 32413,
											"end": 32415,
											"name": "tag",
											"source": 19,
											"value": "703"
										},
										{
											"begin": 32413,
											"end": 32415,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 32403,
											"end": 32495,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 32403,
											"end": 32495,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 32501,
											"end": 32661,
											"name": "tag",
											"source": 19,
											"value": "336"
										},
										{
											"begin": 32501,
											"end": 32661,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 32593,
											"end": 32636,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "705"
										},
										{
											"begin": 32630,
											"end": 32635,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 32593,
											"end": 32636,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "640"
										},
										{
											"begin": 32593,
											"end": 32636,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 32593,
											"end": 32636,
											"name": "tag",
											"source": 19,
											"value": "705"
										},
										{
											"begin": 32593,
											"end": 32636,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 32586,
											"end": 32591,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 32583,
											"end": 32637,
											"name": "EQ",
											"source": 19
										},
										{
											"begin": 32573,
											"end": 32575,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "706"
										},
										{
											"begin": 32573,
											"end": 32575,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 32651,
											"end": 32652,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 32648,
											"end": 32649,
											"name": "DUP1",
											"source": 19
										},
										{
											"begin": 32641,
											"end": 32653,
											"name": "REVERT",
											"source": 19
										},
										{
											"begin": 32573,
											"end": 32575,
											"name": "tag",
											"source": 19,
											"value": "706"
										},
										{
											"begin": 32573,
											"end": 32575,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 32563,
											"end": 32661,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 32563,
											"end": 32661,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 32667,
											"end": 32821,
											"name": "tag",
											"source": 19,
											"value": "340"
										},
										{
											"begin": 32667,
											"end": 32821,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 32756,
											"end": 32796,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "708"
										},
										{
											"begin": 32790,
											"end": 32795,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 32756,
											"end": 32796,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "643"
										},
										{
											"begin": 32756,
											"end": 32796,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 32756,
											"end": 32796,
											"name": "tag",
											"source": 19,
											"value": "708"
										},
										{
											"begin": 32756,
											"end": 32796,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 32749,
											"end": 32754,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 32746,
											"end": 32797,
											"name": "EQ",
											"source": 19
										},
										{
											"begin": 32736,
											"end": 32738,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "709"
										},
										{
											"begin": 32736,
											"end": 32738,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 32811,
											"end": 32812,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 32808,
											"end": 32809,
											"name": "DUP1",
											"source": 19
										},
										{
											"begin": 32801,
											"end": 32813,
											"name": "REVERT",
											"source": 19
										},
										{
											"begin": 32736,
											"end": 32738,
											"name": "tag",
											"source": 19,
											"value": "709"
										},
										{
											"begin": 32736,
											"end": 32738,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 32726,
											"end": 32821,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 32726,
											"end": 32821,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 32827,
											"end": 32949,
											"name": "tag",
											"source": 19,
											"value": "354"
										},
										{
											"begin": 32827,
											"end": 32949,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 32900,
											"end": 32924,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "711"
										},
										{
											"begin": 32918,
											"end": 32923,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 32900,
											"end": 32924,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "529"
										},
										{
											"begin": 32900,
											"end": 32924,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 32900,
											"end": 32924,
											"name": "tag",
											"source": 19,
											"value": "711"
										},
										{
											"begin": 32900,
											"end": 32924,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 32893,
											"end": 32898,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 32890,
											"end": 32925,
											"name": "EQ",
											"source": 19
										},
										{
											"begin": 32880,
											"end": 32882,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "712"
										},
										{
											"begin": 32880,
											"end": 32882,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 32939,
											"end": 32940,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 32936,
											"end": 32937,
											"name": "DUP1",
											"source": 19
										},
										{
											"begin": 32929,
											"end": 32941,
											"name": "REVERT",
											"source": 19
										},
										{
											"begin": 32880,
											"end": 32882,
											"name": "tag",
											"source": 19,
											"value": "712"
										},
										{
											"begin": 32880,
											"end": 32882,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 32870,
											"end": 32949,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 32870,
											"end": 32949,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 32955,
											"end": 33075,
											"name": "tag",
											"source": 19,
											"value": "360"
										},
										{
											"begin": 32955,
											"end": 33075,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 33027,
											"end": 33050,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "714"
										},
										{
											"begin": 33044,
											"end": 33049,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 33027,
											"end": 33050,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "536"
										},
										{
											"begin": 33027,
											"end": 33050,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 33027,
											"end": 33050,
											"name": "tag",
											"source": 19,
											"value": "714"
										},
										{
											"begin": 33027,
											"end": 33050,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 33020,
											"end": 33025,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 33017,
											"end": 33051,
											"name": "EQ",
											"source": 19
										},
										{
											"begin": 33007,
											"end": 33009,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "715"
										},
										{
											"begin": 33007,
											"end": 33009,
											"name": "JUMPI",
											"source": 19
										},
										{
											"begin": 33065,
											"end": 33066,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 33062,
											"end": 33063,
											"name": "DUP1",
											"source": 19
										},
										{
											"begin": 33055,
											"end": 33067,
											"name": "REVERT",
											"source": 19
										},
										{
											"begin": 33007,
											"end": 33009,
											"name": "tag",
											"source": 19,
											"value": "715"
										},
										{
											"begin": 33007,
											"end": 33009,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 32997,
											"end": 33075,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 32997,
											"end": 33075,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										}
									],
									".data": {
										"9FDCD12E4B726339B32A442B0A448365D5D85C96B2D2CFF917B4F66C63110398": "416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564"
									}
								}
							}
						},
						"methodIdentifiers": {
							"afterDecreaseGauge(address,address,uint256)": "31661930",
							"afterIncreaseGauge(address,address,uint256)": "95cebcd4",
							"afterSwap(address,address,uint256,address,uint256)": "fd401628",
							"claim(address,(address,uint64),address)": "f741e08f",
							"claimAll(address,address)": "5767bba5",
							"currentRewardToken(address)": "6e8fc2d3",
							"gaugeController()": "99eecb3b",
							"gaugeRewardTokenExchangeRates(address,address,uint64)": "f1883e5d",
							"gaugeRewardTokens(address,uint256)": "5902fc3b",
							"getRewards(address,(address,uint64),address)": "f00b1997",
							"liquidator()": "4046ebae",
							"multicall(bytes[])": "ac9650d8",
							"redeem(address,address)": "bba06f27",
							"stakerCut()": "ac9fb71d",
							"userGaugeRewardTokenExchangeRates(address,address,address,uint64)": "e5f744b8",
							"userGaugeRewardTokenLastClaimedTimestamp(address,address,address)": "81d7af2e",
							"userRewardTokenBalances(address,address)": "06302ef1",
							"vault()": "fbfa77cf"
						}
					},
					"metadata": "{\"compiler\":{\"version\":\"0.8.6+commit.11564f7e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IGaugeController\",\"name\":\"_gaugeController\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_vault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidator\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_stakerCut\",\"type\":\"uint32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IGaugeController\",\"name\":\"gaugeController\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"vault\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"stakerCut\",\"type\":\"uint32\"}],\"name\":\"Deployed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"RewardTokenPushed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stakerRewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exchangeRate\",\"type\":\"uint256\"}],\"name\":\"RewardsAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exchangeRate\",\"type\":\"uint256\"}],\"name\":\"RewardsClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RewardsRedeemed\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_gauge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_oldStakeBalance\",\"type\":\"uint256\"}],\"name\":\"afterDecreaseGauge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_gauge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_oldStakeBalance\",\"type\":\"uint256\"}],\"name\":\"afterIncreaseGauge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPrizePool\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"contract ITicket\",\"name\":\"_ticket\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenAmount\",\"type\":\"uint256\"}],\"name\":\"afterSwap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_gauge\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"}],\"internalType\":\"struct GaugeReward.RewardToken\",\"name\":\"_rewardToken\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"claim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_gauge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"claimAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_gauge\",\"type\":\"address\"}],\"name\":\"currentRewardToken\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"}],\"internalType\":\"struct GaugeReward.RewardToken\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gaugeController\",\"outputs\":[{\"internalType\":\"contract IGaugeController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"gaugeRewardTokenExchangeRates\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"gaugeRewardTokens\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_gauge\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"}],\"internalType\":\"struct GaugeReward.RewardToken\",\"name\":\"_rewardToken\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"getRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakerCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"userGaugeRewardTokenExchangeRates\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"userGaugeRewardTokenLastClaimedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"userRewardTokenBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"PoolTogether Inc Team\",\"details\":\"This contract is only keeping track of the rewards. Reward tokens are actually stored in the TokenVault contract.\",\"events\":{\"Deployed(address,address,address,uint32)\":{\"params\":{\"gaugeController\":\"Address of the GaugeController\",\"liquidator\":\"Address of the Liquidator\",\"stakerCut\":\"Percentage of rewards that goes to stakers\",\"vault\":\"Address of the Vault\"}},\"RewardTokenPushed(address,address,uint256)\":{\"params\":{\"gauge\":\"Address of the gauge for which the reward token is added\",\"timestamp\":\"Timestamp at which the reward token was pushed\",\"token\":\"Address of the token being pushed\"}},\"RewardsAdded(address,address,uint256,uint256,uint256)\":{\"params\":{\"amount\":\"Amount of tokens sent to the vault\",\"exchangeRate\":\"New exchange rate for this `token` in this `gauge`\",\"gauge\":\"Address of the gauge for which tokens were added\",\"stakerRewards\":\"Amount of rewards allocated to stakers\",\"token\":\"Address of the token sent to the vault\"}},\"RewardsClaimed(address,address,address,uint256,uint256)\":{\"params\":{\"amount\":\"Total amount of rewards claimed\",\"exchangeRate\":\"Exchange rate at which the rewards were claimed\",\"gauge\":\"Address of the gauge for which the user claimed rewards\",\"token\":\"Address of the token for which the user claimed rewards\",\"user\":\"Address of the user for which the rewards were claimed\"}},\"RewardsRedeemed(address,address,address,uint256)\":{\"params\":{\"amount\":\"Total amount of rewards redeemed\",\"caller\":\"Address who called the redeem function\",\"token\":\"Address of the token for which the user redeemed rewards\",\"user\":\"Address of the user for which the rewards were redeemed\"}}},\"kind\":\"dev\",\"methods\":{\"afterDecreaseGauge(address,address,uint256)\":{\"params\":{\"gauge\":\"Address of the gauge to decrease stake for\",\"oldStakeBalance\":\"Old stake balance of the user\",\"user\":\"Address of the user to decrease stake for\"}},\"afterIncreaseGauge(address,address,uint256)\":{\"params\":{\"gauge\":\"Address of the gauge to increase stake for\",\"oldStakeBalance\":\"Old stake balance of the user\",\"user\":\"Address of the user to increase stake for\"}},\"afterSwap(address,address,uint256,address,uint256)\":{\"details\":\"Called by the liquidator contract anytime tokens are liquidated.Will push `token` to the `gaugeRewardTokens` mapping if different from the current one.\",\"params\":{\"_ticket\":\"Address of the tickets that were sold\",\"_token\":\"Address of the token that the tickets were sold for\",\"_tokenAmount\":\"Amount of tokens that the tickets were sold for\"}},\"claim(address,(address,uint64),address)\":{\"params\":{\"_gauge\":\"Address of the gauge to claim rewards for\",\"_rewardToken\":\"Reward token to claim rewards for\",\"_user\":\"Address of the user to claim rewards for\"}},\"claimAll(address,address)\":{\"params\":{\"_gauge\":\"Address of the gauge to claim rewards for\",\"_user\":\"Address of the user to claim rewards for\"}},\"constructor\":{\"params\":{\"_gaugeController\":\"Address of the GaugeController\",\"_liquidator\":\"Address of the Liquidator\",\"_stakerCut\":\"Percentage of rewards that goes to stakers\",\"_vault\":\"Address of the Vault\"}},\"currentRewardToken(address)\":{\"params\":{\"_gauge\":\"Address of the gauge to get current reward token for\"},\"returns\":{\"_0\":\"Current reward token for the given gauge\"}},\"getRewards(address,(address,uint64),address)\":{\"params\":{\"_gauge\":\"Address of the gauge to get rewards for\",\"_rewardToken\":\"Reward token to get rewards for\",\"_user\":\"Address of the user to get rewards for\"},\"returns\":{\"_0\":\"Amount of rewards for the given gauge and token\"}},\"multicall(bytes[])\":{\"details\":\"Receives and executes a batch of function calls on this contract.\"},\"redeem(address,address)\":{\"details\":\"Rewards can be redeemed on behalf of a user.\",\"params\":{\"_token\":\"Address of the token to redeem rewards for\",\"_user\":\"Address of the user to redeem rewards for\"},\"returns\":{\"_0\":\"Amount of rewards redeemed\"}}},\"stateVariables\":{\"gaugeRewardTokenExchangeRates\":{\"details\":\"gauge => reward token address => reward token timestamp => exchange rate\"},\"gaugeRewardTokens\":{\"details\":\"gauge => reward tokens array\"},\"userGaugeRewardTokenExchangeRates\":{\"details\":\"user => gauge => reward token address => reward token timestamp => exchange rate\"},\"userGaugeRewardTokenLastClaimedTimestamp\":{\"details\":\"user => gauge => reward token address => timestamp\"},\"userRewardTokenBalances\":{\"details\":\"user => reward token address => balance\"}},\"title\":\"PoolTogether V4 GaugeReward\",\"version\":1},\"userdoc\":{\"events\":{\"Deployed(address,address,address,uint32)\":{\"notice\":\"Emitted when the contract is deployed\"},\"RewardTokenPushed(address,address,uint256)\":{\"notice\":\"Emitted when a new reward token is pushed onto the `gaugeRewardTokens` mapping\"},\"RewardsAdded(address,address,uint256,uint256,uint256)\":{\"notice\":\"Emitted when tickets are swapped for tokens\"},\"RewardsClaimed(address,address,address,uint256,uint256)\":{\"notice\":\"Emitted when a user claimed their rewards for a given gauge and token\"},\"RewardsRedeemed(address,address,address,uint256)\":{\"notice\":\"Emitted when a user redeemed their rewards for a given token\"}},\"kind\":\"user\",\"methods\":{\"afterDecreaseGauge(address,address,uint256)\":{\"notice\":\"Callback function to call in GaugeController after a user has decreased his gauge stake.\"},\"afterIncreaseGauge(address,address,uint256)\":{\"notice\":\"Fallback function to call in GaugeController after a user has increased their gauge stake.Callback function to call in GaugeController after a user has increased their gauge stake.\"},\"afterSwap(address,address,uint256,address,uint256)\":{\"notice\":\"Records exchange rate after swapping an amount of `ticket` for `token`.\"},\"claim(address,(address,uint64),address)\":{\"notice\":\"Claim user rewards for a given gauge and reward token.\"},\"claimAll(address,address)\":{\"notice\":\"Claim all user rewards for a given gauge.\"},\"constructor\":{\"notice\":\"GaugeReward constructor\"},\"currentRewardToken(address)\":{\"notice\":\"Return the current reward token for the given gauge.\"},\"gaugeController()\":{\"notice\":\"GaugeController contract address\"},\"gaugeRewardTokenExchangeRates(address,address,uint64)\":{\"notice\":\"Tracks reward token exchange rates per gauge\"},\"gaugeRewardTokens(address,uint256)\":{\"notice\":\"Tracks reward tokens per gauge\"},\"getRewards(address,(address,uint64),address)\":{\"notice\":\"Get user rewards for a given gauge and token.\"},\"liquidator()\":{\"notice\":\"Address of the liquidator that this contract is listening to\"},\"redeem(address,address)\":{\"notice\":\"Redeem user rewards for a given token.\"},\"stakerCut()\":{\"notice\":\"Percentage of rewards that goes to stakers. Fixed point 9 number that is less than 1.\"},\"userGaugeRewardTokenExchangeRates(address,address,address,uint64)\":{\"notice\":\"Tracks reward token exchange rate per user and gauge\"},\"userGaugeRewardTokenLastClaimedTimestamp(address,address,address)\":{\"notice\":\"Tracks user last claimed timestamp per gauge and reward token\"},\"userRewardTokenBalances(address,address)\":{\"notice\":\"Tracks user token reward balances\"},\"vault()\":{\"notice\":\"Vault contract address\"}},\"notice\":\"The GaugeReward contract handles rewards for users who staked in one or several gauges on the GaugeController contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":\"GaugeReward\"},\"evmVersion\":\"berlin\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95\",\"dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x032807210d1d7d218963d7355d62e021a84bf1b3339f4f50be2f63b53cccaf29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11756f42121f6541a35a8339ea899ee7514cfaa2e6d740625fcc844419296aa6\",\"dweb:/ipfs/QmekMuk6BY4DAjzeXr4MSbKdgoqqsZnA8JPtuyWc6CwXHf\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487\",\"dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG\"]},\"@openzeppelin/contracts/utils/Multicall.sol\":{\"keccak256\":\"0x35e30a35e23f856cbcee3558b7efdd83f6017a8f1b419710645143d98e892463\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7dae8b319a276abec4bb2f134251597daddbacd03779c707105a348e53cfd72a\",\"dweb:/ipfs/QmXPnLLsoWDKSa4NocGr6HonQhHnfxy72gYLgV8oitH1WQ\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x02686c31ccb9ee77a299fa5f47327af5271f251a707a0e24f321957166ff0434\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cb562d8ae1da31249ca0d8553df9f89ef4c3c110a018c4449dde68ae30e51ec1\",\"dweb:/ipfs/QmUwxjtTUYB89ymeV46TZPmTsGnYrKNcgTHk7MQA1MG3hj\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol\":{\"keccak256\":\"0xf9c9568a796646050beab8dd31981df9da827b2f0afcba70e0a7647232240668\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://52693bd7135c1725af3af41029670374dc50dd305e78b4dc9fecd7c61b32df58\",\"dweb:/ipfs/QmSNLMeAhwxoKzbTmJt84zFLaLVyhSmACpUK4tS6X1fah1\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/external/compound/ICompLike.sol\":{\"keccak256\":\"0x34d2c8a57ca27b9c58ec07c4bd8d263c71a25d194068ad9403f3895dc99a7122\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://d15acebd8cb80778b256095d1d57bc202a81dfab38de857799e7391590416fbe\",\"dweb:/ipfs/QmTRv7iQb5UjTa62kKuUKcZadyKFrRX7JYFnvuJyJTAexx\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IControlledToken.sol\":{\"keccak256\":\"0x90dceeec1eea6e49021e8db88b084f3f0c503c60b6f7e0bbecd2529ffde87ef3\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://d6fda119bce121e99c834d36e37f760ce16528adc9405a263d66ea83ee083cda\",\"dweb:/ipfs/QmbPo9QWUB6KQ8jUaka8GC39o9MrB6YoGuc47QQRyyYYBz\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IGaugeController.sol\":{\"keccak256\":\"0xd9963bccaa220e4c3527aaa7cb77b5da7900311a5fb94ab3d7eb26f13288abd8\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://922176a0c8e2939dae45f31fa0717300b564adc51cd667ff31dd708e7840d11d\",\"dweb:/ipfs/QmVyx2PGm8gxrYMBRxt9Zy8rctQ3MU2H1Qg9NMQeSD33yX\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IGaugeReward.sol\":{\"keccak256\":\"0x826190a5356dcf82b37edfd14432e297853ec1c5a1923b23d751ef4026cfd9f2\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://169830a721873b1cb552bca0445dcc225ee4057cfd0b0242a3a84cfb53117388\",\"dweb:/ipfs/QmSs915uCyAVKgNp7fUz4923gn9iNJM196vJsLMDeZ8VaQ\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IPrizePool.sol\":{\"keccak256\":\"0xa3cc6bff882d541d6642bbff0988fc592ff513a682dde6888ab55eaec29df7a9\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://c9f415ac186d10daebd5c0d6d3a65ad90dd3c6f924f4ea2ffb6f202a155ebd96\",\"dweb:/ipfs/QmX2w6vucPEy6q7dURRXR7NPm1qjHbamY2D5Jr33QZaa4H\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IPrizePoolLiquidatorListener.sol\":{\"keccak256\":\"0x1ef7bba5f9a03825f60713f60eb2c96e58ddd20517046faf4a41d7fc8278e017\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://5850c888f4db850ad30fdd016c5b8c35eacdf24fe67d9d1af902f7f64a270f01\",\"dweb:/ipfs/QmbtvqvLoVA3zipuKawfoe6vWMEfkMH8phe5ZDZTX7Ewsz\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/ITicket.sol\":{\"keccak256\":\"0xb9f6423a8a9c7394941cb84723b82cc66c5f815d689dc0562e612ae4d9f1cc27\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://baa0a5d2006fa451876f0507f71b0299993d17a4867e2f4cf5079bbc9ca33c0d\",\"dweb:/ipfs/QmTB8bWNfPK45E9zmKXyLCopDiMd9UWNM1WNVJLPfEMqxC\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/ExtendedSafeCastLib.sol\":{\"keccak256\":\"0x9dae48760b4f78e5418ea8f44abe51fd40570b3159fac80ff17935b6451dcacd\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://c42ee90f5e36b58e049eb582d20250ab83faebec81f4b4664fe5e2a093f04aba\",\"dweb:/ipfs/QmNmUzXXiR7JYsMRU9qyZNMp6SVmj7UUz8kS2qr5nPTtTM\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/ObservationLib.sol\":{\"keccak256\":\"0x225592b42013fc0af60822e75bc047d53b42a5fcf15f2173cdc3b50bea334b0a\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://3b2023bfcc8fb346a52c519b3667c8bb1b935d16993d68b651ec2b84f61d8f3c\",\"dweb:/ipfs/QmYP7kPZefm4SN4kaJwMNrJq3KyYwfvndXY6XQdxeih646\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/OverflowSafeComparatorLib.sol\":{\"keccak256\":\"0x20630cf89e7b92462946defe979fd0e69fa119841d55886121948ad810778c74\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://2dda66ae7137027e803570a61c0aff2aa5bcf9c430ff068ba10529b1c5dd3d6a\",\"dweb:/ipfs/QmZbWq1fiisXBnj774CTKwZQF3vdgj16EUqGGQPegxLWZq\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/RingBufferLib.sol\":{\"keccak256\":\"0x052e3bf6bfb30f32950e322c853589a8d153cf34f4b1ee292b17eb46f2ae656c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://587d1e6fd1df4bfe26b78a23503e67f171c68bb44afe6582bbcb5726b9a60808\",\"dweb:/ipfs/Qmb2F87Lh23o922Qn8Mt2uZBz8qKoEfwMtwQYCT5L5z5wd\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/TwabLib.sol\":{\"keccak256\":\"0x446d8221329601d40464981a50a0e31f3fd48da0ebf0fea646c5a089ccfbdff4\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://d6e67f1f69fa796c388eb4733090445cf7bc859e463f1d3be36973e8cd258528\",\"dweb:/ipfs/QmYA3noFrMP1QwoQEAN3yyXYJvJfTb47uS5hdR6LBxrwjY\"]}},\"version\":1}",
					"storageLayout": {
						"storage": [
							{
								"astId": 2622,
								"contract": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol:GaugeReward",
								"label": "userRewardTokenBalances",
								"offset": 0,
								"slot": "0",
								"type": "t_mapping(t_address,t_mapping(t_contract(IERC20)77,t_uint256))"
							},
							{
								"astId": 2634,
								"contract": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol:GaugeReward",
								"label": "userGaugeRewardTokenExchangeRates",
								"offset": 0,
								"slot": "1",
								"type": "t_mapping(t_address,t_mapping(t_address,t_mapping(t_contract(IERC20)77,t_mapping(t_uint64,t_uint256))))"
							},
							{
								"astId": 2643,
								"contract": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol:GaugeReward",
								"label": "userGaugeRewardTokenLastClaimedTimestamp",
								"offset": 0,
								"slot": "2",
								"type": "t_mapping(t_address,t_mapping(t_address,t_mapping(t_address,t_uint256)))"
							},
							{
								"astId": 2653,
								"contract": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol:GaugeReward",
								"label": "gaugeRewardTokenExchangeRates",
								"offset": 0,
								"slot": "3",
								"type": "t_mapping(t_address,t_mapping(t_contract(IERC20)77,t_mapping(t_uint64,t_uint256)))"
							},
							{
								"astId": 2666,
								"contract": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol:GaugeReward",
								"label": "gaugeRewardTokens",
								"offset": 0,
								"slot": "4",
								"type": "t_mapping(t_address,t_array(t_struct(RewardToken)2659_storage)dyn_storage)"
							},
							{
								"astId": 2670,
								"contract": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol:GaugeReward",
								"label": "gaugeController",
								"offset": 0,
								"slot": "5",
								"type": "t_contract(IGaugeController)3664"
							},
							{
								"astId": 2673,
								"contract": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol:GaugeReward",
								"label": "vault",
								"offset": 0,
								"slot": "6",
								"type": "t_address"
							},
							{
								"astId": 2676,
								"contract": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol:GaugeReward",
								"label": "liquidator",
								"offset": 0,
								"slot": "7",
								"type": "t_address"
							},
							{
								"astId": 2679,
								"contract": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol:GaugeReward",
								"label": "stakerCut",
								"offset": 20,
								"slot": "7",
								"type": "t_uint32"
							}
						],
						"types": {
							"t_address": {
								"encoding": "inplace",
								"label": "address",
								"numberOfBytes": "20"
							},
							"t_array(t_struct(RewardToken)2659_storage)dyn_storage": {
								"base": "t_struct(RewardToken)2659_storage",
								"encoding": "dynamic_array",
								"label": "struct GaugeReward.RewardToken[]",
								"numberOfBytes": "32"
							},
							"t_contract(IERC20)77": {
								"encoding": "inplace",
								"label": "contract IERC20",
								"numberOfBytes": "20"
							},
							"t_contract(IGaugeController)3664": {
								"encoding": "inplace",
								"label": "contract IGaugeController",
								"numberOfBytes": "20"
							},
							"t_mapping(t_address,t_array(t_struct(RewardToken)2659_storage)dyn_storage)": {
								"encoding": "mapping",
								"key": "t_address",
								"label": "mapping(address => struct GaugeReward.RewardToken[])",
								"numberOfBytes": "32",
								"value": "t_array(t_struct(RewardToken)2659_storage)dyn_storage"
							},
							"t_mapping(t_address,t_mapping(t_address,t_mapping(t_address,t_uint256)))": {
								"encoding": "mapping",
								"key": "t_address",
								"label": "mapping(address => mapping(address => mapping(address => uint256)))",
								"numberOfBytes": "32",
								"value": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
							},
							"t_mapping(t_address,t_mapping(t_address,t_mapping(t_contract(IERC20)77,t_mapping(t_uint64,t_uint256))))": {
								"encoding": "mapping",
								"key": "t_address",
								"label": "mapping(address => mapping(address => mapping(contract IERC20 => mapping(uint64 => uint256))))",
								"numberOfBytes": "32",
								"value": "t_mapping(t_address,t_mapping(t_contract(IERC20)77,t_mapping(t_uint64,t_uint256)))"
							},
							"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_mapping(t_contract(IERC20)77,t_mapping(t_uint64,t_uint256)))": {
								"encoding": "mapping",
								"key": "t_address",
								"label": "mapping(address => mapping(contract IERC20 => mapping(uint64 => uint256)))",
								"numberOfBytes": "32",
								"value": "t_mapping(t_contract(IERC20)77,t_mapping(t_uint64,t_uint256))"
							},
							"t_mapping(t_address,t_mapping(t_contract(IERC20)77,t_uint256))": {
								"encoding": "mapping",
								"key": "t_address",
								"label": "mapping(address => mapping(contract IERC20 => uint256))",
								"numberOfBytes": "32",
								"value": "t_mapping(t_contract(IERC20)77,t_uint256)"
							},
							"t_mapping(t_address,t_uint256)": {
								"encoding": "mapping",
								"key": "t_address",
								"label": "mapping(address => uint256)",
								"numberOfBytes": "32",
								"value": "t_uint256"
							},
							"t_mapping(t_contract(IERC20)77,t_mapping(t_uint64,t_uint256))": {
								"encoding": "mapping",
								"key": "t_contract(IERC20)77",
								"label": "mapping(contract IERC20 => mapping(uint64 => uint256))",
								"numberOfBytes": "32",
								"value": "t_mapping(t_uint64,t_uint256)"
							},
							"t_mapping(t_contract(IERC20)77,t_uint256)": {
								"encoding": "mapping",
								"key": "t_contract(IERC20)77",
								"label": "mapping(contract IERC20 => uint256)",
								"numberOfBytes": "32",
								"value": "t_uint256"
							},
							"t_mapping(t_uint64,t_uint256)": {
								"encoding": "mapping",
								"key": "t_uint64",
								"label": "mapping(uint64 => uint256)",
								"numberOfBytes": "32",
								"value": "t_uint256"
							},
							"t_struct(RewardToken)2659_storage": {
								"encoding": "inplace",
								"label": "struct GaugeReward.RewardToken",
								"members": [
									{
										"astId": 2656,
										"contract": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol:GaugeReward",
										"label": "token",
										"offset": 0,
										"slot": "0",
										"type": "t_contract(IERC20)77"
									},
									{
										"astId": 2658,
										"contract": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol:GaugeReward",
										"label": "timestamp",
										"offset": 20,
										"slot": "0",
										"type": "t_uint64"
									}
								],
								"numberOfBytes": "32"
							},
							"t_uint256": {
								"encoding": "inplace",
								"label": "uint256",
								"numberOfBytes": "32"
							},
							"t_uint32": {
								"encoding": "inplace",
								"label": "uint32",
								"numberOfBytes": "4"
							},
							"t_uint64": {
								"encoding": "inplace",
								"label": "uint64",
								"numberOfBytes": "8"
							}
						}
					},
					"userdoc": {
						"events": {
							"Deployed(address,address,address,uint32)": {
								"notice": "Emitted when the contract is deployed"
							},
							"RewardTokenPushed(address,address,uint256)": {
								"notice": "Emitted when a new reward token is pushed onto the `gaugeRewardTokens` mapping"
							},
							"RewardsAdded(address,address,uint256,uint256,uint256)": {
								"notice": "Emitted when tickets are swapped for tokens"
							},
							"RewardsClaimed(address,address,address,uint256,uint256)": {
								"notice": "Emitted when a user claimed their rewards for a given gauge and token"
							},
							"RewardsRedeemed(address,address,address,uint256)": {
								"notice": "Emitted when a user redeemed their rewards for a given token"
							}
						},
						"kind": "user",
						"methods": {
							"afterDecreaseGauge(address,address,uint256)": {
								"notice": "Callback function to call in GaugeController after a user has decreased his gauge stake."
							},
							"afterIncreaseGauge(address,address,uint256)": {
								"notice": "Fallback function to call in GaugeController after a user has increased their gauge stake.Callback function to call in GaugeController after a user has increased their gauge stake."
							},
							"afterSwap(address,address,uint256,address,uint256)": {
								"notice": "Records exchange rate after swapping an amount of `ticket` for `token`."
							},
							"claim(address,(address,uint64),address)": {
								"notice": "Claim user rewards for a given gauge and reward token."
							},
							"claimAll(address,address)": {
								"notice": "Claim all user rewards for a given gauge."
							},
							"constructor": {
								"notice": "GaugeReward constructor"
							},
							"currentRewardToken(address)": {
								"notice": "Return the current reward token for the given gauge."
							},
							"gaugeController()": {
								"notice": "GaugeController contract address"
							},
							"gaugeRewardTokenExchangeRates(address,address,uint64)": {
								"notice": "Tracks reward token exchange rates per gauge"
							},
							"gaugeRewardTokens(address,uint256)": {
								"notice": "Tracks reward tokens per gauge"
							},
							"getRewards(address,(address,uint64),address)": {
								"notice": "Get user rewards for a given gauge and token."
							},
							"liquidator()": {
								"notice": "Address of the liquidator that this contract is listening to"
							},
							"redeem(address,address)": {
								"notice": "Redeem user rewards for a given token."
							},
							"stakerCut()": {
								"notice": "Percentage of rewards that goes to stakers. Fixed point 9 number that is less than 1."
							},
							"userGaugeRewardTokenExchangeRates(address,address,address,uint64)": {
								"notice": "Tracks reward token exchange rate per user and gauge"
							},
							"userGaugeRewardTokenLastClaimedTimestamp(address,address,address)": {
								"notice": "Tracks user last claimed timestamp per gauge and reward token"
							},
							"userRewardTokenBalances(address,address)": {
								"notice": "Tracks user token reward balances"
							},
							"vault()": {
								"notice": "Vault contract address"
							}
						},
						"notice": "The GaugeReward contract handles rewards for users who staked in one or several gauges on the GaugeController contract.",
						"version": 1
					}
				}
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/external/compound/ICompLike.sol": {
				"ICompLike": {
					"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": [
								{
									"internalType": "address",
									"name": "delegate",
									"type": "address"
								}
							],
							"name": "delegate",
							"outputs": [],
							"stateMutability": "nonpayable",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "account",
									"type": "address"
								}
							],
							"name": "getCurrentVotes",
							"outputs": [
								{
									"internalType": "uint96",
									"name": "",
									"type": "uint96"
								}
							],
							"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": {
						"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": {
						"assembly": "",
						"bytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"linkReferences": {},
							"object": "",
							"opcodes": "",
							"sourceMap": ""
						},
						"deployedBytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"immutableReferences": {},
							"linkReferences": {},
							"object": "",
							"opcodes": "",
							"sourceMap": ""
						},
						"gasEstimates": null,
						"legacyAssembly": null,
						"methodIdentifiers": {
							"allowance(address,address)": "dd62ed3e",
							"approve(address,uint256)": "095ea7b3",
							"balanceOf(address)": "70a08231",
							"delegate(address)": "5c19a95c",
							"getCurrentVotes(address)": "b4b5ea57",
							"totalSupply()": "18160ddd",
							"transfer(address,uint256)": "a9059cbb",
							"transferFrom(address,address,uint256)": "23b872dd"
						}
					},
					"metadata": "{\"compiler\":{\"version\":\"0.8.6+commit.11564f7e\"},\"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\":[{\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"}],\"name\":\"delegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getCurrentVotes\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"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\":{\"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\":{\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/external/compound/ICompLike.sol\":\"ICompLike\"},\"evmVersion\":\"berlin\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/external/compound/ICompLike.sol\":{\"keccak256\":\"0x34d2c8a57ca27b9c58ec07c4bd8d263c71a25d194068ad9403f3895dc99a7122\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://d15acebd8cb80778b256095d1d57bc202a81dfab38de857799e7391590416fbe\",\"dweb:/ipfs/QmTRv7iQb5UjTa62kKuUKcZadyKFrRX7JYFnvuJyJTAexx\"]}},\"version\":1}",
					"storageLayout": {
						"storage": [],
						"types": null
					},
					"userdoc": {
						"kind": "user",
						"methods": {},
						"version": 1
					}
				}
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IControlledToken.sol": {
				"IControlledToken": {
					"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": "controller",
							"outputs": [
								{
									"internalType": "address",
									"name": "",
									"type": "address"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "user",
									"type": "address"
								},
								{
									"internalType": "uint256",
									"name": "amount",
									"type": "uint256"
								}
							],
							"name": "controllerBurn",
							"outputs": [],
							"stateMutability": "nonpayable",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "operator",
									"type": "address"
								},
								{
									"internalType": "address",
									"name": "user",
									"type": "address"
								},
								{
									"internalType": "uint256",
									"name": "amount",
									"type": "uint256"
								}
							],
							"name": "controllerBurnFrom",
							"outputs": [],
							"stateMutability": "nonpayable",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "user",
									"type": "address"
								},
								{
									"internalType": "uint256",
									"name": "amount",
									"type": "uint256"
								}
							],
							"name": "controllerMint",
							"outputs": [],
							"stateMutability": "nonpayable",
							"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": {
						"author": "PoolTogether Inc Team",
						"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`."
							},
							"controllerBurn(address,uint256)": {
								"details": "May be overridden to provide more granular control over burning",
								"params": {
									"amount": "Amount of tokens to burn",
									"user": "Address of the holder account to burn tokens from"
								}
							},
							"controllerBurnFrom(address,address,uint256)": {
								"details": "May be overridden to provide more granular control over operator-burning",
								"params": {
									"amount": "Amount of tokens to burn",
									"operator": "Address of the operator performing the burn action via the controller contract",
									"user": "Address of the holder account to burn tokens from"
								}
							},
							"controllerMint(address,uint256)": {
								"details": "May be overridden to provide more granular control over minting",
								"params": {
									"amount": "Amount of tokens to mint",
									"user": "Address of the receiver of the minted tokens"
								}
							},
							"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."
							}
						},
						"title": "IControlledToken",
						"version": 1
					},
					"evm": {
						"assembly": "",
						"bytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"linkReferences": {},
							"object": "",
							"opcodes": "",
							"sourceMap": ""
						},
						"deployedBytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"immutableReferences": {},
							"linkReferences": {},
							"object": "",
							"opcodes": "",
							"sourceMap": ""
						},
						"gasEstimates": null,
						"legacyAssembly": null,
						"methodIdentifiers": {
							"allowance(address,address)": "dd62ed3e",
							"approve(address,uint256)": "095ea7b3",
							"balanceOf(address)": "70a08231",
							"controller()": "f77c4791",
							"controllerBurn(address,uint256)": "90596dd1",
							"controllerBurnFrom(address,address,uint256)": "631b5dfb",
							"controllerMint(address,uint256)": "5d7b0758",
							"totalSupply()": "18160ddd",
							"transfer(address,uint256)": "a9059cbb",
							"transferFrom(address,address,uint256)": "23b872dd"
						}
					},
					"metadata": "{\"compiler\":{\"version\":\"0.8.6+commit.11564f7e\"},\"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\":\"controller\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"controllerBurn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"controllerBurnFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"controllerMint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":{\"author\":\"PoolTogether Inc Team\",\"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`.\"},\"controllerBurn(address,uint256)\":{\"details\":\"May be overridden to provide more granular control over burning\",\"params\":{\"amount\":\"Amount of tokens to burn\",\"user\":\"Address of the holder account to burn tokens from\"}},\"controllerBurnFrom(address,address,uint256)\":{\"details\":\"May be overridden to provide more granular control over operator-burning\",\"params\":{\"amount\":\"Amount of tokens to burn\",\"operator\":\"Address of the operator performing the burn action via the controller contract\",\"user\":\"Address of the holder account to burn tokens from\"}},\"controllerMint(address,uint256)\":{\"details\":\"May be overridden to provide more granular control over minting\",\"params\":{\"amount\":\"Amount of tokens to mint\",\"user\":\"Address of the receiver of the minted tokens\"}},\"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.\"}},\"title\":\"IControlledToken\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"controller()\":{\"notice\":\"Interface to the contract responsible for controlling mint/burn\"},\"controllerBurn(address,uint256)\":{\"notice\":\"Allows the controller to burn tokens from a user account\"},\"controllerBurnFrom(address,address,uint256)\":{\"notice\":\"Allows an operator via the controller to burn tokens on behalf of a user account\"},\"controllerMint(address,uint256)\":{\"notice\":\"Allows the controller to mint tokens for a user account\"}},\"notice\":\"ERC20 Tokens with a controller for minting & burning.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IControlledToken.sol\":\"IControlledToken\"},\"evmVersion\":\"berlin\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IControlledToken.sol\":{\"keccak256\":\"0x90dceeec1eea6e49021e8db88b084f3f0c503c60b6f7e0bbecd2529ffde87ef3\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://d6fda119bce121e99c834d36e37f760ce16528adc9405a263d66ea83ee083cda\",\"dweb:/ipfs/QmbPo9QWUB6KQ8jUaka8GC39o9MrB6YoGuc47QQRyyYYBz\"]}},\"version\":1}",
					"storageLayout": {
						"storage": [],
						"types": null
					},
					"userdoc": {
						"kind": "user",
						"methods": {
							"controller()": {
								"notice": "Interface to the contract responsible for controlling mint/burn"
							},
							"controllerBurn(address,uint256)": {
								"notice": "Allows the controller to burn tokens from a user account"
							},
							"controllerBurnFrom(address,address,uint256)": {
								"notice": "Allows an operator via the controller to burn tokens on behalf of a user account"
							},
							"controllerMint(address,uint256)": {
								"notice": "Allows the controller to mint tokens for a user account"
							}
						},
						"notice": "ERC20 Tokens with a controller for minting & burning.",
						"version": 1
					}
				}
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IGaugeController.sol": {
				"IGaugeController": {
					"abi": [
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "_gauge",
									"type": "address"
								}
							],
							"name": "getGaugeBalance",
							"outputs": [
								{
									"internalType": "uint256",
									"name": "",
									"type": "uint256"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "_gauge",
									"type": "address"
								}
							],
							"name": "getGaugeScaleBalance",
							"outputs": [
								{
									"internalType": "uint256",
									"name": "",
									"type": "uint256"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "_gauge",
									"type": "address"
								},
								{
									"internalType": "uint256",
									"name": "_startTime",
									"type": "uint256"
								},
								{
									"internalType": "uint256",
									"name": "_endTime",
									"type": "uint256"
								}
							],
							"name": "getScaledAverageGaugeBalanceBetween",
							"outputs": [
								{
									"internalType": "uint256",
									"name": "",
									"type": "uint256"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "_gauge",
									"type": "address"
								},
								{
									"internalType": "address",
									"name": "_user",
									"type": "address"
								}
							],
							"name": "getUserGaugeBalance",
							"outputs": [
								{
									"internalType": "uint256",
									"name": "",
									"type": "uint256"
								}
							],
							"stateMutability": "view",
							"type": "function"
						}
					],
					"devdoc": {
						"kind": "dev",
						"methods": {
							"getGaugeBalance(address)": {
								"params": {
									"_gauge": "Address of existing Gauge"
								},
								"returns": {
									"_0": "uint256 GaugeTWAB.details.balance"
								}
							},
							"getGaugeScaleBalance(address)": {
								"params": {
									"_gauge": "Address of existing Gauge"
								},
								"returns": {
									"_0": "uint256 GaugeScaleTWAB.details.balance"
								}
							},
							"getScaledAverageGaugeBalanceBetween(address,uint256,uint256)": {
								"params": {
									"_endTime": "End timestamp at which to get the average scaled balance",
									"_gauge": "Address of the gauge to get the average scaled balance for",
									"_startTime": "Start timestamp at which to get the average scaled balance"
								},
								"returns": {
									"_0": "The gauge scaled average balance between the two timestamps"
								}
							},
							"getUserGaugeBalance(address,address)": {
								"params": {
									"_gauge": "Address of the gauge to get stake balance for",
									"_user": "Address of the user to get stake balance for"
								},
								"returns": {
									"_0": "The user gauge balance"
								}
							}
						},
						"version": 1
					},
					"evm": {
						"assembly": "",
						"bytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"linkReferences": {},
							"object": "",
							"opcodes": "",
							"sourceMap": ""
						},
						"deployedBytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"immutableReferences": {},
							"linkReferences": {},
							"object": "",
							"opcodes": "",
							"sourceMap": ""
						},
						"gasEstimates": null,
						"legacyAssembly": null,
						"methodIdentifiers": {
							"getGaugeBalance(address)": "117d37e6",
							"getGaugeScaleBalance(address)": "dd14d961",
							"getScaledAverageGaugeBalanceBetween(address,uint256,uint256)": "638ca48f",
							"getUserGaugeBalance(address,address)": "78fa672e"
						}
					},
					"metadata": "{\"compiler\":{\"version\":\"0.8.6+commit.11564f7e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_gauge\",\"type\":\"address\"}],\"name\":\"getGaugeBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_gauge\",\"type\":\"address\"}],\"name\":\"getGaugeScaleBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_gauge\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_startTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_endTime\",\"type\":\"uint256\"}],\"name\":\"getScaledAverageGaugeBalanceBetween\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_gauge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"getUserGaugeBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getGaugeBalance(address)\":{\"params\":{\"_gauge\":\"Address of existing Gauge\"},\"returns\":{\"_0\":\"uint256 GaugeTWAB.details.balance\"}},\"getGaugeScaleBalance(address)\":{\"params\":{\"_gauge\":\"Address of existing Gauge\"},\"returns\":{\"_0\":\"uint256 GaugeScaleTWAB.details.balance\"}},\"getScaledAverageGaugeBalanceBetween(address,uint256,uint256)\":{\"params\":{\"_endTime\":\"End timestamp at which to get the average scaled balance\",\"_gauge\":\"Address of the gauge to get the average scaled balance for\",\"_startTime\":\"Start timestamp at which to get the average scaled balance\"},\"returns\":{\"_0\":\"The gauge scaled average balance between the two timestamps\"}},\"getUserGaugeBalance(address,address)\":{\"params\":{\"_gauge\":\"Address of the gauge to get stake balance for\",\"_user\":\"Address of the user to get stake balance for\"},\"returns\":{\"_0\":\"The user gauge balance\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getGaugeBalance(address)\":{\"notice\":\"Read Gauge balance.\"},\"getGaugeScaleBalance(address)\":{\"notice\":\"Read Gauge scaled balance.\"},\"getScaledAverageGaugeBalanceBetween(address,uint256,uint256)\":{\"notice\":\"Get the gauge scaled average balance between two timestamps.\"},\"getUserGaugeBalance(address,address)\":{\"notice\":\"Get the user stake balance for a given gauge\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IGaugeController.sol\":\"IGaugeController\"},\"evmVersion\":\"berlin\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IGaugeController.sol\":{\"keccak256\":\"0xd9963bccaa220e4c3527aaa7cb77b5da7900311a5fb94ab3d7eb26f13288abd8\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://922176a0c8e2939dae45f31fa0717300b564adc51cd667ff31dd708e7840d11d\",\"dweb:/ipfs/QmVyx2PGm8gxrYMBRxt9Zy8rctQ3MU2H1Qg9NMQeSD33yX\"]}},\"version\":1}",
					"storageLayout": {
						"storage": [],
						"types": null
					},
					"userdoc": {
						"kind": "user",
						"methods": {
							"getGaugeBalance(address)": {
								"notice": "Read Gauge balance."
							},
							"getGaugeScaleBalance(address)": {
								"notice": "Read Gauge scaled balance."
							},
							"getScaledAverageGaugeBalanceBetween(address,uint256,uint256)": {
								"notice": "Get the gauge scaled average balance between two timestamps."
							},
							"getUserGaugeBalance(address,address)": {
								"notice": "Get the user stake balance for a given gauge"
							}
						},
						"version": 1
					}
				}
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IGaugeReward.sol": {
				"IGaugeReward": {
					"abi": [
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "gauge",
									"type": "address"
								},
								{
									"internalType": "address",
									"name": "user",
									"type": "address"
								},
								{
									"internalType": "uint256",
									"name": "oldStakeBalance",
									"type": "uint256"
								}
							],
							"name": "afterDecreaseGauge",
							"outputs": [],
							"stateMutability": "nonpayable",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "gauge",
									"type": "address"
								},
								{
									"internalType": "address",
									"name": "user",
									"type": "address"
								},
								{
									"internalType": "uint256",
									"name": "oldStakeBalance",
									"type": "uint256"
								}
							],
							"name": "afterIncreaseGauge",
							"outputs": [],
							"stateMutability": "nonpayable",
							"type": "function"
						}
					],
					"devdoc": {
						"author": "PoolTogether Inc Team",
						"kind": "dev",
						"methods": {
							"afterDecreaseGauge(address,address,uint256)": {
								"params": {
									"gauge": "Address of the gauge to decrease stake for",
									"oldStakeBalance": "Old stake balance of the user",
									"user": "Address of the user to decrease stake for"
								}
							},
							"afterIncreaseGauge(address,address,uint256)": {
								"params": {
									"gauge": "Address of the gauge to increase stake for",
									"oldStakeBalance": "Old stake balance of the user",
									"user": "Address of the user to increase stake for"
								}
							}
						},
						"title": "PoolTogether V4 IGaugeReward",
						"version": 1
					},
					"evm": {
						"assembly": "",
						"bytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"linkReferences": {},
							"object": "",
							"opcodes": "",
							"sourceMap": ""
						},
						"deployedBytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"immutableReferences": {},
							"linkReferences": {},
							"object": "",
							"opcodes": "",
							"sourceMap": ""
						},
						"gasEstimates": null,
						"legacyAssembly": null,
						"methodIdentifiers": {
							"afterDecreaseGauge(address,address,uint256)": "31661930",
							"afterIncreaseGauge(address,address,uint256)": "95cebcd4"
						}
					},
					"metadata": "{\"compiler\":{\"version\":\"0.8.6+commit.11564f7e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"oldStakeBalance\",\"type\":\"uint256\"}],\"name\":\"afterDecreaseGauge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"oldStakeBalance\",\"type\":\"uint256\"}],\"name\":\"afterIncreaseGauge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"PoolTogether Inc Team\",\"kind\":\"dev\",\"methods\":{\"afterDecreaseGauge(address,address,uint256)\":{\"params\":{\"gauge\":\"Address of the gauge to decrease stake for\",\"oldStakeBalance\":\"Old stake balance of the user\",\"user\":\"Address of the user to decrease stake for\"}},\"afterIncreaseGauge(address,address,uint256)\":{\"params\":{\"gauge\":\"Address of the gauge to increase stake for\",\"oldStakeBalance\":\"Old stake balance of the user\",\"user\":\"Address of the user to increase stake for\"}}},\"title\":\"PoolTogether V4 IGaugeReward\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"afterDecreaseGauge(address,address,uint256)\":{\"notice\":\"Callback function to call in GaugeController after a user has decreased his gauge stake.\"},\"afterIncreaseGauge(address,address,uint256)\":{\"notice\":\"Fallback function to call in GaugeController after a user has increased their gauge stake.Callback function to call in GaugeController after a user has increased their gauge stake.\"}},\"notice\":\"The GaugeReward interface.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IGaugeReward.sol\":\"IGaugeReward\"},\"evmVersion\":\"berlin\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IGaugeReward.sol\":{\"keccak256\":\"0x826190a5356dcf82b37edfd14432e297853ec1c5a1923b23d751ef4026cfd9f2\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://169830a721873b1cb552bca0445dcc225ee4057cfd0b0242a3a84cfb53117388\",\"dweb:/ipfs/QmSs915uCyAVKgNp7fUz4923gn9iNJM196vJsLMDeZ8VaQ\"]}},\"version\":1}",
					"storageLayout": {
						"storage": [],
						"types": null
					},
					"userdoc": {
						"kind": "user",
						"methods": {
							"afterDecreaseGauge(address,address,uint256)": {
								"notice": "Callback function to call in GaugeController after a user has decreased his gauge stake."
							},
							"afterIncreaseGauge(address,address,uint256)": {
								"notice": "Fallback function to call in GaugeController after a user has increased their gauge stake.Callback function to call in GaugeController after a user has increased their gauge stake."
							}
						},
						"notice": "The GaugeReward interface.",
						"version": 1
					}
				}
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IPrizePool.sol": {
				"IPrizePool": {
					"abi": [
						{
							"anonymous": false,
							"inputs": [
								{
									"indexed": false,
									"internalType": "uint256",
									"name": "amount",
									"type": "uint256"
								}
							],
							"name": "AwardCaptured",
							"type": "event"
						},
						{
							"anonymous": false,
							"inputs": [
								{
									"indexed": true,
									"internalType": "address",
									"name": "winner",
									"type": "address"
								},
								{
									"indexed": true,
									"internalType": "contract ITicket",
									"name": "token",
									"type": "address"
								},
								{
									"indexed": false,
									"internalType": "uint256",
									"name": "amount",
									"type": "uint256"
								}
							],
							"name": "Awarded",
							"type": "event"
						},
						{
							"anonymous": false,
							"inputs": [
								{
									"indexed": true,
									"internalType": "address",
									"name": "winner",
									"type": "address"
								},
								{
									"indexed": true,
									"internalType": "address",
									"name": "token",
									"type": "address"
								},
								{
									"indexed": false,
									"internalType": "uint256",
									"name": "amount",
									"type": "uint256"
								}
							],
							"name": "AwardedExternalERC20",
							"type": "event"
						},
						{
							"anonymous": false,
							"inputs": [
								{
									"indexed": true,
									"internalType": "address",
									"name": "winner",
									"type": "address"
								},
								{
									"indexed": true,
									"internalType": "address",
									"name": "token",
									"type": "address"
								},
								{
									"indexed": false,
									"internalType": "uint256[]",
									"name": "tokenIds",
									"type": "uint256[]"
								}
							],
							"name": "AwardedExternalERC721",
							"type": "event"
						},
						{
							"anonymous": false,
							"inputs": [
								{
									"indexed": false,
									"internalType": "uint256",
									"name": "balanceCap",
									"type": "uint256"
								}
							],
							"name": "BalanceCapSet",
							"type": "event"
						},
						{
							"anonymous": false,
							"inputs": [
								{
									"indexed": true,
									"internalType": "contract ITicket",
									"name": "token",
									"type": "address"
								}
							],
							"name": "ControlledTokenAdded",
							"type": "event"
						},
						{
							"anonymous": false,
							"inputs": [
								{
									"indexed": true,
									"internalType": "address",
									"name": "operator",
									"type": "address"
								},
								{
									"indexed": true,
									"internalType": "address",
									"name": "to",
									"type": "address"
								},
								{
									"indexed": true,
									"internalType": "contract ITicket",
									"name": "token",
									"type": "address"
								},
								{
									"indexed": false,
									"internalType": "uint256",
									"name": "amount",
									"type": "uint256"
								}
							],
							"name": "Deposited",
							"type": "event"
						},
						{
							"anonymous": false,
							"inputs": [
								{
									"indexed": false,
									"internalType": "bytes",
									"name": "error",
									"type": "bytes"
								}
							],
							"name": "ErrorAwardingExternalERC721",
							"type": "event"
						},
						{
							"anonymous": false,
							"inputs": [
								{
									"indexed": false,
									"internalType": "uint256",
									"name": "liquidityCap",
									"type": "uint256"
								}
							],
							"name": "LiquidityCapSet",
							"type": "event"
						},
						{
							"anonymous": false,
							"inputs": [
								{
									"indexed": true,
									"internalType": "address",
									"name": "prizeStrategy",
									"type": "address"
								}
							],
							"name": "PrizeStrategySet",
							"type": "event"
						},
						{
							"anonymous": false,
							"inputs": [
								{
									"indexed": true,
									"internalType": "contract ITicket",
									"name": "ticket",
									"type": "address"
								}
							],
							"name": "TicketSet",
							"type": "event"
						},
						{
							"anonymous": false,
							"inputs": [
								{
									"indexed": true,
									"internalType": "address",
									"name": "to",
									"type": "address"
								},
								{
									"indexed": true,
									"internalType": "address",
									"name": "token",
									"type": "address"
								},
								{
									"indexed": false,
									"internalType": "uint256",
									"name": "amount",
									"type": "uint256"
								}
							],
							"name": "TransferredExternalERC20",
							"type": "event"
						},
						{
							"anonymous": false,
							"inputs": [
								{
									"indexed": true,
									"internalType": "address",
									"name": "operator",
									"type": "address"
								},
								{
									"indexed": true,
									"internalType": "address",
									"name": "from",
									"type": "address"
								},
								{
									"indexed": true,
									"internalType": "contract ITicket",
									"name": "token",
									"type": "address"
								},
								{
									"indexed": false,
									"internalType": "uint256",
									"name": "amount",
									"type": "uint256"
								},
								{
									"indexed": false,
									"internalType": "uint256",
									"name": "redeemed",
									"type": "uint256"
								}
							],
							"name": "Withdrawal",
							"type": "event"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "to",
									"type": "address"
								},
								{
									"internalType": "uint256",
									"name": "amount",
									"type": "uint256"
								}
							],
							"name": "award",
							"outputs": [],
							"stateMutability": "nonpayable",
							"type": "function"
						},
						{
							"inputs": [],
							"name": "awardBalance",
							"outputs": [
								{
									"internalType": "uint256",
									"name": "",
									"type": "uint256"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "to",
									"type": "address"
								},
								{
									"internalType": "address",
									"name": "externalToken",
									"type": "address"
								},
								{
									"internalType": "uint256",
									"name": "amount",
									"type": "uint256"
								}
							],
							"name": "awardExternalERC20",
							"outputs": [],
							"stateMutability": "nonpayable",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "to",
									"type": "address"
								},
								{
									"internalType": "address",
									"name": "externalToken",
									"type": "address"
								},
								{
									"internalType": "uint256[]",
									"name": "tokenIds",
									"type": "uint256[]"
								}
							],
							"name": "awardExternalERC721",
							"outputs": [],
							"stateMutability": "nonpayable",
							"type": "function"
						},
						{
							"inputs": [],
							"name": "balance",
							"outputs": [
								{
									"internalType": "uint256",
									"name": "",
									"type": "uint256"
								}
							],
							"stateMutability": "nonpayable",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "externalToken",
									"type": "address"
								}
							],
							"name": "canAwardExternal",
							"outputs": [
								{
									"internalType": "bool",
									"name": "",
									"type": "bool"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [],
							"name": "captureAwardBalance",
							"outputs": [
								{
									"internalType": "uint256",
									"name": "",
									"type": "uint256"
								}
							],
							"stateMutability": "nonpayable",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "contract ICompLike",
									"name": "compLike",
									"type": "address"
								},
								{
									"internalType": "address",
									"name": "to",
									"type": "address"
								}
							],
							"name": "compLikeDelegate",
							"outputs": [],
							"stateMutability": "nonpayable",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "to",
									"type": "address"
								},
								{
									"internalType": "uint256",
									"name": "amount",
									"type": "uint256"
								}
							],
							"name": "depositTo",
							"outputs": [],
							"stateMutability": "nonpayable",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "to",
									"type": "address"
								},
								{
									"internalType": "uint256",
									"name": "amount",
									"type": "uint256"
								},
								{
									"internalType": "address",
									"name": "delegate",
									"type": "address"
								}
							],
							"name": "depositToAndDelegate",
							"outputs": [],
							"stateMutability": "nonpayable",
							"type": "function"
						},
						{
							"inputs": [],
							"name": "getAccountedBalance",
							"outputs": [
								{
									"internalType": "uint256",
									"name": "",
									"type": "uint256"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [],
							"name": "getBalanceCap",
							"outputs": [
								{
									"internalType": "uint256",
									"name": "",
									"type": "uint256"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [],
							"name": "getLiquidityCap",
							"outputs": [
								{
									"internalType": "uint256",
									"name": "",
									"type": "uint256"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [],
							"name": "getPrizeStrategy",
							"outputs": [
								{
									"internalType": "address",
									"name": "",
									"type": "address"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [],
							"name": "getTicket",
							"outputs": [
								{
									"internalType": "contract ITicket",
									"name": "",
									"type": "address"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [],
							"name": "getToken",
							"outputs": [
								{
									"internalType": "address",
									"name": "",
									"type": "address"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "contract ITicket",
									"name": "controlledToken",
									"type": "address"
								}
							],
							"name": "isControlled",
							"outputs": [
								{
									"internalType": "bool",
									"name": "",
									"type": "bool"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "uint256",
									"name": "balanceCap",
									"type": "uint256"
								}
							],
							"name": "setBalanceCap",
							"outputs": [
								{
									"internalType": "bool",
									"name": "",
									"type": "bool"
								}
							],
							"stateMutability": "nonpayable",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "uint256",
									"name": "liquidityCap",
									"type": "uint256"
								}
							],
							"name": "setLiquidityCap",
							"outputs": [],
							"stateMutability": "nonpayable",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "_prizeStrategy",
									"type": "address"
								}
							],
							"name": "setPrizeStrategy",
							"outputs": [],
							"stateMutability": "nonpayable",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "contract ITicket",
									"name": "ticket",
									"type": "address"
								}
							],
							"name": "setTicket",
							"outputs": [
								{
									"internalType": "bool",
									"name": "",
									"type": "bool"
								}
							],
							"stateMutability": "nonpayable",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "to",
									"type": "address"
								},
								{
									"internalType": "address",
									"name": "externalToken",
									"type": "address"
								},
								{
									"internalType": "uint256",
									"name": "amount",
									"type": "uint256"
								}
							],
							"name": "transferExternalERC20",
							"outputs": [],
							"stateMutability": "nonpayable",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "from",
									"type": "address"
								},
								{
									"internalType": "uint256",
									"name": "amount",
									"type": "uint256"
								}
							],
							"name": "withdrawFrom",
							"outputs": [
								{
									"internalType": "uint256",
									"name": "",
									"type": "uint256"
								}
							],
							"stateMutability": "nonpayable",
							"type": "function"
						}
					],
					"devdoc": {
						"events": {
							"Awarded(address,address,uint256)": {
								"details": "Event emitted when interest is awarded to a winner"
							},
							"AwardedExternalERC20(address,address,uint256)": {
								"details": "Event emitted when external ERC20s are awarded to a winner"
							},
							"AwardedExternalERC721(address,address,uint256[])": {
								"details": "Event emitted when external ERC721s are awarded to a winner"
							},
							"BalanceCapSet(uint256)": {
								"details": "Event emitted when the Balance Cap is set"
							},
							"ControlledTokenAdded(address)": {
								"details": "Event emitted when controlled token is added"
							},
							"Deposited(address,address,address,uint256)": {
								"details": "Event emitted when assets are deposited"
							},
							"ErrorAwardingExternalERC721(bytes)": {
								"details": "Emitted when there was an error thrown awarding an External ERC721"
							},
							"LiquidityCapSet(uint256)": {
								"details": "Event emitted when the Liquidity Cap is set"
							},
							"PrizeStrategySet(address)": {
								"details": "Event emitted when the Prize Strategy is set"
							},
							"TicketSet(address)": {
								"details": "Event emitted when the Ticket is set"
							},
							"TransferredExternalERC20(address,address,uint256)": {
								"details": "Event emitted when external ERC20s are transferred out"
							},
							"Withdrawal(address,address,address,uint256,uint256)": {
								"details": "Event emitted when assets are withdrawn"
							}
						},
						"kind": "dev",
						"methods": {
							"award(address,uint256)": {
								"details": "The amount awarded must be less than the awardBalance()",
								"params": {
									"amount": "The amount of assets to be awarded",
									"to": "The address of the winner that receives the award"
								}
							},
							"awardBalance()": {
								"details": "captureAwardBalance() should be called first",
								"returns": {
									"_0": "The total amount of assets to be awarded for the current prize"
								}
							},
							"awardExternalERC20(address,address,uint256)": {
								"details": "Used to award any arbitrary tokens held by the Prize Pool",
								"params": {
									"amount": "The amount of external assets to be awarded",
									"externalToken": "The address of the external asset token being awarded",
									"to": "The address of the winner that receives the award"
								}
							},
							"awardExternalERC721(address,address,uint256[])": {
								"details": "Used to award any arbitrary NFTs held by the Prize Pool",
								"params": {
									"externalToken": "The address of the external NFT token being awarded",
									"to": "The address of the winner that receives the award",
									"tokenIds": "An array of NFT Token IDs to be transferred"
								}
							},
							"balance()": {
								"returns": {
									"_0": "The underlying balance of assets"
								}
							},
							"canAwardExternal(address)": {
								"details": "Checks with the Prize Pool if a specific token type may be awarded as an external prize",
								"params": {
									"externalToken": "The address of the token to check"
								},
								"returns": {
									"_0": "True if the token may be awarded, false otherwise"
								}
							},
							"captureAwardBalance()": {
								"details": "This function also captures the reserve fees.",
								"returns": {
									"_0": "The total amount of assets to be awarded for the current prize"
								}
							},
							"compLikeDelegate(address,address)": {
								"params": {
									"compLike": "The COMP-like token held by the prize pool that should be delegated",
									"to": "The address to delegate to"
								}
							},
							"depositTo(address,uint256)": {
								"params": {
									"amount": "The amount of assets to deposit",
									"to": "The address receiving the newly minted tokens"
								}
							},
							"depositToAndDelegate(address,uint256,address)": {
								"params": {
									"amount": "The amount of assets to deposit",
									"delegate": "The address to delegate to for the caller",
									"to": "The address receiving the newly minted tokens"
								}
							},
							"getAccountedBalance()": {
								"returns": {
									"_0": "uint256 accountBalance"
								}
							},
							"isControlled(address)": {
								"details": "Checks if a specific token is controlled by the Prize Pool",
								"params": {
									"controlledToken": "The address of the token to check"
								},
								"returns": {
									"_0": "True if the token is a controlled token, false otherwise"
								}
							},
							"setBalanceCap(uint256)": {
								"details": "If a user wins, his balance can go over the cap. He will be able to withdraw the excess but not deposit.Needs to be called after deploying a prize pool to be able to deposit into it.",
								"params": {
									"balanceCap": "New balance cap."
								},
								"returns": {
									"_0": "True if new balance cap has been successfully set."
								}
							},
							"setLiquidityCap(uint256)": {
								"params": {
									"liquidityCap": "The new liquidity cap for the prize pool"
								}
							},
							"setPrizeStrategy(address)": {
								"params": {
									"_prizeStrategy": "The new prize strategy."
								}
							},
							"setTicket(address)": {
								"params": {
									"ticket": "Address of the ticket to set."
								},
								"returns": {
									"_0": "True if ticket has been successfully set."
								}
							},
							"transferExternalERC20(address,address,uint256)": {
								"details": "Used to transfer out tokens held by the Prize Pool.  Could be liquidated, or anything.",
								"params": {
									"amount": "The amount of external assets to be awarded",
									"externalToken": "The address of the external asset token being awarded",
									"to": "The address of the winner that receives the award"
								}
							},
							"withdrawFrom(address,uint256)": {
								"params": {
									"amount": "The amount of tokens to redeem for assets.",
									"from": "The address to redeem tokens from."
								},
								"returns": {
									"_0": "The actual amount withdrawn"
								}
							}
						},
						"version": 1
					},
					"evm": {
						"assembly": "",
						"bytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"linkReferences": {},
							"object": "",
							"opcodes": "",
							"sourceMap": ""
						},
						"deployedBytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"immutableReferences": {},
							"linkReferences": {},
							"object": "",
							"opcodes": "",
							"sourceMap": ""
						},
						"gasEstimates": null,
						"legacyAssembly": null,
						"methodIdentifiers": {
							"award(address,uint256)": "5d8a776e",
							"awardBalance()": "630665b4",
							"awardExternalERC20(address,address,uint256)": "2b0ab144",
							"awardExternalERC721(address,address,uint256[])": "16960d55",
							"balance()": "b69ef8a8",
							"canAwardExternal(address)": "6a3fd4f9",
							"captureAwardBalance()": "e6d8a94b",
							"compLikeDelegate(address,address)": "2f7627e3",
							"depositTo(address,uint256)": "ffaad6a5",
							"depositToAndDelegate(address,uint256,address)": "d7a169eb",
							"getAccountedBalance()": "33e5761f",
							"getBalanceCap()": "08234319",
							"getLiquidityCap()": "b15a49c1",
							"getPrizeStrategy()": "d804abaf",
							"getTicket()": "c002c4d6",
							"getToken()": "21df0da7",
							"isControlled(address)": "78b3d327",
							"setBalanceCap(uint256)": "aec9c307",
							"setLiquidityCap(uint256)": "7b99adb1",
							"setPrizeStrategy(address)": "91ca480e",
							"setTicket(address)": "1c65c78b",
							"transferExternalERC20(address,address,uint256)": "13f55e39",
							"withdrawFrom(address,uint256)": "9470b0bd"
						}
					},
					"metadata": "{\"compiler\":{\"version\":\"0.8.6+commit.11564f7e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"AwardCaptured\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"winner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract ITicket\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Awarded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"winner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"AwardedExternalERC20\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"winner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"}],\"name\":\"AwardedExternalERC721\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceCap\",\"type\":\"uint256\"}],\"name\":\"BalanceCapSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract ITicket\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"ControlledTokenAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract ITicket\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Deposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"error\",\"type\":\"bytes\"}],\"name\":\"ErrorAwardingExternalERC721\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidityCap\",\"type\":\"uint256\"}],\"name\":\"LiquidityCapSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"prizeStrategy\",\"type\":\"address\"}],\"name\":\"PrizeStrategySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract ITicket\",\"name\":\"ticket\",\"type\":\"address\"}],\"name\":\"TicketSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferredExternalERC20\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract ITicket\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"redeemed\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"award\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"awardBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"externalToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"awardExternalERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"externalToken\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"}],\"name\":\"awardExternalERC721\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"balance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"externalToken\",\"type\":\"address\"}],\"name\":\"canAwardExternal\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"captureAwardBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ICompLike\",\"name\":\"compLike\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"compLikeDelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"depositTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"}],\"name\":\"depositToAndDelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAccountedBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBalanceCap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLiquidityCap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPrizeStrategy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTicket\",\"outputs\":[{\"internalType\":\"contract ITicket\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ITicket\",\"name\":\"controlledToken\",\"type\":\"address\"}],\"name\":\"isControlled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balanceCap\",\"type\":\"uint256\"}],\"name\":\"setBalanceCap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"liquidityCap\",\"type\":\"uint256\"}],\"name\":\"setLiquidityCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_prizeStrategy\",\"type\":\"address\"}],\"name\":\"setPrizeStrategy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ITicket\",\"name\":\"ticket\",\"type\":\"address\"}],\"name\":\"setTicket\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"externalToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferExternalERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawFrom\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"Awarded(address,address,uint256)\":{\"details\":\"Event emitted when interest is awarded to a winner\"},\"AwardedExternalERC20(address,address,uint256)\":{\"details\":\"Event emitted when external ERC20s are awarded to a winner\"},\"AwardedExternalERC721(address,address,uint256[])\":{\"details\":\"Event emitted when external ERC721s are awarded to a winner\"},\"BalanceCapSet(uint256)\":{\"details\":\"Event emitted when the Balance Cap is set\"},\"ControlledTokenAdded(address)\":{\"details\":\"Event emitted when controlled token is added\"},\"Deposited(address,address,address,uint256)\":{\"details\":\"Event emitted when assets are deposited\"},\"ErrorAwardingExternalERC721(bytes)\":{\"details\":\"Emitted when there was an error thrown awarding an External ERC721\"},\"LiquidityCapSet(uint256)\":{\"details\":\"Event emitted when the Liquidity Cap is set\"},\"PrizeStrategySet(address)\":{\"details\":\"Event emitted when the Prize Strategy is set\"},\"TicketSet(address)\":{\"details\":\"Event emitted when the Ticket is set\"},\"TransferredExternalERC20(address,address,uint256)\":{\"details\":\"Event emitted when external ERC20s are transferred out\"},\"Withdrawal(address,address,address,uint256,uint256)\":{\"details\":\"Event emitted when assets are withdrawn\"}},\"kind\":\"dev\",\"methods\":{\"award(address,uint256)\":{\"details\":\"The amount awarded must be less than the awardBalance()\",\"params\":{\"amount\":\"The amount of assets to be awarded\",\"to\":\"The address of the winner that receives the award\"}},\"awardBalance()\":{\"details\":\"captureAwardBalance() should be called first\",\"returns\":{\"_0\":\"The total amount of assets to be awarded for the current prize\"}},\"awardExternalERC20(address,address,uint256)\":{\"details\":\"Used to award any arbitrary tokens held by the Prize Pool\",\"params\":{\"amount\":\"The amount of external assets to be awarded\",\"externalToken\":\"The address of the external asset token being awarded\",\"to\":\"The address of the winner that receives the award\"}},\"awardExternalERC721(address,address,uint256[])\":{\"details\":\"Used to award any arbitrary NFTs held by the Prize Pool\",\"params\":{\"externalToken\":\"The address of the external NFT token being awarded\",\"to\":\"The address of the winner that receives the award\",\"tokenIds\":\"An array of NFT Token IDs to be transferred\"}},\"balance()\":{\"returns\":{\"_0\":\"The underlying balance of assets\"}},\"canAwardExternal(address)\":{\"details\":\"Checks with the Prize Pool if a specific token type may be awarded as an external prize\",\"params\":{\"externalToken\":\"The address of the token to check\"},\"returns\":{\"_0\":\"True if the token may be awarded, false otherwise\"}},\"captureAwardBalance()\":{\"details\":\"This function also captures the reserve fees.\",\"returns\":{\"_0\":\"The total amount of assets to be awarded for the current prize\"}},\"compLikeDelegate(address,address)\":{\"params\":{\"compLike\":\"The COMP-like token held by the prize pool that should be delegated\",\"to\":\"The address to delegate to\"}},\"depositTo(address,uint256)\":{\"params\":{\"amount\":\"The amount of assets to deposit\",\"to\":\"The address receiving the newly minted tokens\"}},\"depositToAndDelegate(address,uint256,address)\":{\"params\":{\"amount\":\"The amount of assets to deposit\",\"delegate\":\"The address to delegate to for the caller\",\"to\":\"The address receiving the newly minted tokens\"}},\"getAccountedBalance()\":{\"returns\":{\"_0\":\"uint256 accountBalance\"}},\"isControlled(address)\":{\"details\":\"Checks if a specific token is controlled by the Prize Pool\",\"params\":{\"controlledToken\":\"The address of the token to check\"},\"returns\":{\"_0\":\"True if the token is a controlled token, false otherwise\"}},\"setBalanceCap(uint256)\":{\"details\":\"If a user wins, his balance can go over the cap. He will be able to withdraw the excess but not deposit.Needs to be called after deploying a prize pool to be able to deposit into it.\",\"params\":{\"balanceCap\":\"New balance cap.\"},\"returns\":{\"_0\":\"True if new balance cap has been successfully set.\"}},\"setLiquidityCap(uint256)\":{\"params\":{\"liquidityCap\":\"The new liquidity cap for the prize pool\"}},\"setPrizeStrategy(address)\":{\"params\":{\"_prizeStrategy\":\"The new prize strategy.\"}},\"setTicket(address)\":{\"params\":{\"ticket\":\"Address of the ticket to set.\"},\"returns\":{\"_0\":\"True if ticket has been successfully set.\"}},\"transferExternalERC20(address,address,uint256)\":{\"details\":\"Used to transfer out tokens held by the Prize Pool.  Could be liquidated, or anything.\",\"params\":{\"amount\":\"The amount of external assets to be awarded\",\"externalToken\":\"The address of the external asset token being awarded\",\"to\":\"The address of the winner that receives the award\"}},\"withdrawFrom(address,uint256)\":{\"params\":{\"amount\":\"The amount of tokens to redeem for assets.\",\"from\":\"The address to redeem tokens from.\"},\"returns\":{\"_0\":\"The actual amount withdrawn\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"award(address,uint256)\":{\"notice\":\"Called by the prize strategy to award prizes.\"},\"awardBalance()\":{\"notice\":\"Returns the balance that is available to award.\"},\"awardExternalERC20(address,address,uint256)\":{\"notice\":\"Called by the Prize-Strategy to award external ERC20 prizes\"},\"awardExternalERC721(address,address,uint256[])\":{\"notice\":\"Called by the prize strategy to award external ERC721 prizes\"},\"captureAwardBalance()\":{\"notice\":\"Captures any available interest as award balance.\"},\"compLikeDelegate(address,address)\":{\"notice\":\"Delegate the votes for a Compound COMP-like token held by the prize pool\"},\"depositTo(address,uint256)\":{\"notice\":\"Deposit assets into the Prize Pool in exchange for tokens\"},\"depositToAndDelegate(address,uint256,address)\":{\"notice\":\"Deposit assets into the Prize Pool in exchange for tokens, then sets the delegate on behalf of the caller.\"},\"getAccountedBalance()\":{\"notice\":\"Read internal Ticket accounted balance.\"},\"getBalanceCap()\":{\"notice\":\"Read internal balanceCap variable\"},\"getLiquidityCap()\":{\"notice\":\"Read internal liquidityCap variable\"},\"getPrizeStrategy()\":{\"notice\":\"Read prizeStrategy variable\"},\"getTicket()\":{\"notice\":\"Read ticket variable\"},\"getToken()\":{\"notice\":\"Read token variable\"},\"setBalanceCap(uint256)\":{\"notice\":\"Allows the owner to set a balance cap per `token` for the pool.\"},\"setLiquidityCap(uint256)\":{\"notice\":\"Allows the Governor to set a cap on the amount of liquidity that he pool can hold\"},\"setPrizeStrategy(address)\":{\"notice\":\"Sets the prize strategy of the prize pool.  Only callable by the owner.\"},\"setTicket(address)\":{\"notice\":\"Set prize pool ticket.\"},\"transferExternalERC20(address,address,uint256)\":{\"notice\":\"Called by the Prize-Strategy to transfer out external ERC20 tokens\"},\"withdrawFrom(address,uint256)\":{\"notice\":\"Withdraw assets from the Prize Pool instantly.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IPrizePool.sol\":\"IPrizePool\"},\"evmVersion\":\"berlin\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x02686c31ccb9ee77a299fa5f47327af5271f251a707a0e24f321957166ff0434\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cb562d8ae1da31249ca0d8553df9f89ef4c3c110a018c4449dde68ae30e51ec1\",\"dweb:/ipfs/QmUwxjtTUYB89ymeV46TZPmTsGnYrKNcgTHk7MQA1MG3hj\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/external/compound/ICompLike.sol\":{\"keccak256\":\"0x34d2c8a57ca27b9c58ec07c4bd8d263c71a25d194068ad9403f3895dc99a7122\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://d15acebd8cb80778b256095d1d57bc202a81dfab38de857799e7391590416fbe\",\"dweb:/ipfs/QmTRv7iQb5UjTa62kKuUKcZadyKFrRX7JYFnvuJyJTAexx\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IControlledToken.sol\":{\"keccak256\":\"0x90dceeec1eea6e49021e8db88b084f3f0c503c60b6f7e0bbecd2529ffde87ef3\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://d6fda119bce121e99c834d36e37f760ce16528adc9405a263d66ea83ee083cda\",\"dweb:/ipfs/QmbPo9QWUB6KQ8jUaka8GC39o9MrB6YoGuc47QQRyyYYBz\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IPrizePool.sol\":{\"keccak256\":\"0xa3cc6bff882d541d6642bbff0988fc592ff513a682dde6888ab55eaec29df7a9\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://c9f415ac186d10daebd5c0d6d3a65ad90dd3c6f924f4ea2ffb6f202a155ebd96\",\"dweb:/ipfs/QmX2w6vucPEy6q7dURRXR7NPm1qjHbamY2D5Jr33QZaa4H\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/ITicket.sol\":{\"keccak256\":\"0xb9f6423a8a9c7394941cb84723b82cc66c5f815d689dc0562e612ae4d9f1cc27\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://baa0a5d2006fa451876f0507f71b0299993d17a4867e2f4cf5079bbc9ca33c0d\",\"dweb:/ipfs/QmTB8bWNfPK45E9zmKXyLCopDiMd9UWNM1WNVJLPfEMqxC\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/ExtendedSafeCastLib.sol\":{\"keccak256\":\"0x9dae48760b4f78e5418ea8f44abe51fd40570b3159fac80ff17935b6451dcacd\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://c42ee90f5e36b58e049eb582d20250ab83faebec81f4b4664fe5e2a093f04aba\",\"dweb:/ipfs/QmNmUzXXiR7JYsMRU9qyZNMp6SVmj7UUz8kS2qr5nPTtTM\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/ObservationLib.sol\":{\"keccak256\":\"0x225592b42013fc0af60822e75bc047d53b42a5fcf15f2173cdc3b50bea334b0a\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://3b2023bfcc8fb346a52c519b3667c8bb1b935d16993d68b651ec2b84f61d8f3c\",\"dweb:/ipfs/QmYP7kPZefm4SN4kaJwMNrJq3KyYwfvndXY6XQdxeih646\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/OverflowSafeComparatorLib.sol\":{\"keccak256\":\"0x20630cf89e7b92462946defe979fd0e69fa119841d55886121948ad810778c74\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://2dda66ae7137027e803570a61c0aff2aa5bcf9c430ff068ba10529b1c5dd3d6a\",\"dweb:/ipfs/QmZbWq1fiisXBnj774CTKwZQF3vdgj16EUqGGQPegxLWZq\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/RingBufferLib.sol\":{\"keccak256\":\"0x052e3bf6bfb30f32950e322c853589a8d153cf34f4b1ee292b17eb46f2ae656c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://587d1e6fd1df4bfe26b78a23503e67f171c68bb44afe6582bbcb5726b9a60808\",\"dweb:/ipfs/Qmb2F87Lh23o922Qn8Mt2uZBz8qKoEfwMtwQYCT5L5z5wd\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/TwabLib.sol\":{\"keccak256\":\"0x446d8221329601d40464981a50a0e31f3fd48da0ebf0fea646c5a089ccfbdff4\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://d6e67f1f69fa796c388eb4733090445cf7bc859e463f1d3be36973e8cd258528\",\"dweb:/ipfs/QmYA3noFrMP1QwoQEAN3yyXYJvJfTb47uS5hdR6LBxrwjY\"]}},\"version\":1}",
					"storageLayout": {
						"storage": [],
						"types": null
					},
					"userdoc": {
						"kind": "user",
						"methods": {
							"award(address,uint256)": {
								"notice": "Called by the prize strategy to award prizes."
							},
							"awardBalance()": {
								"notice": "Returns the balance that is available to award."
							},
							"awardExternalERC20(address,address,uint256)": {
								"notice": "Called by the Prize-Strategy to award external ERC20 prizes"
							},
							"awardExternalERC721(address,address,uint256[])": {
								"notice": "Called by the prize strategy to award external ERC721 prizes"
							},
							"captureAwardBalance()": {
								"notice": "Captures any available interest as award balance."
							},
							"compLikeDelegate(address,address)": {
								"notice": "Delegate the votes for a Compound COMP-like token held by the prize pool"
							},
							"depositTo(address,uint256)": {
								"notice": "Deposit assets into the Prize Pool in exchange for tokens"
							},
							"depositToAndDelegate(address,uint256,address)": {
								"notice": "Deposit assets into the Prize Pool in exchange for tokens, then sets the delegate on behalf of the caller."
							},
							"getAccountedBalance()": {
								"notice": "Read internal Ticket accounted balance."
							},
							"getBalanceCap()": {
								"notice": "Read internal balanceCap variable"
							},
							"getLiquidityCap()": {
								"notice": "Read internal liquidityCap variable"
							},
							"getPrizeStrategy()": {
								"notice": "Read prizeStrategy variable"
							},
							"getTicket()": {
								"notice": "Read ticket variable"
							},
							"getToken()": {
								"notice": "Read token variable"
							},
							"setBalanceCap(uint256)": {
								"notice": "Allows the owner to set a balance cap per `token` for the pool."
							},
							"setLiquidityCap(uint256)": {
								"notice": "Allows the Governor to set a cap on the amount of liquidity that he pool can hold"
							},
							"setPrizeStrategy(address)": {
								"notice": "Sets the prize strategy of the prize pool.  Only callable by the owner."
							},
							"setTicket(address)": {
								"notice": "Set prize pool ticket."
							},
							"transferExternalERC20(address,address,uint256)": {
								"notice": "Called by the Prize-Strategy to transfer out external ERC20 tokens"
							},
							"withdrawFrom(address,uint256)": {
								"notice": "Withdraw assets from the Prize Pool instantly."
							}
						},
						"version": 1
					}
				}
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IPrizePoolLiquidatorListener.sol": {
				"IPrizePoolLiquidatorListener": {
					"abi": [
						{
							"inputs": [
								{
									"internalType": "contract IPrizePool",
									"name": "prizePool",
									"type": "address"
								},
								{
									"internalType": "contract ITicket",
									"name": "ticket",
									"type": "address"
								},
								{
									"internalType": "uint256",
									"name": "ticketAmount",
									"type": "uint256"
								},
								{
									"internalType": "contract IERC20",
									"name": "token",
									"type": "address"
								},
								{
									"internalType": "uint256",
									"name": "tokenAmount",
									"type": "uint256"
								}
							],
							"name": "afterSwap",
							"outputs": [],
							"stateMutability": "nonpayable",
							"type": "function"
						}
					],
					"devdoc": {
						"author": "PoolTogether Inc Team",
						"kind": "dev",
						"methods": {},
						"version": 1
					},
					"evm": {
						"assembly": "",
						"bytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"linkReferences": {},
							"object": "",
							"opcodes": "",
							"sourceMap": ""
						},
						"deployedBytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"immutableReferences": {},
							"linkReferences": {},
							"object": "",
							"opcodes": "",
							"sourceMap": ""
						},
						"gasEstimates": null,
						"legacyAssembly": null,
						"methodIdentifiers": {
							"afterSwap(address,address,uint256,address,uint256)": "fd401628"
						}
					},
					"metadata": "{\"compiler\":{\"version\":\"0.8.6+commit.11564f7e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPrizePool\",\"name\":\"prizePool\",\"type\":\"address\"},{\"internalType\":\"contract ITicket\",\"name\":\"ticket\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"ticketAmount\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"}],\"name\":\"afterSwap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"PoolTogether Inc Team\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IPrizePoolLiquidatorListener.sol\":\"IPrizePoolLiquidatorListener\"},\"evmVersion\":\"berlin\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x02686c31ccb9ee77a299fa5f47327af5271f251a707a0e24f321957166ff0434\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cb562d8ae1da31249ca0d8553df9f89ef4c3c110a018c4449dde68ae30e51ec1\",\"dweb:/ipfs/QmUwxjtTUYB89ymeV46TZPmTsGnYrKNcgTHk7MQA1MG3hj\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/external/compound/ICompLike.sol\":{\"keccak256\":\"0x34d2c8a57ca27b9c58ec07c4bd8d263c71a25d194068ad9403f3895dc99a7122\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://d15acebd8cb80778b256095d1d57bc202a81dfab38de857799e7391590416fbe\",\"dweb:/ipfs/QmTRv7iQb5UjTa62kKuUKcZadyKFrRX7JYFnvuJyJTAexx\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IControlledToken.sol\":{\"keccak256\":\"0x90dceeec1eea6e49021e8db88b084f3f0c503c60b6f7e0bbecd2529ffde87ef3\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://d6fda119bce121e99c834d36e37f760ce16528adc9405a263d66ea83ee083cda\",\"dweb:/ipfs/QmbPo9QWUB6KQ8jUaka8GC39o9MrB6YoGuc47QQRyyYYBz\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IPrizePool.sol\":{\"keccak256\":\"0xa3cc6bff882d541d6642bbff0988fc592ff513a682dde6888ab55eaec29df7a9\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://c9f415ac186d10daebd5c0d6d3a65ad90dd3c6f924f4ea2ffb6f202a155ebd96\",\"dweb:/ipfs/QmX2w6vucPEy6q7dURRXR7NPm1qjHbamY2D5Jr33QZaa4H\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IPrizePoolLiquidatorListener.sol\":{\"keccak256\":\"0x1ef7bba5f9a03825f60713f60eb2c96e58ddd20517046faf4a41d7fc8278e017\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://5850c888f4db850ad30fdd016c5b8c35eacdf24fe67d9d1af902f7f64a270f01\",\"dweb:/ipfs/QmbtvqvLoVA3zipuKawfoe6vWMEfkMH8phe5ZDZTX7Ewsz\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/ITicket.sol\":{\"keccak256\":\"0xb9f6423a8a9c7394941cb84723b82cc66c5f815d689dc0562e612ae4d9f1cc27\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://baa0a5d2006fa451876f0507f71b0299993d17a4867e2f4cf5079bbc9ca33c0d\",\"dweb:/ipfs/QmTB8bWNfPK45E9zmKXyLCopDiMd9UWNM1WNVJLPfEMqxC\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/ExtendedSafeCastLib.sol\":{\"keccak256\":\"0x9dae48760b4f78e5418ea8f44abe51fd40570b3159fac80ff17935b6451dcacd\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://c42ee90f5e36b58e049eb582d20250ab83faebec81f4b4664fe5e2a093f04aba\",\"dweb:/ipfs/QmNmUzXXiR7JYsMRU9qyZNMp6SVmj7UUz8kS2qr5nPTtTM\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/ObservationLib.sol\":{\"keccak256\":\"0x225592b42013fc0af60822e75bc047d53b42a5fcf15f2173cdc3b50bea334b0a\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://3b2023bfcc8fb346a52c519b3667c8bb1b935d16993d68b651ec2b84f61d8f3c\",\"dweb:/ipfs/QmYP7kPZefm4SN4kaJwMNrJq3KyYwfvndXY6XQdxeih646\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/OverflowSafeComparatorLib.sol\":{\"keccak256\":\"0x20630cf89e7b92462946defe979fd0e69fa119841d55886121948ad810778c74\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://2dda66ae7137027e803570a61c0aff2aa5bcf9c430ff068ba10529b1c5dd3d6a\",\"dweb:/ipfs/QmZbWq1fiisXBnj774CTKwZQF3vdgj16EUqGGQPegxLWZq\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/RingBufferLib.sol\":{\"keccak256\":\"0x052e3bf6bfb30f32950e322c853589a8d153cf34f4b1ee292b17eb46f2ae656c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://587d1e6fd1df4bfe26b78a23503e67f171c68bb44afe6582bbcb5726b9a60808\",\"dweb:/ipfs/Qmb2F87Lh23o922Qn8Mt2uZBz8qKoEfwMtwQYCT5L5z5wd\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/TwabLib.sol\":{\"keccak256\":\"0x446d8221329601d40464981a50a0e31f3fd48da0ebf0fea646c5a089ccfbdff4\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://d6e67f1f69fa796c388eb4733090445cf7bc859e463f1d3be36973e8cd258528\",\"dweb:/ipfs/QmYA3noFrMP1QwoQEAN3yyXYJvJfTb47uS5hdR6LBxrwjY\"]}},\"version\":1}",
					"storageLayout": {
						"storage": [],
						"types": null
					},
					"userdoc": {
						"kind": "user",
						"methods": {},
						"version": 1
					}
				}
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/ITicket.sol": {
				"ITicket": {
					"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": "delegator",
									"type": "address"
								},
								{
									"indexed": true,
									"internalType": "address",
									"name": "delegate",
									"type": "address"
								}
							],
							"name": "Delegated",
							"type": "event"
						},
						{
							"anonymous": false,
							"inputs": [
								{
									"components": [
										{
											"internalType": "uint224",
											"name": "amount",
											"type": "uint224"
										},
										{
											"internalType": "uint32",
											"name": "timestamp",
											"type": "uint32"
										}
									],
									"indexed": false,
									"internalType": "struct ObservationLib.Observation",
									"name": "newTotalSupplyTwab",
									"type": "tuple"
								}
							],
							"name": "NewTotalSupplyTwab",
							"type": "event"
						},
						{
							"anonymous": false,
							"inputs": [
								{
									"indexed": true,
									"internalType": "address",
									"name": "delegate",
									"type": "address"
								},
								{
									"components": [
										{
											"internalType": "uint224",
											"name": "amount",
											"type": "uint224"
										},
										{
											"internalType": "uint32",
											"name": "timestamp",
											"type": "uint32"
										}
									],
									"indexed": false,
									"internalType": "struct ObservationLib.Observation",
									"name": "newTwab",
									"type": "tuple"
								}
							],
							"name": "NewUserTwab",
							"type": "event"
						},
						{
							"anonymous": false,
							"inputs": [
								{
									"indexed": false,
									"internalType": "string",
									"name": "name",
									"type": "string"
								},
								{
									"indexed": false,
									"internalType": "string",
									"name": "symbol",
									"type": "string"
								},
								{
									"indexed": false,
									"internalType": "uint8",
									"name": "decimals",
									"type": "uint8"
								},
								{
									"indexed": true,
									"internalType": "address",
									"name": "controller",
									"type": "address"
								}
							],
							"name": "TicketInitialized",
							"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": "controller",
							"outputs": [
								{
									"internalType": "address",
									"name": "",
									"type": "address"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "user",
									"type": "address"
								},
								{
									"internalType": "uint256",
									"name": "amount",
									"type": "uint256"
								}
							],
							"name": "controllerBurn",
							"outputs": [],
							"stateMutability": "nonpayable",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "operator",
									"type": "address"
								},
								{
									"internalType": "address",
									"name": "user",
									"type": "address"
								},
								{
									"internalType": "uint256",
									"name": "amount",
									"type": "uint256"
								}
							],
							"name": "controllerBurnFrom",
							"outputs": [],
							"stateMutability": "nonpayable",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "user",
									"type": "address"
								},
								{
									"internalType": "address",
									"name": "delegate",
									"type": "address"
								}
							],
							"name": "controllerDelegateFor",
							"outputs": [],
							"stateMutability": "nonpayable",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "user",
									"type": "address"
								},
								{
									"internalType": "uint256",
									"name": "amount",
									"type": "uint256"
								}
							],
							"name": "controllerMint",
							"outputs": [],
							"stateMutability": "nonpayable",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "to",
									"type": "address"
								}
							],
							"name": "delegate",
							"outputs": [],
							"stateMutability": "nonpayable",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "user",
									"type": "address"
								}
							],
							"name": "delegateOf",
							"outputs": [
								{
									"internalType": "address",
									"name": "",
									"type": "address"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "user",
									"type": "address"
								},
								{
									"internalType": "address",
									"name": "delegate",
									"type": "address"
								},
								{
									"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": "delegateWithSignature",
							"outputs": [],
							"stateMutability": "nonpayable",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "user",
									"type": "address"
								}
							],
							"name": "getAccountDetails",
							"outputs": [
								{
									"components": [
										{
											"internalType": "uint208",
											"name": "balance",
											"type": "uint208"
										},
										{
											"internalType": "uint24",
											"name": "nextTwabIndex",
											"type": "uint24"
										},
										{
											"internalType": "uint24",
											"name": "cardinality",
											"type": "uint24"
										}
									],
									"internalType": "struct TwabLib.AccountDetails",
									"name": "",
									"type": "tuple"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "user",
									"type": "address"
								},
								{
									"internalType": "uint64",
									"name": "startTime",
									"type": "uint64"
								},
								{
									"internalType": "uint64",
									"name": "endTime",
									"type": "uint64"
								}
							],
							"name": "getAverageBalanceBetween",
							"outputs": [
								{
									"internalType": "uint256",
									"name": "",
									"type": "uint256"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "user",
									"type": "address"
								},
								{
									"internalType": "uint64[]",
									"name": "startTimes",
									"type": "uint64[]"
								},
								{
									"internalType": "uint64[]",
									"name": "endTimes",
									"type": "uint64[]"
								}
							],
							"name": "getAverageBalancesBetween",
							"outputs": [
								{
									"internalType": "uint256[]",
									"name": "",
									"type": "uint256[]"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "uint64[]",
									"name": "startTimes",
									"type": "uint64[]"
								},
								{
									"internalType": "uint64[]",
									"name": "endTimes",
									"type": "uint64[]"
								}
							],
							"name": "getAverageTotalSuppliesBetween",
							"outputs": [
								{
									"internalType": "uint256[]",
									"name": "",
									"type": "uint256[]"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "user",
									"type": "address"
								},
								{
									"internalType": "uint64",
									"name": "timestamp",
									"type": "uint64"
								}
							],
							"name": "getBalanceAt",
							"outputs": [
								{
									"internalType": "uint256",
									"name": "",
									"type": "uint256"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "user",
									"type": "address"
								},
								{
									"internalType": "uint64[]",
									"name": "timestamps",
									"type": "uint64[]"
								}
							],
							"name": "getBalancesAt",
							"outputs": [
								{
									"internalType": "uint256[]",
									"name": "",
									"type": "uint256[]"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "uint64[]",
									"name": "timestamps",
									"type": "uint64[]"
								}
							],
							"name": "getTotalSuppliesAt",
							"outputs": [
								{
									"internalType": "uint256[]",
									"name": "",
									"type": "uint256[]"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "uint64",
									"name": "timestamp",
									"type": "uint64"
								}
							],
							"name": "getTotalSupplyAt",
							"outputs": [
								{
									"internalType": "uint256",
									"name": "",
									"type": "uint256"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "user",
									"type": "address"
								},
								{
									"internalType": "uint16",
									"name": "index",
									"type": "uint16"
								}
							],
							"name": "getTwab",
							"outputs": [
								{
									"components": [
										{
											"internalType": "uint224",
											"name": "amount",
											"type": "uint224"
										},
										{
											"internalType": "uint32",
											"name": "timestamp",
											"type": "uint32"
										}
									],
									"internalType": "struct ObservationLib.Observation",
									"name": "",
									"type": "tuple"
								}
							],
							"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": {
						"events": {
							"Delegated(address,address)": {
								"params": {
									"delegate": "Address of the delegate.",
									"delegator": "Address of the delegator."
								}
							},
							"NewTotalSupplyTwab((uint224,uint32))": {
								"params": {
									"newTotalSupplyTwab": "Updated TWAB of tickets total supply after a successful total supply TWAB recording."
								}
							},
							"NewUserTwab(address,(uint224,uint32))": {
								"params": {
									"delegate": "The recipient of the ticket power (may be the same as the user).",
									"newTwab": "Updated TWAB of a ticket holder after a successful TWAB recording."
								}
							},
							"TicketInitialized(string,string,uint8,address)": {
								"params": {
									"controller": "Token controller address.",
									"decimals": "Ticket decimals.",
									"name": "Ticket name (eg: PoolTogether Dai Ticket (Compound)).",
									"symbol": "Ticket symbol (eg: PcDAI)."
								}
							}
						},
						"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`."
							},
							"controllerBurn(address,uint256)": {
								"details": "May be overridden to provide more granular control over burning",
								"params": {
									"amount": "Amount of tokens to burn",
									"user": "Address of the holder account to burn tokens from"
								}
							},
							"controllerBurnFrom(address,address,uint256)": {
								"details": "May be overridden to provide more granular control over operator-burning",
								"params": {
									"amount": "Amount of tokens to burn",
									"operator": "Address of the operator performing the burn action via the controller contract",
									"user": "Address of the holder account to burn tokens from"
								}
							},
							"controllerDelegateFor(address,address)": {
								"params": {
									"delegate": "The new delegate",
									"user": "The user for whom to delegate"
								}
							},
							"controllerMint(address,uint256)": {
								"details": "May be overridden to provide more granular control over minting",
								"params": {
									"amount": "Amount of tokens to mint",
									"user": "Address of the receiver of the minted tokens"
								}
							},
							"delegate(address)": {
								"details": "Transfers (including mints) trigger the storage of a TWAB in delegate(s) account, instead of the targetted sender and/or recipient address(s).To reset the delegate, pass the zero address (0x000.000) as `to` parameter.Current delegate address should be different from the new delegate address `to`.",
								"params": {
									"to": "Recipient of delegated TWAB."
								}
							},
							"delegateOf(address)": {
								"details": "Address of the delegate will be the zero address if `user` has not delegated their tickets.",
								"params": {
									"user": "Address of the delegator."
								},
								"returns": {
									"_0": "Address of the delegate."
								}
							},
							"delegateWithSignature(address,address,uint256,uint8,bytes32,bytes32)": {
								"params": {
									"deadline": "The timestamp by which this must be submitted",
									"delegate": "The new delegate",
									"r": "The r portion of the ECDSA sig",
									"s": "The s portion of the ECDSA sig",
									"user": "The user who is delegating",
									"v": "The v portion of the ECDSA sig"
								}
							},
							"getAccountDetails(address)": {
								"params": {
									"user": "The user for whom to fetch the TWAB context."
								},
								"returns": {
									"_0": "The TWAB context, which includes { balance, nextTwabIndex, cardinality }"
								}
							},
							"getAverageBalanceBetween(address,uint64,uint64)": {
								"params": {
									"endTime": "The end time of the time frame.",
									"startTime": "The start time of the time frame.",
									"user": "The user whose balance is checked."
								},
								"returns": {
									"_0": "The average balance that the user held during the time frame."
								}
							},
							"getAverageBalancesBetween(address,uint64[],uint64[])": {
								"params": {
									"endTimes": "The end time of the time frame.",
									"startTimes": "The start time of the time frame.",
									"user": "The user whose balance is checked."
								},
								"returns": {
									"_0": "The average balance that the user held during the time frame."
								}
							},
							"getAverageTotalSuppliesBetween(uint64[],uint64[])": {
								"params": {
									"endTimes": "Array of end times.",
									"startTimes": "Array of start times."
								},
								"returns": {
									"_0": "The average total supplies held during the time frame."
								}
							},
							"getBalanceAt(address,uint64)": {
								"params": {
									"timestamp": "Timestamp at which we want to retrieve the TWAB balance.",
									"user": "Address of the user whose TWAB is being fetched."
								},
								"returns": {
									"_0": "The TWAB balance at the given timestamp."
								}
							},
							"getBalancesAt(address,uint64[])": {
								"params": {
									"timestamps": "Timestamps range at which we want to retrieve the TWAB balances.",
									"user": "Address of the user whose TWABs are being fetched."
								},
								"returns": {
									"_0": "`user` TWAB balances."
								}
							},
							"getTotalSuppliesAt(uint64[])": {
								"params": {
									"timestamps": "Timestamps range at which we want to retrieve the total supply TWAB balance."
								},
								"returns": {
									"_0": "Total supply TWAB balances."
								}
							},
							"getTotalSupplyAt(uint64)": {
								"params": {
									"timestamp": "Timestamp at which we want to retrieve the total supply TWAB balance."
								},
								"returns": {
									"_0": "The total supply TWAB balance at the given timestamp."
								}
							},
							"getTwab(address,uint16)": {
								"params": {
									"index": "The index of the TWAB to fetch.",
									"user": "The user for whom to fetch the TWAB."
								},
								"returns": {
									"_0": "The TWAB, which includes the twab amount and the timestamp."
								}
							},
							"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": {
						"assembly": "",
						"bytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"linkReferences": {},
							"object": "",
							"opcodes": "",
							"sourceMap": ""
						},
						"deployedBytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"immutableReferences": {},
							"linkReferences": {},
							"object": "",
							"opcodes": "",
							"sourceMap": ""
						},
						"gasEstimates": null,
						"legacyAssembly": null,
						"methodIdentifiers": {
							"allowance(address,address)": "dd62ed3e",
							"approve(address,uint256)": "095ea7b3",
							"balanceOf(address)": "70a08231",
							"controller()": "f77c4791",
							"controllerBurn(address,uint256)": "90596dd1",
							"controllerBurnFrom(address,address,uint256)": "631b5dfb",
							"controllerDelegateFor(address,address)": "33e39b61",
							"controllerMint(address,uint256)": "5d7b0758",
							"delegate(address)": "5c19a95c",
							"delegateOf(address)": "8d22ea2a",
							"delegateWithSignature(address,address,uint256,uint8,bytes32,bytes32)": "919974dc",
							"getAccountDetails(address)": "2aceb534",
							"getAverageBalanceBetween(address,uint64,uint64)": "98b16f36",
							"getAverageBalancesBetween(address,uint64[],uint64[])": "68c7fd57",
							"getAverageTotalSuppliesBetween(uint64[],uint64[])": "8e6d536a",
							"getBalanceAt(address,uint64)": "9ecb0370",
							"getBalancesAt(address,uint64[])": "613ed6bd",
							"getTotalSuppliesAt(uint64[])": "85beb5f1",
							"getTotalSupplyAt(uint64)": "2d0dd686",
							"getTwab(address,uint16)": "36bb2a38",
							"totalSupply()": "18160ddd",
							"transfer(address,uint256)": "a9059cbb",
							"transferFrom(address,address,uint256)": "23b872dd"
						}
					},
					"metadata": "{\"compiler\":{\"version\":\"0.8.6+commit.11564f7e\"},\"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\":\"delegator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"}],\"name\":\"Delegated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint224\",\"name\":\"amount\",\"type\":\"uint224\"},{\"internalType\":\"uint32\",\"name\":\"timestamp\",\"type\":\"uint32\"}],\"indexed\":false,\"internalType\":\"struct ObservationLib.Observation\",\"name\":\"newTotalSupplyTwab\",\"type\":\"tuple\"}],\"name\":\"NewTotalSupplyTwab\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint224\",\"name\":\"amount\",\"type\":\"uint224\"},{\"internalType\":\"uint32\",\"name\":\"timestamp\",\"type\":\"uint32\"}],\"indexed\":false,\"internalType\":\"struct ObservationLib.Observation\",\"name\":\"newTwab\",\"type\":\"tuple\"}],\"name\":\"NewUserTwab\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"TicketInitialized\",\"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\":\"controller\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"controllerBurn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"controllerBurnFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"}],\"name\":\"controllerDelegateFor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"controllerMint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"delegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"delegateOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"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\":\"delegateWithSignature\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getAccountDetails\",\"outputs\":[{\"components\":[{\"internalType\":\"uint208\",\"name\":\"balance\",\"type\":\"uint208\"},{\"internalType\":\"uint24\",\"name\":\"nextTwabIndex\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"cardinality\",\"type\":\"uint24\"}],\"internalType\":\"struct TwabLib.AccountDetails\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"getAverageBalanceBetween\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint64[]\",\"name\":\"startTimes\",\"type\":\"uint64[]\"},{\"internalType\":\"uint64[]\",\"name\":\"endTimes\",\"type\":\"uint64[]\"}],\"name\":\"getAverageBalancesBetween\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64[]\",\"name\":\"startTimes\",\"type\":\"uint64[]\"},{\"internalType\":\"uint64[]\",\"name\":\"endTimes\",\"type\":\"uint64[]\"}],\"name\":\"getAverageTotalSuppliesBetween\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"}],\"name\":\"getBalanceAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint64[]\",\"name\":\"timestamps\",\"type\":\"uint64[]\"}],\"name\":\"getBalancesAt\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64[]\",\"name\":\"timestamps\",\"type\":\"uint64[]\"}],\"name\":\"getTotalSuppliesAt\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"}],\"name\":\"getTotalSupplyAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"}],\"name\":\"getTwab\",\"outputs\":[{\"components\":[{\"internalType\":\"uint224\",\"name\":\"amount\",\"type\":\"uint224\"},{\"internalType\":\"uint32\",\"name\":\"timestamp\",\"type\":\"uint32\"}],\"internalType\":\"struct ObservationLib.Observation\",\"name\":\"\",\"type\":\"tuple\"}],\"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\":{\"events\":{\"Delegated(address,address)\":{\"params\":{\"delegate\":\"Address of the delegate.\",\"delegator\":\"Address of the delegator.\"}},\"NewTotalSupplyTwab((uint224,uint32))\":{\"params\":{\"newTotalSupplyTwab\":\"Updated TWAB of tickets total supply after a successful total supply TWAB recording.\"}},\"NewUserTwab(address,(uint224,uint32))\":{\"params\":{\"delegate\":\"The recipient of the ticket power (may be the same as the user).\",\"newTwab\":\"Updated TWAB of a ticket holder after a successful TWAB recording.\"}},\"TicketInitialized(string,string,uint8,address)\":{\"params\":{\"controller\":\"Token controller address.\",\"decimals\":\"Ticket decimals.\",\"name\":\"Ticket name (eg: PoolTogether Dai Ticket (Compound)).\",\"symbol\":\"Ticket symbol (eg: PcDAI).\"}}},\"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`.\"},\"controllerBurn(address,uint256)\":{\"details\":\"May be overridden to provide more granular control over burning\",\"params\":{\"amount\":\"Amount of tokens to burn\",\"user\":\"Address of the holder account to burn tokens from\"}},\"controllerBurnFrom(address,address,uint256)\":{\"details\":\"May be overridden to provide more granular control over operator-burning\",\"params\":{\"amount\":\"Amount of tokens to burn\",\"operator\":\"Address of the operator performing the burn action via the controller contract\",\"user\":\"Address of the holder account to burn tokens from\"}},\"controllerDelegateFor(address,address)\":{\"params\":{\"delegate\":\"The new delegate\",\"user\":\"The user for whom to delegate\"}},\"controllerMint(address,uint256)\":{\"details\":\"May be overridden to provide more granular control over minting\",\"params\":{\"amount\":\"Amount of tokens to mint\",\"user\":\"Address of the receiver of the minted tokens\"}},\"delegate(address)\":{\"details\":\"Transfers (including mints) trigger the storage of a TWAB in delegate(s) account, instead of the targetted sender and/or recipient address(s).To reset the delegate, pass the zero address (0x000.000) as `to` parameter.Current delegate address should be different from the new delegate address `to`.\",\"params\":{\"to\":\"Recipient of delegated TWAB.\"}},\"delegateOf(address)\":{\"details\":\"Address of the delegate will be the zero address if `user` has not delegated their tickets.\",\"params\":{\"user\":\"Address of the delegator.\"},\"returns\":{\"_0\":\"Address of the delegate.\"}},\"delegateWithSignature(address,address,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"deadline\":\"The timestamp by which this must be submitted\",\"delegate\":\"The new delegate\",\"r\":\"The r portion of the ECDSA sig\",\"s\":\"The s portion of the ECDSA sig\",\"user\":\"The user who is delegating\",\"v\":\"The v portion of the ECDSA sig\"}},\"getAccountDetails(address)\":{\"params\":{\"user\":\"The user for whom to fetch the TWAB context.\"},\"returns\":{\"_0\":\"The TWAB context, which includes { balance, nextTwabIndex, cardinality }\"}},\"getAverageBalanceBetween(address,uint64,uint64)\":{\"params\":{\"endTime\":\"The end time of the time frame.\",\"startTime\":\"The start time of the time frame.\",\"user\":\"The user whose balance is checked.\"},\"returns\":{\"_0\":\"The average balance that the user held during the time frame.\"}},\"getAverageBalancesBetween(address,uint64[],uint64[])\":{\"params\":{\"endTimes\":\"The end time of the time frame.\",\"startTimes\":\"The start time of the time frame.\",\"user\":\"The user whose balance is checked.\"},\"returns\":{\"_0\":\"The average balance that the user held during the time frame.\"}},\"getAverageTotalSuppliesBetween(uint64[],uint64[])\":{\"params\":{\"endTimes\":\"Array of end times.\",\"startTimes\":\"Array of start times.\"},\"returns\":{\"_0\":\"The average total supplies held during the time frame.\"}},\"getBalanceAt(address,uint64)\":{\"params\":{\"timestamp\":\"Timestamp at which we want to retrieve the TWAB balance.\",\"user\":\"Address of the user whose TWAB is being fetched.\"},\"returns\":{\"_0\":\"The TWAB balance at the given timestamp.\"}},\"getBalancesAt(address,uint64[])\":{\"params\":{\"timestamps\":\"Timestamps range at which we want to retrieve the TWAB balances.\",\"user\":\"Address of the user whose TWABs are being fetched.\"},\"returns\":{\"_0\":\"`user` TWAB balances.\"}},\"getTotalSuppliesAt(uint64[])\":{\"params\":{\"timestamps\":\"Timestamps range at which we want to retrieve the total supply TWAB balance.\"},\"returns\":{\"_0\":\"Total supply TWAB balances.\"}},\"getTotalSupplyAt(uint64)\":{\"params\":{\"timestamp\":\"Timestamp at which we want to retrieve the total supply TWAB balance.\"},\"returns\":{\"_0\":\"The total supply TWAB balance at the given timestamp.\"}},\"getTwab(address,uint16)\":{\"params\":{\"index\":\"The index of the TWAB to fetch.\",\"user\":\"The user for whom to fetch the TWAB.\"},\"returns\":{\"_0\":\"The TWAB, which includes the twab amount and the timestamp.\"}},\"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\":{\"events\":{\"Delegated(address,address)\":{\"notice\":\"Emitted when TWAB balance has been delegated to another user.\"},\"NewTotalSupplyTwab((uint224,uint32))\":{\"notice\":\"Emitted when a new total supply TWAB has been recorded.\"},\"NewUserTwab(address,(uint224,uint32))\":{\"notice\":\"Emitted when a new TWAB has been recorded.\"},\"TicketInitialized(string,string,uint8,address)\":{\"notice\":\"Emitted when ticket is initialized.\"}},\"kind\":\"user\",\"methods\":{\"controller()\":{\"notice\":\"Interface to the contract responsible for controlling mint/burn\"},\"controllerBurn(address,uint256)\":{\"notice\":\"Allows the controller to burn tokens from a user account\"},\"controllerBurnFrom(address,address,uint256)\":{\"notice\":\"Allows an operator via the controller to burn tokens on behalf of a user account\"},\"controllerDelegateFor(address,address)\":{\"notice\":\"Allows the controller to delegate on a users behalf.\"},\"controllerMint(address,uint256)\":{\"notice\":\"Allows the controller to mint tokens for a user account\"},\"delegate(address)\":{\"notice\":\"Delegate time-weighted average balances to an alternative address.\"},\"delegateOf(address)\":{\"notice\":\"Retrieves the address of the delegate to whom `user` has delegated their tickets.\"},\"delegateWithSignature(address,address,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Allows a user to delegate via signature\"},\"getAccountDetails(address)\":{\"notice\":\"Gets a users twab context.  This is a struct with their balance, next twab index, and cardinality.\"},\"getAverageBalanceBetween(address,uint64,uint64)\":{\"notice\":\"Retrieves the average balance held by a user for a given time frame.\"},\"getAverageBalancesBetween(address,uint64[],uint64[])\":{\"notice\":\"Retrieves the average balances held by a user for a given time frame.\"},\"getAverageTotalSuppliesBetween(uint64[],uint64[])\":{\"notice\":\"Retrieves the average total supply balance for a set of given time frames.\"},\"getBalanceAt(address,uint64)\":{\"notice\":\"Retrieves `user` TWAB balance.\"},\"getBalancesAt(address,uint64[])\":{\"notice\":\"Retrieves `user` TWAB balances.\"},\"getTotalSuppliesAt(uint64[])\":{\"notice\":\"Retrieves the total supply TWAB balance between the given timestamps range.\"},\"getTotalSupplyAt(uint64)\":{\"notice\":\"Retrieves the total supply TWAB balance at the given timestamp.\"},\"getTwab(address,uint16)\":{\"notice\":\"Gets the TWAB at a specific index for a user.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/ITicket.sol\":\"ITicket\"},\"evmVersion\":\"berlin\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x02686c31ccb9ee77a299fa5f47327af5271f251a707a0e24f321957166ff0434\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cb562d8ae1da31249ca0d8553df9f89ef4c3c110a018c4449dde68ae30e51ec1\",\"dweb:/ipfs/QmUwxjtTUYB89ymeV46TZPmTsGnYrKNcgTHk7MQA1MG3hj\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IControlledToken.sol\":{\"keccak256\":\"0x90dceeec1eea6e49021e8db88b084f3f0c503c60b6f7e0bbecd2529ffde87ef3\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://d6fda119bce121e99c834d36e37f760ce16528adc9405a263d66ea83ee083cda\",\"dweb:/ipfs/QmbPo9QWUB6KQ8jUaka8GC39o9MrB6YoGuc47QQRyyYYBz\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/ITicket.sol\":{\"keccak256\":\"0xb9f6423a8a9c7394941cb84723b82cc66c5f815d689dc0562e612ae4d9f1cc27\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://baa0a5d2006fa451876f0507f71b0299993d17a4867e2f4cf5079bbc9ca33c0d\",\"dweb:/ipfs/QmTB8bWNfPK45E9zmKXyLCopDiMd9UWNM1WNVJLPfEMqxC\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/ExtendedSafeCastLib.sol\":{\"keccak256\":\"0x9dae48760b4f78e5418ea8f44abe51fd40570b3159fac80ff17935b6451dcacd\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://c42ee90f5e36b58e049eb582d20250ab83faebec81f4b4664fe5e2a093f04aba\",\"dweb:/ipfs/QmNmUzXXiR7JYsMRU9qyZNMp6SVmj7UUz8kS2qr5nPTtTM\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/ObservationLib.sol\":{\"keccak256\":\"0x225592b42013fc0af60822e75bc047d53b42a5fcf15f2173cdc3b50bea334b0a\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://3b2023bfcc8fb346a52c519b3667c8bb1b935d16993d68b651ec2b84f61d8f3c\",\"dweb:/ipfs/QmYP7kPZefm4SN4kaJwMNrJq3KyYwfvndXY6XQdxeih646\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/OverflowSafeComparatorLib.sol\":{\"keccak256\":\"0x20630cf89e7b92462946defe979fd0e69fa119841d55886121948ad810778c74\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://2dda66ae7137027e803570a61c0aff2aa5bcf9c430ff068ba10529b1c5dd3d6a\",\"dweb:/ipfs/QmZbWq1fiisXBnj774CTKwZQF3vdgj16EUqGGQPegxLWZq\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/RingBufferLib.sol\":{\"keccak256\":\"0x052e3bf6bfb30f32950e322c853589a8d153cf34f4b1ee292b17eb46f2ae656c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://587d1e6fd1df4bfe26b78a23503e67f171c68bb44afe6582bbcb5726b9a60808\",\"dweb:/ipfs/Qmb2F87Lh23o922Qn8Mt2uZBz8qKoEfwMtwQYCT5L5z5wd\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/TwabLib.sol\":{\"keccak256\":\"0x446d8221329601d40464981a50a0e31f3fd48da0ebf0fea646c5a089ccfbdff4\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://d6e67f1f69fa796c388eb4733090445cf7bc859e463f1d3be36973e8cd258528\",\"dweb:/ipfs/QmYA3noFrMP1QwoQEAN3yyXYJvJfTb47uS5hdR6LBxrwjY\"]}},\"version\":1}",
					"storageLayout": {
						"storage": [],
						"types": null
					},
					"userdoc": {
						"events": {
							"Delegated(address,address)": {
								"notice": "Emitted when TWAB balance has been delegated to another user."
							},
							"NewTotalSupplyTwab((uint224,uint32))": {
								"notice": "Emitted when a new total supply TWAB has been recorded."
							},
							"NewUserTwab(address,(uint224,uint32))": {
								"notice": "Emitted when a new TWAB has been recorded."
							},
							"TicketInitialized(string,string,uint8,address)": {
								"notice": "Emitted when ticket is initialized."
							}
						},
						"kind": "user",
						"methods": {
							"controller()": {
								"notice": "Interface to the contract responsible for controlling mint/burn"
							},
							"controllerBurn(address,uint256)": {
								"notice": "Allows the controller to burn tokens from a user account"
							},
							"controllerBurnFrom(address,address,uint256)": {
								"notice": "Allows an operator via the controller to burn tokens on behalf of a user account"
							},
							"controllerDelegateFor(address,address)": {
								"notice": "Allows the controller to delegate on a users behalf."
							},
							"controllerMint(address,uint256)": {
								"notice": "Allows the controller to mint tokens for a user account"
							},
							"delegate(address)": {
								"notice": "Delegate time-weighted average balances to an alternative address."
							},
							"delegateOf(address)": {
								"notice": "Retrieves the address of the delegate to whom `user` has delegated their tickets."
							},
							"delegateWithSignature(address,address,uint256,uint8,bytes32,bytes32)": {
								"notice": "Allows a user to delegate via signature"
							},
							"getAccountDetails(address)": {
								"notice": "Gets a users twab context.  This is a struct with their balance, next twab index, and cardinality."
							},
							"getAverageBalanceBetween(address,uint64,uint64)": {
								"notice": "Retrieves the average balance held by a user for a given time frame."
							},
							"getAverageBalancesBetween(address,uint64[],uint64[])": {
								"notice": "Retrieves the average balances held by a user for a given time frame."
							},
							"getAverageTotalSuppliesBetween(uint64[],uint64[])": {
								"notice": "Retrieves the average total supply balance for a set of given time frames."
							},
							"getBalanceAt(address,uint64)": {
								"notice": "Retrieves `user` TWAB balance."
							},
							"getBalancesAt(address,uint64[])": {
								"notice": "Retrieves `user` TWAB balances."
							},
							"getTotalSuppliesAt(uint64[])": {
								"notice": "Retrieves the total supply TWAB balance between the given timestamps range."
							},
							"getTotalSupplyAt(uint64)": {
								"notice": "Retrieves the total supply TWAB balance at the given timestamp."
							},
							"getTwab(address,uint16)": {
								"notice": "Gets the TWAB at a specific index for a user."
							}
						},
						"version": 1
					}
				}
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/ExtendedSafeCastLib.sol": {
				"ExtendedSafeCastLib": {
					"abi": [],
					"devdoc": {
						"details": "Wrappers over Solidity's uintXX/intXX casting operators with added overflow checks. Downcasting from uint256/int256 in Solidity does not revert on overflow. This can easily result in undesired exploitation or bugs, since developers usually assume that overflows raise errors. `SafeCast` restores this intuition by reverting the transaction when such an operation overflows. Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always. Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing all math on `uint256` and `int256` and then downcasting.",
						"kind": "dev",
						"methods": {},
						"version": 1
					},
					"evm": {
						"assembly": "    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/ExtendedSafeCastLib.sol\":771:2744  library ExtendedSafeCastLib {... */\n  dataSize(sub_0)\n  dataOffset(sub_0)\n  0x0b\n  dup3\n  dup3\n  dup3\n  codecopy\n  dup1\n  mload\n  0x00\n  byte\n  0x73\n  eq\n  tag_1\n  jumpi\n  mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n  mstore(0x04, 0x00)\n  revert(0x00, 0x24)\ntag_1:\n  mstore(0x00, address)\n  0x73\n  dup2\n  mstore8\n  dup3\n  dup2\n  return\nstop\n\nsub_0: assembly {\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/ExtendedSafeCastLib.sol\":771:2744  library ExtendedSafeCastLib {... */\n      eq(address, deployTimeAddress())\n      mstore(0x40, 0x80)\n      0x00\n      dup1\n      revert\n\n    auxdata: 0xa264697066735822122053233120aed06785b6bc4aab913b7284785b88b29021e1b399c9b31c2adf053164736f6c63430008060033\n}\n",
						"bytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"linkReferences": {},
							"object": "60566050600b82828239805160001a6073146043577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122053233120aed06785b6bc4aab913b7284785b88b29021e1b399c9b31c2adf053164736f6c63430008060033",
							"opcodes": "PUSH1 0x56 PUSH1 0x50 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x43 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 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 MSTORE8 0x23 BALANCE KECCAK256 0xAE 0xD0 PUSH8 0x85B6BC4AAB913B72 DUP5 PUSH25 0x5B88B29021E1B399C9B31C2ADF053164736F6C634300080600 CALLER ",
							"sourceMap": "771:1973:14:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
						},
						"deployedBytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"immutableReferences": {},
							"linkReferences": {},
							"object": "73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122053233120aed06785b6bc4aab913b7284785b88b29021e1b399c9b31c2adf053164736f6c63430008060033",
							"opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MSTORE8 0x23 BALANCE KECCAK256 0xAE 0xD0 PUSH8 0x85B6BC4AAB913B72 DUP5 PUSH25 0x5B88B29021E1B399C9B31C2ADF053164736F6C634300080600 CALLER ",
							"sourceMap": "771:1973:14:-:0;;;;;;;;"
						},
						"gasEstimates": {
							"creation": {
								"codeDepositCost": "17200",
								"executionCost": "97",
								"totalCost": "17297"
							},
							"internal": {
								"toUint104(uint256)": "infinite",
								"toUint192(uint256)": "infinite",
								"toUint208(uint256)": "infinite",
								"toUint224(uint256)": "infinite"
							}
						},
						"legacyAssembly": {
							".code": [
								{
									"begin": 771,
									"end": 2744,
									"name": "PUSH #[$]",
									"source": 14,
									"value": "0000000000000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 771,
									"end": 2744,
									"name": "PUSH [$]",
									"source": 14,
									"value": "0000000000000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 771,
									"end": 2744,
									"name": "PUSH",
									"source": 14,
									"value": "B"
								},
								{
									"begin": 771,
									"end": 2744,
									"name": "DUP3",
									"source": 14
								},
								{
									"begin": 771,
									"end": 2744,
									"name": "DUP3",
									"source": 14
								},
								{
									"begin": 771,
									"end": 2744,
									"name": "DUP3",
									"source": 14
								},
								{
									"begin": 771,
									"end": 2744,
									"name": "CODECOPY",
									"source": 14
								},
								{
									"begin": 771,
									"end": 2744,
									"name": "DUP1",
									"source": 14
								},
								{
									"begin": 771,
									"end": 2744,
									"name": "MLOAD",
									"source": 14
								},
								{
									"begin": 771,
									"end": 2744,
									"name": "PUSH",
									"source": 14,
									"value": "0"
								},
								{
									"begin": 771,
									"end": 2744,
									"name": "BYTE",
									"source": 14
								},
								{
									"begin": 771,
									"end": 2744,
									"name": "PUSH",
									"source": 14,
									"value": "73"
								},
								{
									"begin": 771,
									"end": 2744,
									"name": "EQ",
									"source": 14
								},
								{
									"begin": 771,
									"end": 2744,
									"name": "PUSH [tag]",
									"source": 14,
									"value": "1"
								},
								{
									"begin": 771,
									"end": 2744,
									"name": "JUMPI",
									"source": 14
								},
								{
									"begin": 771,
									"end": 2744,
									"name": "PUSH",
									"source": 14,
									"value": "4E487B7100000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 771,
									"end": 2744,
									"name": "PUSH",
									"source": 14,
									"value": "0"
								},
								{
									"begin": 771,
									"end": 2744,
									"name": "MSTORE",
									"source": 14
								},
								{
									"begin": 771,
									"end": 2744,
									"name": "PUSH",
									"source": 14,
									"value": "0"
								},
								{
									"begin": 771,
									"end": 2744,
									"name": "PUSH",
									"source": 14,
									"value": "4"
								},
								{
									"begin": 771,
									"end": 2744,
									"name": "MSTORE",
									"source": 14
								},
								{
									"begin": 771,
									"end": 2744,
									"name": "PUSH",
									"source": 14,
									"value": "24"
								},
								{
									"begin": 771,
									"end": 2744,
									"name": "PUSH",
									"source": 14,
									"value": "0"
								},
								{
									"begin": 771,
									"end": 2744,
									"name": "REVERT",
									"source": 14
								},
								{
									"begin": 771,
									"end": 2744,
									"name": "tag",
									"source": 14,
									"value": "1"
								},
								{
									"begin": 771,
									"end": 2744,
									"name": "JUMPDEST",
									"source": 14
								},
								{
									"begin": 771,
									"end": 2744,
									"name": "ADDRESS",
									"source": 14
								},
								{
									"begin": 771,
									"end": 2744,
									"name": "PUSH",
									"source": 14,
									"value": "0"
								},
								{
									"begin": 771,
									"end": 2744,
									"name": "MSTORE",
									"source": 14
								},
								{
									"begin": 771,
									"end": 2744,
									"name": "PUSH",
									"source": 14,
									"value": "73"
								},
								{
									"begin": 771,
									"end": 2744,
									"name": "DUP2",
									"source": 14
								},
								{
									"begin": 771,
									"end": 2744,
									"name": "MSTORE8",
									"source": 14
								},
								{
									"begin": 771,
									"end": 2744,
									"name": "DUP3",
									"source": 14
								},
								{
									"begin": 771,
									"end": 2744,
									"name": "DUP2",
									"source": 14
								},
								{
									"begin": 771,
									"end": 2744,
									"name": "RETURN",
									"source": 14
								}
							],
							".data": {
								"0": {
									".auxdata": "a264697066735822122053233120aed06785b6bc4aab913b7284785b88b29021e1b399c9b31c2adf053164736f6c63430008060033",
									".code": [
										{
											"begin": 771,
											"end": 2744,
											"name": "PUSHDEPLOYADDRESS",
											"source": 14
										},
										{
											"begin": 771,
											"end": 2744,
											"name": "ADDRESS",
											"source": 14
										},
										{
											"begin": 771,
											"end": 2744,
											"name": "EQ",
											"source": 14
										},
										{
											"begin": 771,
											"end": 2744,
											"name": "PUSH",
											"source": 14,
											"value": "80"
										},
										{
											"begin": 771,
											"end": 2744,
											"name": "PUSH",
											"source": 14,
											"value": "40"
										},
										{
											"begin": 771,
											"end": 2744,
											"name": "MSTORE",
											"source": 14
										},
										{
											"begin": 771,
											"end": 2744,
											"name": "PUSH",
											"source": 14,
											"value": "0"
										},
										{
											"begin": 771,
											"end": 2744,
											"name": "DUP1",
											"source": 14
										},
										{
											"begin": 771,
											"end": 2744,
											"name": "REVERT",
											"source": 14
										}
									]
								}
							}
						},
						"methodIdentifiers": {}
					},
					"metadata": "{\"compiler\":{\"version\":\"0.8.6+commit.11564f7e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Wrappers over Solidity's uintXX/intXX casting operators with added overflow checks. Downcasting from uint256/int256 in Solidity does not revert on overflow. This can easily result in undesired exploitation or bugs, since developers usually assume that overflows raise errors. `SafeCast` restores this intuition by reverting the transaction when such an operation overflows. Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always. Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing all math on `uint256` and `int256` and then downcasting.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/ExtendedSafeCastLib.sol\":\"ExtendedSafeCastLib\"},\"evmVersion\":\"berlin\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/ExtendedSafeCastLib.sol\":{\"keccak256\":\"0x9dae48760b4f78e5418ea8f44abe51fd40570b3159fac80ff17935b6451dcacd\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://c42ee90f5e36b58e049eb582d20250ab83faebec81f4b4664fe5e2a093f04aba\",\"dweb:/ipfs/QmNmUzXXiR7JYsMRU9qyZNMp6SVmj7UUz8kS2qr5nPTtTM\"]}},\"version\":1}",
					"storageLayout": {
						"storage": [],
						"types": null
					},
					"userdoc": {
						"kind": "user",
						"methods": {},
						"version": 1
					}
				}
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/ObservationLib.sol": {
				"ObservationLib": {
					"abi": [
						{
							"inputs": [],
							"name": "MAX_CARDINALITY",
							"outputs": [
								{
									"internalType": "uint24",
									"name": "",
									"type": "uint24"
								}
							],
							"stateMutability": "view",
							"type": "function"
						}
					],
					"devdoc": {
						"author": "PoolTogether Inc.",
						"details": "Largely pulled from Uniswap V3 Oracle.sol: https://github.com/Uniswap/v3-core/blob/c05a0e2c8c08c460fb4d05cfdda30b3ad8deeaac/contracts/libraries/Oracle.sol",
						"kind": "dev",
						"methods": {},
						"title": "Observation Library",
						"version": 1
					},
					"evm": {
						"assembly": "    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/ObservationLib.sol\":529:4390  library ObservationLib {... */\n  dataSize(sub_0)\n  dataOffset(sub_0)\n  0x0b\n  dup3\n  dup3\n  dup3\n  codecopy\n  dup1\n  mload\n  0x00\n  byte\n  0x73\n  eq\n  tag_1\n  jumpi\n  mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n  mstore(0x04, 0x00)\n  revert(0x00, 0x24)\ntag_1:\n  mstore(0x00, address)\n  0x73\n  dup2\n  mstore8\n  dup3\n  dup2\n  return\nstop\n\nsub_0: assembly {\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/ObservationLib.sol\":529:4390  library ObservationLib {... */\n      eq(address, deployTimeAddress())\n      mstore(0x40, 0x80)\n      jumpi(tag_1, lt(calldatasize, 0x04))\n      shr(0xe0, calldataload(0x00))\n      dup1\n      0x8200d873\n      eq\n      tag_2\n      jumpi\n    tag_1:\n      0x00\n      dup1\n      revert\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/ObservationLib.sol\":690:739  uint24 public constant MAX_CARDINALITY = 16777215 */\n    tag_2:\n      tag_3\n      tag_4\n      jump\t// in\n    tag_3:\n      mload(0x40)\n      tag_5\n      swap2\n      swap1\n      tag_6\n      jump\t// in\n    tag_5:\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      return\n    tag_4:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/ObservationLib.sol\":731:739  16777215 */\n      0xffffff\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/ObservationLib.sol\":690:739  uint24 public constant MAX_CARDINALITY = 16777215 */\n      dup2\n      jump\t// out\n        /* \"#utility.yul\":7:130   */\n    tag_8:\n        /* \"#utility.yul\":100:123   */\n      tag_10\n        /* \"#utility.yul\":117:122   */\n      dup2\n        /* \"#utility.yul\":100:123   */\n      tag_11\n      jump\t// in\n    tag_10:\n        /* \"#utility.yul\":95:98   */\n      dup3\n        /* \"#utility.yul\":88:124   */\n      mstore\n        /* \"#utility.yul\":78:130   */\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":136:370   */\n    tag_6:\n        /* \"#utility.yul\":235:239   */\n      0x00\n        /* \"#utility.yul\":273:275   */\n      0x20\n        /* \"#utility.yul\":262:271   */\n      dup3\n        /* \"#utility.yul\":258:276   */\n      add\n        /* \"#utility.yul\":250:276   */\n      swap1\n      pop\n        /* \"#utility.yul\":286:363   */\n      tag_13\n        /* \"#utility.yul\":360:361   */\n      0x00\n        /* \"#utility.yul\":349:358   */\n      dup4\n        /* \"#utility.yul\":345:362   */\n      add\n        /* \"#utility.yul\":336:342   */\n      dup5\n        /* \"#utility.yul\":286:363   */\n      tag_8\n      jump\t// in\n    tag_13:\n        /* \"#utility.yul\":240:370   */\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":376:467   */\n    tag_11:\n        /* \"#utility.yul\":412:419   */\n      0x00\n        /* \"#utility.yul\":452:460   */\n      0xffffff\n        /* \"#utility.yul\":445:450   */\n      dup3\n        /* \"#utility.yul\":441:461   */\n      and\n        /* \"#utility.yul\":430:461   */\n      swap1\n      pop\n        /* \"#utility.yul\":420:467   */\n      swap2\n      swap1\n      pop\n      jump\t// out\n\n    auxdata: 0xa2646970667358221220cbdad2c9bf39ca339e3700152761983d36dd962c5e0a72b757cd19286352c11964736f6c63430008060033\n}\n",
						"bytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"linkReferences": {},
							"object": "60c4610052600b82828239805160001a607314610045577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361060335760003560e01c80638200d873146038575b600080fd5b603e6052565b604051604991906066565b60405180910390f35b62ffffff81565b606081607f565b82525050565b6000602082019050607960008301846059565b92915050565b600062ffffff8216905091905056fea2646970667358221220cbdad2c9bf39ca339e3700152761983d36dd962c5e0a72b757cd19286352c11964736f6c63430008060033",
							"opcodes": "PUSH1 0xC4 PUSH2 0x52 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH2 0x45 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 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 0x4 CALLDATASIZE LT PUSH1 0x33 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8200D873 EQ PUSH1 0x38 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3E PUSH1 0x52 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x49 SWAP2 SWAP1 PUSH1 0x66 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH3 0xFFFFFF DUP2 JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x7F JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x79 PUSH1 0x0 DUP4 ADD DUP5 PUSH1 0x59 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0xFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCB 0xDA 0xD2 0xC9 0xBF CODECOPY 0xCA CALLER SWAP15 CALLDATACOPY STOP ISZERO 0x27 PUSH2 0x983D CALLDATASIZE 0xDD SWAP7 0x2C 0x5E EXP PUSH19 0xB757CD19286352C11964736F6C634300080600 CALLER ",
							"sourceMap": "529:3861:15:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
						},
						"deployedBytecode": {
							"functionDebugData": {
								"@MAX_CARDINALITY_4306": {
									"entryPoint": 82,
									"id": 4306,
									"parameterSlots": 0,
									"returnSlots": 0
								},
								"abi_encode_t_uint24_to_t_uint24_fromStack_library": {
									"entryPoint": 89,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 0
								},
								"abi_encode_tuple_t_uint24__to_t_uint24__fromStack_library_reversed": {
									"entryPoint": 102,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"cleanup_t_uint24": {
									"entryPoint": 127,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								}
							},
							"generatedSources": [
								{
									"ast": {
										"nodeType": "YulBlock",
										"src": "0:470:19",
										"statements": [
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "78:52:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "95:3:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "value",
																				"nodeType": "YulIdentifier",
																				"src": "117:5:19"
																			}
																		],
																		"functionName": {
																			"name": "cleanup_t_uint24",
																			"nodeType": "YulIdentifier",
																			"src": "100:16:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "100:23:19"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "88:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "88:36:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "88:36:19"
														}
													]
												},
												"name": "abi_encode_t_uint24_to_t_uint24_fromStack_library",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "66:5:19",
														"type": ""
													},
													{
														"name": "pos",
														"nodeType": "YulTypedName",
														"src": "73:3:19",
														"type": ""
													}
												],
												"src": "7:123:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "240:130:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "250:26:19",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "262:9:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "273:2:19",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "258:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "258:18:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "250:4:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "value0",
																		"nodeType": "YulIdentifier",
																		"src": "336:6:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "349:9:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "360:1:19",
																				"type": "",
																				"value": "0"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "345:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "345:17:19"
																	}
																],
																"functionName": {
																	"name": "abi_encode_t_uint24_to_t_uint24_fromStack_library",
																	"nodeType": "YulIdentifier",
																	"src": "286:49:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "286:77:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "286:77:19"
														}
													]
												},
												"name": "abi_encode_tuple_t_uint24__to_t_uint24__fromStack_library_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "212:9:19",
														"type": ""
													},
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "224:6:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "235:4:19",
														"type": ""
													}
												],
												"src": "136:234:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "420:47:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "430:31:19",
															"value": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "445:5:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "452:8:19",
																		"type": "",
																		"value": "0xffffff"
																	}
																],
																"functionName": {
																	"name": "and",
																	"nodeType": "YulIdentifier",
																	"src": "441:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "441:20:19"
															},
															"variableNames": [
																{
																	"name": "cleaned",
																	"nodeType": "YulIdentifier",
																	"src": "430:7:19"
																}
															]
														}
													]
												},
												"name": "cleanup_t_uint24",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "402:5:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "cleaned",
														"nodeType": "YulTypedName",
														"src": "412:7:19",
														"type": ""
													}
												],
												"src": "376:91:19"
											}
										]
									},
									"contents": "{\n\n    function abi_encode_t_uint24_to_t_uint24_fromStack_library(value, pos) {\n        mstore(pos, cleanup_t_uint24(value))\n    }\n\n    function abi_encode_tuple_t_uint24__to_t_uint24__fromStack_library_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_uint24_to_t_uint24_fromStack_library(value0,  add(headStart, 0))\n\n    }\n\n    function cleanup_t_uint24(value) -> cleaned {\n        cleaned := and(value, 0xffffff)\n    }\n\n}\n",
									"id": 19,
									"language": "Yul",
									"name": "#utility.yul"
								}
							],
							"immutableReferences": {},
							"linkReferences": {},
							"object": "730000000000000000000000000000000000000000301460806040526004361060335760003560e01c80638200d873146038575b600080fd5b603e6052565b604051604991906066565b60405180910390f35b62ffffff81565b606081607f565b82525050565b6000602082019050607960008301846059565b92915050565b600062ffffff8216905091905056fea2646970667358221220cbdad2c9bf39ca339e3700152761983d36dd962c5e0a72b757cd19286352c11964736f6c63430008060033",
							"opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH1 0x33 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8200D873 EQ PUSH1 0x38 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3E PUSH1 0x52 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x49 SWAP2 SWAP1 PUSH1 0x66 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH3 0xFFFFFF DUP2 JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x7F JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x79 PUSH1 0x0 DUP4 ADD DUP5 PUSH1 0x59 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0xFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCB 0xDA 0xD2 0xC9 0xBF CODECOPY 0xCA CALLER SWAP15 CALLDATACOPY STOP ISZERO 0x27 PUSH2 0x983D CALLDATASIZE 0xDD SWAP7 0x2C 0x5E EXP PUSH19 0xB757CD19286352C11964736F6C634300080600 CALLER ",
							"sourceMap": "529:3861:15:-:0;;;;;;;;;;;;;;;;;;;;;;;;690:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;731:8;690:49;:::o;7:123:19:-;100:23;117:5;100:23;:::i;:::-;95:3;88:36;78:52;;:::o;136:234::-;235:4;273:2;262:9;258:18;250:26;;286:77;360:1;349:9;345:17;336:6;286:77;:::i;:::-;240:130;;;;:::o;376:91::-;412:7;452:8;445:5;441:20;430:31;;420:47;;;:::o"
						},
						"gasEstimates": {
							"creation": {
								"codeDepositCost": "39200",
								"executionCost": "118",
								"totalCost": "39318"
							},
							"external": {
								"MAX_CARDINALITY()": "297"
							},
							"internal": {
								"binarySearch(struct ObservationLib.Observation storage ref[16777215] storage pointer,uint24,uint24,uint32,uint24,uint32)": "infinite"
							}
						},
						"legacyAssembly": {
							".code": [
								{
									"begin": 529,
									"end": 4390,
									"name": "PUSH #[$]",
									"source": 15,
									"value": "0000000000000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 529,
									"end": 4390,
									"name": "PUSH [$]",
									"source": 15,
									"value": "0000000000000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 529,
									"end": 4390,
									"name": "PUSH",
									"source": 15,
									"value": "B"
								},
								{
									"begin": 529,
									"end": 4390,
									"name": "DUP3",
									"source": 15
								},
								{
									"begin": 529,
									"end": 4390,
									"name": "DUP3",
									"source": 15
								},
								{
									"begin": 529,
									"end": 4390,
									"name": "DUP3",
									"source": 15
								},
								{
									"begin": 529,
									"end": 4390,
									"name": "CODECOPY",
									"source": 15
								},
								{
									"begin": 529,
									"end": 4390,
									"name": "DUP1",
									"source": 15
								},
								{
									"begin": 529,
									"end": 4390,
									"name": "MLOAD",
									"source": 15
								},
								{
									"begin": 529,
									"end": 4390,
									"name": "PUSH",
									"source": 15,
									"value": "0"
								},
								{
									"begin": 529,
									"end": 4390,
									"name": "BYTE",
									"source": 15
								},
								{
									"begin": 529,
									"end": 4390,
									"name": "PUSH",
									"source": 15,
									"value": "73"
								},
								{
									"begin": 529,
									"end": 4390,
									"name": "EQ",
									"source": 15
								},
								{
									"begin": 529,
									"end": 4390,
									"name": "PUSH [tag]",
									"source": 15,
									"value": "1"
								},
								{
									"begin": 529,
									"end": 4390,
									"name": "JUMPI",
									"source": 15
								},
								{
									"begin": 529,
									"end": 4390,
									"name": "PUSH",
									"source": 15,
									"value": "4E487B7100000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 529,
									"end": 4390,
									"name": "PUSH",
									"source": 15,
									"value": "0"
								},
								{
									"begin": 529,
									"end": 4390,
									"name": "MSTORE",
									"source": 15
								},
								{
									"begin": 529,
									"end": 4390,
									"name": "PUSH",
									"source": 15,
									"value": "0"
								},
								{
									"begin": 529,
									"end": 4390,
									"name": "PUSH",
									"source": 15,
									"value": "4"
								},
								{
									"begin": 529,
									"end": 4390,
									"name": "MSTORE",
									"source": 15
								},
								{
									"begin": 529,
									"end": 4390,
									"name": "PUSH",
									"source": 15,
									"value": "24"
								},
								{
									"begin": 529,
									"end": 4390,
									"name": "PUSH",
									"source": 15,
									"value": "0"
								},
								{
									"begin": 529,
									"end": 4390,
									"name": "REVERT",
									"source": 15
								},
								{
									"begin": 529,
									"end": 4390,
									"name": "tag",
									"source": 15,
									"value": "1"
								},
								{
									"begin": 529,
									"end": 4390,
									"name": "JUMPDEST",
									"source": 15
								},
								{
									"begin": 529,
									"end": 4390,
									"name": "ADDRESS",
									"source": 15
								},
								{
									"begin": 529,
									"end": 4390,
									"name": "PUSH",
									"source": 15,
									"value": "0"
								},
								{
									"begin": 529,
									"end": 4390,
									"name": "MSTORE",
									"source": 15
								},
								{
									"begin": 529,
									"end": 4390,
									"name": "PUSH",
									"source": 15,
									"value": "73"
								},
								{
									"begin": 529,
									"end": 4390,
									"name": "DUP2",
									"source": 15
								},
								{
									"begin": 529,
									"end": 4390,
									"name": "MSTORE8",
									"source": 15
								},
								{
									"begin": 529,
									"end": 4390,
									"name": "DUP3",
									"source": 15
								},
								{
									"begin": 529,
									"end": 4390,
									"name": "DUP2",
									"source": 15
								},
								{
									"begin": 529,
									"end": 4390,
									"name": "RETURN",
									"source": 15
								}
							],
							".data": {
								"0": {
									".auxdata": "a2646970667358221220cbdad2c9bf39ca339e3700152761983d36dd962c5e0a72b757cd19286352c11964736f6c63430008060033",
									".code": [
										{
											"begin": 529,
											"end": 4390,
											"name": "PUSHDEPLOYADDRESS",
											"source": 15
										},
										{
											"begin": 529,
											"end": 4390,
											"name": "ADDRESS",
											"source": 15
										},
										{
											"begin": 529,
											"end": 4390,
											"name": "EQ",
											"source": 15
										},
										{
											"begin": 529,
											"end": 4390,
											"name": "PUSH",
											"source": 15,
											"value": "80"
										},
										{
											"begin": 529,
											"end": 4390,
											"name": "PUSH",
											"source": 15,
											"value": "40"
										},
										{
											"begin": 529,
											"end": 4390,
											"name": "MSTORE",
											"source": 15
										},
										{
											"begin": 529,
											"end": 4390,
											"name": "PUSH",
											"source": 15,
											"value": "4"
										},
										{
											"begin": 529,
											"end": 4390,
											"name": "CALLDATASIZE",
											"source": 15
										},
										{
											"begin": 529,
											"end": 4390,
											"name": "LT",
											"source": 15
										},
										{
											"begin": 529,
											"end": 4390,
											"name": "PUSH [tag]",
											"source": 15,
											"value": "1"
										},
										{
											"begin": 529,
											"end": 4390,
											"name": "JUMPI",
											"source": 15
										},
										{
											"begin": 529,
											"end": 4390,
											"name": "PUSH",
											"source": 15,
											"value": "0"
										},
										{
											"begin": 529,
											"end": 4390,
											"name": "CALLDATALOAD",
											"source": 15
										},
										{
											"begin": 529,
											"end": 4390,
											"name": "PUSH",
											"source": 15,
											"value": "E0"
										},
										{
											"begin": 529,
											"end": 4390,
											"name": "SHR",
											"source": 15
										},
										{
											"begin": 529,
											"end": 4390,
											"name": "DUP1",
											"source": 15
										},
										{
											"begin": 529,
											"end": 4390,
											"name": "PUSH",
											"source": 15,
											"value": "8200D873"
										},
										{
											"begin": 529,
											"end": 4390,
											"name": "EQ",
											"source": 15
										},
										{
											"begin": 529,
											"end": 4390,
											"name": "PUSH [tag]",
											"source": 15,
											"value": "2"
										},
										{
											"begin": 529,
											"end": 4390,
											"name": "JUMPI",
											"source": 15
										},
										{
											"begin": 529,
											"end": 4390,
											"name": "tag",
											"source": 15,
											"value": "1"
										},
										{
											"begin": 529,
											"end": 4390,
											"name": "JUMPDEST",
											"source": 15
										},
										{
											"begin": 529,
											"end": 4390,
											"name": "PUSH",
											"source": 15,
											"value": "0"
										},
										{
											"begin": 529,
											"end": 4390,
											"name": "DUP1",
											"source": 15
										},
										{
											"begin": 529,
											"end": 4390,
											"name": "REVERT",
											"source": 15
										},
										{
											"begin": 690,
											"end": 739,
											"name": "tag",
											"source": 15,
											"value": "2"
										},
										{
											"begin": 690,
											"end": 739,
											"name": "JUMPDEST",
											"source": 15
										},
										{
											"begin": 690,
											"end": 739,
											"name": "PUSH [tag]",
											"source": 15,
											"value": "3"
										},
										{
											"begin": 690,
											"end": 739,
											"name": "PUSH [tag]",
											"source": 15,
											"value": "4"
										},
										{
											"begin": 690,
											"end": 739,
											"name": "JUMP",
											"source": 15,
											"value": "[in]"
										},
										{
											"begin": 690,
											"end": 739,
											"name": "tag",
											"source": 15,
											"value": "3"
										},
										{
											"begin": 690,
											"end": 739,
											"name": "JUMPDEST",
											"source": 15
										},
										{
											"begin": 690,
											"end": 739,
											"name": "PUSH",
											"source": 15,
											"value": "40"
										},
										{
											"begin": 690,
											"end": 739,
											"name": "MLOAD",
											"source": 15
										},
										{
											"begin": 690,
											"end": 739,
											"name": "PUSH [tag]",
											"source": 15,
											"value": "5"
										},
										{
											"begin": 690,
											"end": 739,
											"name": "SWAP2",
											"source": 15
										},
										{
											"begin": 690,
											"end": 739,
											"name": "SWAP1",
											"source": 15
										},
										{
											"begin": 690,
											"end": 739,
											"name": "PUSH [tag]",
											"source": 15,
											"value": "6"
										},
										{
											"begin": 690,
											"end": 739,
											"name": "JUMP",
											"source": 15,
											"value": "[in]"
										},
										{
											"begin": 690,
											"end": 739,
											"name": "tag",
											"source": 15,
											"value": "5"
										},
										{
											"begin": 690,
											"end": 739,
											"name": "JUMPDEST",
											"source": 15
										},
										{
											"begin": 690,
											"end": 739,
											"name": "PUSH",
											"source": 15,
											"value": "40"
										},
										{
											"begin": 690,
											"end": 739,
											"name": "MLOAD",
											"source": 15
										},
										{
											"begin": 690,
											"end": 739,
											"name": "DUP1",
											"source": 15
										},
										{
											"begin": 690,
											"end": 739,
											"name": "SWAP2",
											"source": 15
										},
										{
											"begin": 690,
											"end": 739,
											"name": "SUB",
											"source": 15
										},
										{
											"begin": 690,
											"end": 739,
											"name": "SWAP1",
											"source": 15
										},
										{
											"begin": 690,
											"end": 739,
											"name": "RETURN",
											"source": 15
										},
										{
											"begin": 690,
											"end": 739,
											"name": "tag",
											"source": 15,
											"value": "4"
										},
										{
											"begin": 690,
											"end": 739,
											"name": "JUMPDEST",
											"source": 15
										},
										{
											"begin": 731,
											"end": 739,
											"name": "PUSH",
											"source": 15,
											"value": "FFFFFF"
										},
										{
											"begin": 690,
											"end": 739,
											"name": "DUP2",
											"source": 15
										},
										{
											"begin": 690,
											"end": 739,
											"name": "JUMP",
											"source": 15,
											"value": "[out]"
										},
										{
											"begin": 7,
											"end": 130,
											"name": "tag",
											"source": 19,
											"value": "8"
										},
										{
											"begin": 7,
											"end": 130,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 100,
											"end": 123,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "10"
										},
										{
											"begin": 117,
											"end": 122,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 100,
											"end": 123,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "11"
										},
										{
											"begin": 100,
											"end": 123,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 100,
											"end": 123,
											"name": "tag",
											"source": 19,
											"value": "10"
										},
										{
											"begin": 100,
											"end": 123,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 95,
											"end": 98,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 88,
											"end": 124,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 78,
											"end": 130,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 78,
											"end": 130,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 78,
											"end": 130,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 136,
											"end": 370,
											"name": "tag",
											"source": 19,
											"value": "6"
										},
										{
											"begin": 136,
											"end": 370,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 235,
											"end": 239,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 273,
											"end": 275,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 262,
											"end": 271,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 258,
											"end": 276,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 250,
											"end": 276,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 250,
											"end": 276,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 286,
											"end": 363,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "13"
										},
										{
											"begin": 360,
											"end": 361,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 349,
											"end": 358,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 345,
											"end": 362,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 336,
											"end": 342,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 286,
											"end": 363,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "8"
										},
										{
											"begin": 286,
											"end": 363,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 286,
											"end": 363,
											"name": "tag",
											"source": 19,
											"value": "13"
										},
										{
											"begin": 286,
											"end": 363,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 240,
											"end": 370,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 240,
											"end": 370,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 240,
											"end": 370,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 240,
											"end": 370,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 240,
											"end": 370,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 376,
											"end": 467,
											"name": "tag",
											"source": 19,
											"value": "11"
										},
										{
											"begin": 376,
											"end": 467,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 412,
											"end": 419,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 452,
											"end": 460,
											"name": "PUSH",
											"source": 19,
											"value": "FFFFFF"
										},
										{
											"begin": 445,
											"end": 450,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 441,
											"end": 461,
											"name": "AND",
											"source": 19
										},
										{
											"begin": 430,
											"end": 461,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 430,
											"end": 461,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 420,
											"end": 467,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 420,
											"end": 467,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 420,
											"end": 467,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 420,
											"end": 467,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										}
									]
								}
							}
						},
						"methodIdentifiers": {
							"MAX_CARDINALITY()": "8200d873"
						}
					},
					"metadata": "{\"compiler\":{\"version\":\"0.8.6+commit.11564f7e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"MAX_CARDINALITY\",\"outputs\":[{\"internalType\":\"uint24\",\"name\":\"\",\"type\":\"uint24\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"PoolTogether Inc.\",\"details\":\"Largely pulled from Uniswap V3 Oracle.sol: https://github.com/Uniswap/v3-core/blob/c05a0e2c8c08c460fb4d05cfdda30b3ad8deeaac/contracts/libraries/Oracle.sol\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Observation Library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"MAX_CARDINALITY()\":{\"notice\":\"The maximum number of observations\"}},\"notice\":\"This library allows one to store an array of timestamped values and efficiently binary search them.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/ObservationLib.sol\":\"ObservationLib\"},\"evmVersion\":\"berlin\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x02686c31ccb9ee77a299fa5f47327af5271f251a707a0e24f321957166ff0434\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cb562d8ae1da31249ca0d8553df9f89ef4c3c110a018c4449dde68ae30e51ec1\",\"dweb:/ipfs/QmUwxjtTUYB89ymeV46TZPmTsGnYrKNcgTHk7MQA1MG3hj\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/ObservationLib.sol\":{\"keccak256\":\"0x225592b42013fc0af60822e75bc047d53b42a5fcf15f2173cdc3b50bea334b0a\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://3b2023bfcc8fb346a52c519b3667c8bb1b935d16993d68b651ec2b84f61d8f3c\",\"dweb:/ipfs/QmYP7kPZefm4SN4kaJwMNrJq3KyYwfvndXY6XQdxeih646\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/OverflowSafeComparatorLib.sol\":{\"keccak256\":\"0x20630cf89e7b92462946defe979fd0e69fa119841d55886121948ad810778c74\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://2dda66ae7137027e803570a61c0aff2aa5bcf9c430ff068ba10529b1c5dd3d6a\",\"dweb:/ipfs/QmZbWq1fiisXBnj774CTKwZQF3vdgj16EUqGGQPegxLWZq\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/RingBufferLib.sol\":{\"keccak256\":\"0x052e3bf6bfb30f32950e322c853589a8d153cf34f4b1ee292b17eb46f2ae656c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://587d1e6fd1df4bfe26b78a23503e67f171c68bb44afe6582bbcb5726b9a60808\",\"dweb:/ipfs/Qmb2F87Lh23o922Qn8Mt2uZBz8qKoEfwMtwQYCT5L5z5wd\"]}},\"version\":1}",
					"storageLayout": {
						"storage": [],
						"types": null
					},
					"userdoc": {
						"kind": "user",
						"methods": {
							"MAX_CARDINALITY()": {
								"notice": "The maximum number of observations"
							}
						},
						"notice": "This library allows one to store an array of timestamped values and efficiently binary search them.",
						"version": 1
					}
				}
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/OverflowSafeComparatorLib.sol": {
				"OverflowSafeComparatorLib": {
					"abi": [],
					"devdoc": {
						"author": "PoolTogether Inc.",
						"details": "Code taken from Uniswap V3 Oracle.sol: https://github.com/Uniswap/v3-core/blob/3e88af408132fc957e3e406f65a0ce2b1ca06c3d/contracts/libraries/Oracle.sol",
						"kind": "dev",
						"methods": {},
						"title": "OverflowSafeComparatorLib library to share comparator functions between contracts",
						"version": 1
					},
					"evm": {
						"assembly": "    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/OverflowSafeComparatorLib.sol\":344:2920  library OverflowSafeComparatorLib {... */\n  dataSize(sub_0)\n  dataOffset(sub_0)\n  0x0b\n  dup3\n  dup3\n  dup3\n  codecopy\n  dup1\n  mload\n  0x00\n  byte\n  0x73\n  eq\n  tag_1\n  jumpi\n  mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n  mstore(0x04, 0x00)\n  revert(0x00, 0x24)\ntag_1:\n  mstore(0x00, address)\n  0x73\n  dup2\n  mstore8\n  dup3\n  dup2\n  return\nstop\n\nsub_0: assembly {\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/OverflowSafeComparatorLib.sol\":344:2920  library OverflowSafeComparatorLib {... */\n      eq(address, deployTimeAddress())\n      mstore(0x40, 0x80)\n      0x00\n      dup1\n      revert\n\n    auxdata: 0xa2646970667358221220598bcb3828090d1d6cc0d6f4bdb72721f6b749b66702caa142adbacbf80e1b4364736f6c63430008060033\n}\n",
						"bytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"linkReferences": {},
							"object": "60566050600b82828239805160001a6073146043577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220598bcb3828090d1d6cc0d6f4bdb72721f6b749b66702caa142adbacbf80e1b4364736f6c63430008060033",
							"opcodes": "PUSH1 0x56 PUSH1 0x50 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x43 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 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 MSIZE DUP12 0xCB CODESIZE 0x28 MULMOD 0xD SAR PUSH13 0xC0D6F4BDB72721F6B749B66702 0xCA LOG1 TIMESTAMP 0xAD 0xBA 0xCB 0xF8 0xE SHL NUMBER PUSH5 0x736F6C6343 STOP ADDMOD MOD STOP CALLER ",
							"sourceMap": "344:2576:16:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
						},
						"deployedBytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"immutableReferences": {},
							"linkReferences": {},
							"object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220598bcb3828090d1d6cc0d6f4bdb72721f6b749b66702caa142adbacbf80e1b4364736f6c63430008060033",
							"opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MSIZE DUP12 0xCB CODESIZE 0x28 MULMOD 0xD SAR PUSH13 0xC0D6F4BDB72721F6B749B66702 0xCA LOG1 TIMESTAMP 0xAD 0xBA 0xCB 0xF8 0xE SHL NUMBER PUSH5 0x736F6C6343 STOP ADDMOD MOD STOP CALLER ",
							"sourceMap": "344:2576:16:-:0;;;;;;;;"
						},
						"gasEstimates": {
							"creation": {
								"codeDepositCost": "17200",
								"executionCost": "97",
								"totalCost": "17297"
							},
							"internal": {
								"checkedSub(uint32,uint32,uint32)": "infinite",
								"lt(uint32,uint32,uint32)": "infinite",
								"lte(uint32,uint32,uint32)": "infinite"
							}
						},
						"legacyAssembly": {
							".code": [
								{
									"begin": 344,
									"end": 2920,
									"name": "PUSH #[$]",
									"source": 16,
									"value": "0000000000000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 344,
									"end": 2920,
									"name": "PUSH [$]",
									"source": 16,
									"value": "0000000000000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 344,
									"end": 2920,
									"name": "PUSH",
									"source": 16,
									"value": "B"
								},
								{
									"begin": 344,
									"end": 2920,
									"name": "DUP3",
									"source": 16
								},
								{
									"begin": 344,
									"end": 2920,
									"name": "DUP3",
									"source": 16
								},
								{
									"begin": 344,
									"end": 2920,
									"name": "DUP3",
									"source": 16
								},
								{
									"begin": 344,
									"end": 2920,
									"name": "CODECOPY",
									"source": 16
								},
								{
									"begin": 344,
									"end": 2920,
									"name": "DUP1",
									"source": 16
								},
								{
									"begin": 344,
									"end": 2920,
									"name": "MLOAD",
									"source": 16
								},
								{
									"begin": 344,
									"end": 2920,
									"name": "PUSH",
									"source": 16,
									"value": "0"
								},
								{
									"begin": 344,
									"end": 2920,
									"name": "BYTE",
									"source": 16
								},
								{
									"begin": 344,
									"end": 2920,
									"name": "PUSH",
									"source": 16,
									"value": "73"
								},
								{
									"begin": 344,
									"end": 2920,
									"name": "EQ",
									"source": 16
								},
								{
									"begin": 344,
									"end": 2920,
									"name": "PUSH [tag]",
									"source": 16,
									"value": "1"
								},
								{
									"begin": 344,
									"end": 2920,
									"name": "JUMPI",
									"source": 16
								},
								{
									"begin": 344,
									"end": 2920,
									"name": "PUSH",
									"source": 16,
									"value": "4E487B7100000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 344,
									"end": 2920,
									"name": "PUSH",
									"source": 16,
									"value": "0"
								},
								{
									"begin": 344,
									"end": 2920,
									"name": "MSTORE",
									"source": 16
								},
								{
									"begin": 344,
									"end": 2920,
									"name": "PUSH",
									"source": 16,
									"value": "0"
								},
								{
									"begin": 344,
									"end": 2920,
									"name": "PUSH",
									"source": 16,
									"value": "4"
								},
								{
									"begin": 344,
									"end": 2920,
									"name": "MSTORE",
									"source": 16
								},
								{
									"begin": 344,
									"end": 2920,
									"name": "PUSH",
									"source": 16,
									"value": "24"
								},
								{
									"begin": 344,
									"end": 2920,
									"name": "PUSH",
									"source": 16,
									"value": "0"
								},
								{
									"begin": 344,
									"end": 2920,
									"name": "REVERT",
									"source": 16
								},
								{
									"begin": 344,
									"end": 2920,
									"name": "tag",
									"source": 16,
									"value": "1"
								},
								{
									"begin": 344,
									"end": 2920,
									"name": "JUMPDEST",
									"source": 16
								},
								{
									"begin": 344,
									"end": 2920,
									"name": "ADDRESS",
									"source": 16
								},
								{
									"begin": 344,
									"end": 2920,
									"name": "PUSH",
									"source": 16,
									"value": "0"
								},
								{
									"begin": 344,
									"end": 2920,
									"name": "MSTORE",
									"source": 16
								},
								{
									"begin": 344,
									"end": 2920,
									"name": "PUSH",
									"source": 16,
									"value": "73"
								},
								{
									"begin": 344,
									"end": 2920,
									"name": "DUP2",
									"source": 16
								},
								{
									"begin": 344,
									"end": 2920,
									"name": "MSTORE8",
									"source": 16
								},
								{
									"begin": 344,
									"end": 2920,
									"name": "DUP3",
									"source": 16
								},
								{
									"begin": 344,
									"end": 2920,
									"name": "DUP2",
									"source": 16
								},
								{
									"begin": 344,
									"end": 2920,
									"name": "RETURN",
									"source": 16
								}
							],
							".data": {
								"0": {
									".auxdata": "a2646970667358221220598bcb3828090d1d6cc0d6f4bdb72721f6b749b66702caa142adbacbf80e1b4364736f6c63430008060033",
									".code": [
										{
											"begin": 344,
											"end": 2920,
											"name": "PUSHDEPLOYADDRESS",
											"source": 16
										},
										{
											"begin": 344,
											"end": 2920,
											"name": "ADDRESS",
											"source": 16
										},
										{
											"begin": 344,
											"end": 2920,
											"name": "EQ",
											"source": 16
										},
										{
											"begin": 344,
											"end": 2920,
											"name": "PUSH",
											"source": 16,
											"value": "80"
										},
										{
											"begin": 344,
											"end": 2920,
											"name": "PUSH",
											"source": 16,
											"value": "40"
										},
										{
											"begin": 344,
											"end": 2920,
											"name": "MSTORE",
											"source": 16
										},
										{
											"begin": 344,
											"end": 2920,
											"name": "PUSH",
											"source": 16,
											"value": "0"
										},
										{
											"begin": 344,
											"end": 2920,
											"name": "DUP1",
											"source": 16
										},
										{
											"begin": 344,
											"end": 2920,
											"name": "REVERT",
											"source": 16
										}
									]
								}
							}
						},
						"methodIdentifiers": {}
					},
					"metadata": "{\"compiler\":{\"version\":\"0.8.6+commit.11564f7e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"PoolTogether Inc.\",\"details\":\"Code taken from Uniswap V3 Oracle.sol: https://github.com/Uniswap/v3-core/blob/3e88af408132fc957e3e406f65a0ce2b1ca06c3d/contracts/libraries/Oracle.sol\",\"kind\":\"dev\",\"methods\":{},\"title\":\"OverflowSafeComparatorLib library to share comparator functions between contracts\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/OverflowSafeComparatorLib.sol\":\"OverflowSafeComparatorLib\"},\"evmVersion\":\"berlin\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/OverflowSafeComparatorLib.sol\":{\"keccak256\":\"0x20630cf89e7b92462946defe979fd0e69fa119841d55886121948ad810778c74\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://2dda66ae7137027e803570a61c0aff2aa5bcf9c430ff068ba10529b1c5dd3d6a\",\"dweb:/ipfs/QmZbWq1fiisXBnj774CTKwZQF3vdgj16EUqGGQPegxLWZq\"]}},\"version\":1}",
					"storageLayout": {
						"storage": [],
						"types": null
					},
					"userdoc": {
						"kind": "user",
						"methods": {},
						"version": 1
					}
				}
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/RingBufferLib.sol": {
				"RingBufferLib": {
					"abi": [],
					"devdoc": {
						"kind": "dev",
						"methods": {},
						"version": 1
					},
					"evm": {
						"assembly": "    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/RingBufferLib.sol\":61:2436  library RingBufferLib {... */\n  dataSize(sub_0)\n  dataOffset(sub_0)\n  0x0b\n  dup3\n  dup3\n  dup3\n  codecopy\n  dup1\n  mload\n  0x00\n  byte\n  0x73\n  eq\n  tag_1\n  jumpi\n  mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n  mstore(0x04, 0x00)\n  revert(0x00, 0x24)\ntag_1:\n  mstore(0x00, address)\n  0x73\n  dup2\n  mstore8\n  dup3\n  dup2\n  return\nstop\n\nsub_0: assembly {\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/RingBufferLib.sol\":61:2436  library RingBufferLib {... */\n      eq(address, deployTimeAddress())\n      mstore(0x40, 0x80)\n      0x00\n      dup1\n      revert\n\n    auxdata: 0xa2646970667358221220662e4c1962a81c43f7a87e73b3fab35a4a00b147cd877d0bf0dc6e40e0c209e364736f6c63430008060033\n}\n",
						"bytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"linkReferences": {},
							"object": "60566050600b82828239805160001a6073146043577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220662e4c1962a81c43f7a87e73b3fab35a4a00b147cd877d0bf0dc6e40e0c209e364736f6c63430008060033",
							"opcodes": "PUSH1 0x56 PUSH1 0x50 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x43 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 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 PUSH7 0x2E4C1962A81C43 0xF7 0xA8 PUSH31 0x73B3FAB35A4A00B147CD877D0BF0DC6E40E0C209E364736F6C634300080600 CALLER ",
							"sourceMap": "61:2375:17:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
						},
						"deployedBytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"immutableReferences": {},
							"linkReferences": {},
							"object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220662e4c1962a81c43f7a87e73b3fab35a4a00b147cd877d0bf0dc6e40e0c209e364736f6c63430008060033",
							"opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH7 0x2E4C1962A81C43 0xF7 0xA8 PUSH31 0x73B3FAB35A4A00B147CD877D0BF0DC6E40E0C209E364736F6C634300080600 CALLER ",
							"sourceMap": "61:2375:17:-:0;;;;;;;;"
						},
						"gasEstimates": {
							"creation": {
								"codeDepositCost": "17200",
								"executionCost": "97",
								"totalCost": "17297"
							},
							"internal": {
								"newestIndex(uint256,uint256)": "infinite",
								"nextIndex(uint256,uint256)": "infinite",
								"offset(uint256,uint256,uint256)": "infinite",
								"wrap(uint256,uint256)": "infinite"
							}
						},
						"legacyAssembly": {
							".code": [
								{
									"begin": 61,
									"end": 2436,
									"name": "PUSH #[$]",
									"source": 17,
									"value": "0000000000000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 61,
									"end": 2436,
									"name": "PUSH [$]",
									"source": 17,
									"value": "0000000000000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 61,
									"end": 2436,
									"name": "PUSH",
									"source": 17,
									"value": "B"
								},
								{
									"begin": 61,
									"end": 2436,
									"name": "DUP3",
									"source": 17
								},
								{
									"begin": 61,
									"end": 2436,
									"name": "DUP3",
									"source": 17
								},
								{
									"begin": 61,
									"end": 2436,
									"name": "DUP3",
									"source": 17
								},
								{
									"begin": 61,
									"end": 2436,
									"name": "CODECOPY",
									"source": 17
								},
								{
									"begin": 61,
									"end": 2436,
									"name": "DUP1",
									"source": 17
								},
								{
									"begin": 61,
									"end": 2436,
									"name": "MLOAD",
									"source": 17
								},
								{
									"begin": 61,
									"end": 2436,
									"name": "PUSH",
									"source": 17,
									"value": "0"
								},
								{
									"begin": 61,
									"end": 2436,
									"name": "BYTE",
									"source": 17
								},
								{
									"begin": 61,
									"end": 2436,
									"name": "PUSH",
									"source": 17,
									"value": "73"
								},
								{
									"begin": 61,
									"end": 2436,
									"name": "EQ",
									"source": 17
								},
								{
									"begin": 61,
									"end": 2436,
									"name": "PUSH [tag]",
									"source": 17,
									"value": "1"
								},
								{
									"begin": 61,
									"end": 2436,
									"name": "JUMPI",
									"source": 17
								},
								{
									"begin": 61,
									"end": 2436,
									"name": "PUSH",
									"source": 17,
									"value": "4E487B7100000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 61,
									"end": 2436,
									"name": "PUSH",
									"source": 17,
									"value": "0"
								},
								{
									"begin": 61,
									"end": 2436,
									"name": "MSTORE",
									"source": 17
								},
								{
									"begin": 61,
									"end": 2436,
									"name": "PUSH",
									"source": 17,
									"value": "0"
								},
								{
									"begin": 61,
									"end": 2436,
									"name": "PUSH",
									"source": 17,
									"value": "4"
								},
								{
									"begin": 61,
									"end": 2436,
									"name": "MSTORE",
									"source": 17
								},
								{
									"begin": 61,
									"end": 2436,
									"name": "PUSH",
									"source": 17,
									"value": "24"
								},
								{
									"begin": 61,
									"end": 2436,
									"name": "PUSH",
									"source": 17,
									"value": "0"
								},
								{
									"begin": 61,
									"end": 2436,
									"name": "REVERT",
									"source": 17
								},
								{
									"begin": 61,
									"end": 2436,
									"name": "tag",
									"source": 17,
									"value": "1"
								},
								{
									"begin": 61,
									"end": 2436,
									"name": "JUMPDEST",
									"source": 17
								},
								{
									"begin": 61,
									"end": 2436,
									"name": "ADDRESS",
									"source": 17
								},
								{
									"begin": 61,
									"end": 2436,
									"name": "PUSH",
									"source": 17,
									"value": "0"
								},
								{
									"begin": 61,
									"end": 2436,
									"name": "MSTORE",
									"source": 17
								},
								{
									"begin": 61,
									"end": 2436,
									"name": "PUSH",
									"source": 17,
									"value": "73"
								},
								{
									"begin": 61,
									"end": 2436,
									"name": "DUP2",
									"source": 17
								},
								{
									"begin": 61,
									"end": 2436,
									"name": "MSTORE8",
									"source": 17
								},
								{
									"begin": 61,
									"end": 2436,
									"name": "DUP3",
									"source": 17
								},
								{
									"begin": 61,
									"end": 2436,
									"name": "DUP2",
									"source": 17
								},
								{
									"begin": 61,
									"end": 2436,
									"name": "RETURN",
									"source": 17
								}
							],
							".data": {
								"0": {
									".auxdata": "a2646970667358221220662e4c1962a81c43f7a87e73b3fab35a4a00b147cd877d0bf0dc6e40e0c209e364736f6c63430008060033",
									".code": [
										{
											"begin": 61,
											"end": 2436,
											"name": "PUSHDEPLOYADDRESS",
											"source": 17
										},
										{
											"begin": 61,
											"end": 2436,
											"name": "ADDRESS",
											"source": 17
										},
										{
											"begin": 61,
											"end": 2436,
											"name": "EQ",
											"source": 17
										},
										{
											"begin": 61,
											"end": 2436,
											"name": "PUSH",
											"source": 17,
											"value": "80"
										},
										{
											"begin": 61,
											"end": 2436,
											"name": "PUSH",
											"source": 17,
											"value": "40"
										},
										{
											"begin": 61,
											"end": 2436,
											"name": "MSTORE",
											"source": 17
										},
										{
											"begin": 61,
											"end": 2436,
											"name": "PUSH",
											"source": 17,
											"value": "0"
										},
										{
											"begin": 61,
											"end": 2436,
											"name": "DUP1",
											"source": 17
										},
										{
											"begin": 61,
											"end": 2436,
											"name": "REVERT",
											"source": 17
										}
									]
								}
							}
						},
						"methodIdentifiers": {}
					},
					"metadata": "{\"compiler\":{\"version\":\"0.8.6+commit.11564f7e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/RingBufferLib.sol\":\"RingBufferLib\"},\"evmVersion\":\"berlin\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/RingBufferLib.sol\":{\"keccak256\":\"0x052e3bf6bfb30f32950e322c853589a8d153cf34f4b1ee292b17eb46f2ae656c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://587d1e6fd1df4bfe26b78a23503e67f171c68bb44afe6582bbcb5726b9a60808\",\"dweb:/ipfs/Qmb2F87Lh23o922Qn8Mt2uZBz8qKoEfwMtwQYCT5L5z5wd\"]}},\"version\":1}",
					"storageLayout": {
						"storage": [],
						"types": null
					},
					"userdoc": {
						"kind": "user",
						"methods": {},
						"version": 1
					}
				}
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/TwabLib.sol": {
				"TwabLib": {
					"abi": [
						{
							"inputs": [],
							"name": "MAX_CARDINALITY",
							"outputs": [
								{
									"internalType": "uint24",
									"name": "",
									"type": "uint24"
								}
							],
							"stateMutability": "view",
							"type": "function"
						}
					],
					"devdoc": {
						"author": "PoolTogether Inc Team",
						"details": "Time-Weighted Average Balance Library for ERC20 tokens.",
						"kind": "dev",
						"methods": {},
						"stateVariables": {
							"MAX_CARDINALITY": {
								"details": "The user Account.AccountDetails.cardinality parameter can NOT exceed the max cardinality variable. Preventing \"corrupted\" ring buffer lookup pointers and new observation checkpoints. The MAX_CARDINALITY in fact guarantees at least 7.4 years of records: If 14 = block time in seconds (2**24) * 14 = 234881024 seconds of history 234881024 / (365 * 24 * 60 * 60) ~= 7.44 years"
							}
						},
						"title": "PoolTogether V4 TwabLib (Library)",
						"version": 1
					},
					"evm": {
						"assembly": "    /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/TwabLib.sol\":934:19326  library TwabLib {... */\n  dataSize(sub_0)\n  dataOffset(sub_0)\n  0x0b\n  dup3\n  dup3\n  dup3\n  codecopy\n  dup1\n  mload\n  0x00\n  byte\n  0x73\n  eq\n  tag_1\n  jumpi\n  mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n  mstore(0x04, 0x00)\n  revert(0x00, 0x24)\ntag_1:\n  mstore(0x00, address)\n  0x73\n  dup2\n  mstore8\n  dup3\n  dup2\n  return\nstop\n\nsub_0: assembly {\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/TwabLib.sol\":934:19326  library TwabLib {... */\n      eq(address, deployTimeAddress())\n      mstore(0x40, 0x80)\n      jumpi(tag_1, lt(calldatasize, 0x04))\n      shr(0xe0, calldataload(0x00))\n      dup1\n      0x8200d873\n      eq\n      tag_2\n      jumpi\n    tag_1:\n      0x00\n      dup1\n      revert\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/TwabLib.sol\":2024:2073  uint24 public constant MAX_CARDINALITY = 16777215 */\n    tag_2:\n      tag_3\n      tag_4\n      jump\t// in\n    tag_3:\n      mload(0x40)\n      tag_5\n      swap2\n      swap1\n      tag_6\n      jump\t// in\n    tag_5:\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      return\n    tag_4:\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/TwabLib.sol\":2065:2073  16777215 */\n      0xffffff\n        /* \"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/TwabLib.sol\":2024:2073  uint24 public constant MAX_CARDINALITY = 16777215 */\n      dup2\n      jump\t// out\n        /* \"#utility.yul\":7:130   */\n    tag_8:\n        /* \"#utility.yul\":100:123   */\n      tag_10\n        /* \"#utility.yul\":117:122   */\n      dup2\n        /* \"#utility.yul\":100:123   */\n      tag_11\n      jump\t// in\n    tag_10:\n        /* \"#utility.yul\":95:98   */\n      dup3\n        /* \"#utility.yul\":88:124   */\n      mstore\n        /* \"#utility.yul\":78:130   */\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":136:370   */\n    tag_6:\n        /* \"#utility.yul\":235:239   */\n      0x00\n        /* \"#utility.yul\":273:275   */\n      0x20\n        /* \"#utility.yul\":262:271   */\n      dup3\n        /* \"#utility.yul\":258:276   */\n      add\n        /* \"#utility.yul\":250:276   */\n      swap1\n      pop\n        /* \"#utility.yul\":286:363   */\n      tag_13\n        /* \"#utility.yul\":360:361   */\n      0x00\n        /* \"#utility.yul\":349:358   */\n      dup4\n        /* \"#utility.yul\":345:362   */\n      add\n        /* \"#utility.yul\":336:342   */\n      dup5\n        /* \"#utility.yul\":286:363   */\n      tag_8\n      jump\t// in\n    tag_13:\n        /* \"#utility.yul\":240:370   */\n      swap3\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":376:467   */\n    tag_11:\n        /* \"#utility.yul\":412:419   */\n      0x00\n        /* \"#utility.yul\":452:460   */\n      0xffffff\n        /* \"#utility.yul\":445:450   */\n      dup3\n        /* \"#utility.yul\":441:461   */\n      and\n        /* \"#utility.yul\":430:461   */\n      swap1\n      pop\n        /* \"#utility.yul\":420:467   */\n      swap2\n      swap1\n      pop\n      jump\t// out\n\n    auxdata: 0xa26469706673582212204d508743046e2d0d971bc5726fec74cd28ba092b3041d43d9310e92d1375eaa964736f6c63430008060033\n}\n",
						"bytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"linkReferences": {},
							"object": "60c4610052600b82828239805160001a607314610045577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361060335760003560e01c80638200d873146038575b600080fd5b603e6052565b604051604991906066565b60405180910390f35b62ffffff81565b606081607f565b82525050565b6000602082019050607960008301846059565b92915050565b600062ffffff8216905091905056fea26469706673582212204d508743046e2d0d971bc5726fec74cd28ba092b3041d43d9310e92d1375eaa964736f6c63430008060033",
							"opcodes": "PUSH1 0xC4 PUSH2 0x52 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH2 0x45 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 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 0x4 CALLDATASIZE LT PUSH1 0x33 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8200D873 EQ PUSH1 0x38 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3E PUSH1 0x52 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x49 SWAP2 SWAP1 PUSH1 0x66 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH3 0xFFFFFF DUP2 JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x7F JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x79 PUSH1 0x0 DUP4 ADD DUP5 PUSH1 0x59 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0xFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4D POP DUP8 NUMBER DIV PUSH15 0x2D0D971BC5726FEC74CD28BA092B30 COINBASE 0xD4 RETURNDATASIZE SWAP4 LT 0xE9 0x2D SGT PUSH22 0xEAA964736F6C63430008060033000000000000000000 ",
							"sourceMap": "934:18392:18:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
						},
						"deployedBytecode": {
							"functionDebugData": {
								"@MAX_CARDINALITY_4723": {
									"entryPoint": 82,
									"id": 4723,
									"parameterSlots": 0,
									"returnSlots": 0
								},
								"abi_encode_t_uint24_to_t_uint24_fromStack_library": {
									"entryPoint": 89,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 0
								},
								"abi_encode_tuple_t_uint24__to_t_uint24__fromStack_library_reversed": {
									"entryPoint": 102,
									"id": null,
									"parameterSlots": 2,
									"returnSlots": 1
								},
								"cleanup_t_uint24": {
									"entryPoint": 127,
									"id": null,
									"parameterSlots": 1,
									"returnSlots": 1
								}
							},
							"generatedSources": [
								{
									"ast": {
										"nodeType": "YulBlock",
										"src": "0:470:19",
										"statements": [
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "78:52:19",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "95:3:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "value",
																				"nodeType": "YulIdentifier",
																				"src": "117:5:19"
																			}
																		],
																		"functionName": {
																			"name": "cleanup_t_uint24",
																			"nodeType": "YulIdentifier",
																			"src": "100:16:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "100:23:19"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "88:6:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "88:36:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "88:36:19"
														}
													]
												},
												"name": "abi_encode_t_uint24_to_t_uint24_fromStack_library",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "66:5:19",
														"type": ""
													},
													{
														"name": "pos",
														"nodeType": "YulTypedName",
														"src": "73:3:19",
														"type": ""
													}
												],
												"src": "7:123:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "240:130:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "250:26:19",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "262:9:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "273:2:19",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "258:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "258:18:19"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "250:4:19"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "value0",
																		"nodeType": "YulIdentifier",
																		"src": "336:6:19"
																	},
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "349:9:19"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "360:1:19",
																				"type": "",
																				"value": "0"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "345:3:19"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "345:17:19"
																	}
																],
																"functionName": {
																	"name": "abi_encode_t_uint24_to_t_uint24_fromStack_library",
																	"nodeType": "YulIdentifier",
																	"src": "286:49:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "286:77:19"
															},
															"nodeType": "YulExpressionStatement",
															"src": "286:77:19"
														}
													]
												},
												"name": "abi_encode_tuple_t_uint24__to_t_uint24__fromStack_library_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "212:9:19",
														"type": ""
													},
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "224:6:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "235:4:19",
														"type": ""
													}
												],
												"src": "136:234:19"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "420:47:19",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "430:31:19",
															"value": {
																"arguments": [
																	{
																		"name": "value",
																		"nodeType": "YulIdentifier",
																		"src": "445:5:19"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "452:8:19",
																		"type": "",
																		"value": "0xffffff"
																	}
																],
																"functionName": {
																	"name": "and",
																	"nodeType": "YulIdentifier",
																	"src": "441:3:19"
																},
																"nodeType": "YulFunctionCall",
																"src": "441:20:19"
															},
															"variableNames": [
																{
																	"name": "cleaned",
																	"nodeType": "YulIdentifier",
																	"src": "430:7:19"
																}
															]
														}
													]
												},
												"name": "cleanup_t_uint24",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "402:5:19",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "cleaned",
														"nodeType": "YulTypedName",
														"src": "412:7:19",
														"type": ""
													}
												],
												"src": "376:91:19"
											}
										]
									},
									"contents": "{\n\n    function abi_encode_t_uint24_to_t_uint24_fromStack_library(value, pos) {\n        mstore(pos, cleanup_t_uint24(value))\n    }\n\n    function abi_encode_tuple_t_uint24__to_t_uint24__fromStack_library_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_uint24_to_t_uint24_fromStack_library(value0,  add(headStart, 0))\n\n    }\n\n    function cleanup_t_uint24(value) -> cleaned {\n        cleaned := and(value, 0xffffff)\n    }\n\n}\n",
									"id": 19,
									"language": "Yul",
									"name": "#utility.yul"
								}
							],
							"immutableReferences": {},
							"linkReferences": {},
							"object": "730000000000000000000000000000000000000000301460806040526004361060335760003560e01c80638200d873146038575b600080fd5b603e6052565b604051604991906066565b60405180910390f35b62ffffff81565b606081607f565b82525050565b6000602082019050607960008301846059565b92915050565b600062ffffff8216905091905056fea26469706673582212204d508743046e2d0d971bc5726fec74cd28ba092b3041d43d9310e92d1375eaa964736f6c63430008060033",
							"opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH1 0x33 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8200D873 EQ PUSH1 0x38 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3E PUSH1 0x52 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x49 SWAP2 SWAP1 PUSH1 0x66 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH3 0xFFFFFF DUP2 JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x7F JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x79 PUSH1 0x0 DUP4 ADD DUP5 PUSH1 0x59 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0xFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4D POP DUP8 NUMBER DIV PUSH15 0x2D0D971BC5726FEC74CD28BA092B30 COINBASE 0xD4 RETURNDATASIZE SWAP4 LT 0xE9 0x2D SGT PUSH22 0xEAA964736F6C63430008060033000000000000000000 ",
							"sourceMap": "934:18392:18:-:0;;;;;;;;;;;;;;;;;;;;;;;;2024:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;2065:8;2024:49;:::o;7:123:19:-;100:23;117:5;100:23;:::i;:::-;95:3;88:36;78:52;;:::o;136:234::-;235:4;273:2;262:9;258:18;250:26;;286:77;360:1;349:9;345:17;336:6;286:77;:::i;:::-;240:130;;;;:::o;376:91::-;412:7;452:8;445:5;441:20;430:31;;420:47;;;:::o"
						},
						"gasEstimates": {
							"creation": {
								"codeDepositCost": "39200",
								"executionCost": "118",
								"totalCost": "39318"
							},
							"external": {
								"MAX_CARDINALITY()": "297"
							},
							"internal": {
								"_calculateTwab(struct ObservationLib.Observation storage ref[16777215] storage pointer,struct TwabLib.AccountDetails memory,struct ObservationLib.Observation memory,struct ObservationLib.Observation memory,uint24,uint24,uint32,uint32)": "infinite",
								"_computeNextTwab(struct ObservationLib.Observation memory,uint224,uint32)": "infinite",
								"_getAverageBalanceBetween(struct ObservationLib.Observation storage ref[16777215] storage pointer,struct TwabLib.AccountDetails memory,uint32,uint32,uint32)": "infinite",
								"_getBalanceAt(struct ObservationLib.Observation storage ref[16777215] storage pointer,struct TwabLib.AccountDetails memory,uint32,uint32)": "infinite",
								"_nextTwab(struct ObservationLib.Observation storage ref[16777215] storage pointer,struct TwabLib.AccountDetails memory,uint32)": "infinite",
								"decreaseBalance(struct TwabLib.Account storage pointer,uint208,string memory,uint32)": "infinite",
								"getAverageBalanceBetween(struct ObservationLib.Observation storage ref[16777215] storage pointer,struct TwabLib.AccountDetails memory,uint32,uint32,uint32)": "infinite",
								"getBalanceAt(struct ObservationLib.Observation storage ref[16777215] storage pointer,struct TwabLib.AccountDetails memory,uint32,uint32)": "infinite",
								"increaseBalance(struct TwabLib.Account storage pointer,uint208,uint32)": "infinite",
								"newestTwab(struct ObservationLib.Observation storage ref[16777215] storage pointer,struct TwabLib.AccountDetails memory)": "infinite",
								"oldestTwab(struct ObservationLib.Observation storage ref[16777215] storage pointer,struct TwabLib.AccountDetails memory)": "infinite",
								"push(struct TwabLib.AccountDetails memory)": "infinite"
							}
						},
						"legacyAssembly": {
							".code": [
								{
									"begin": 934,
									"end": 19326,
									"name": "PUSH #[$]",
									"source": 18,
									"value": "0000000000000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 934,
									"end": 19326,
									"name": "PUSH [$]",
									"source": 18,
									"value": "0000000000000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 934,
									"end": 19326,
									"name": "PUSH",
									"source": 18,
									"value": "B"
								},
								{
									"begin": 934,
									"end": 19326,
									"name": "DUP3",
									"source": 18
								},
								{
									"begin": 934,
									"end": 19326,
									"name": "DUP3",
									"source": 18
								},
								{
									"begin": 934,
									"end": 19326,
									"name": "DUP3",
									"source": 18
								},
								{
									"begin": 934,
									"end": 19326,
									"name": "CODECOPY",
									"source": 18
								},
								{
									"begin": 934,
									"end": 19326,
									"name": "DUP1",
									"source": 18
								},
								{
									"begin": 934,
									"end": 19326,
									"name": "MLOAD",
									"source": 18
								},
								{
									"begin": 934,
									"end": 19326,
									"name": "PUSH",
									"source": 18,
									"value": "0"
								},
								{
									"begin": 934,
									"end": 19326,
									"name": "BYTE",
									"source": 18
								},
								{
									"begin": 934,
									"end": 19326,
									"name": "PUSH",
									"source": 18,
									"value": "73"
								},
								{
									"begin": 934,
									"end": 19326,
									"name": "EQ",
									"source": 18
								},
								{
									"begin": 934,
									"end": 19326,
									"name": "PUSH [tag]",
									"source": 18,
									"value": "1"
								},
								{
									"begin": 934,
									"end": 19326,
									"name": "JUMPI",
									"source": 18
								},
								{
									"begin": 934,
									"end": 19326,
									"name": "PUSH",
									"source": 18,
									"value": "4E487B7100000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 934,
									"end": 19326,
									"name": "PUSH",
									"source": 18,
									"value": "0"
								},
								{
									"begin": 934,
									"end": 19326,
									"name": "MSTORE",
									"source": 18
								},
								{
									"begin": 934,
									"end": 19326,
									"name": "PUSH",
									"source": 18,
									"value": "0"
								},
								{
									"begin": 934,
									"end": 19326,
									"name": "PUSH",
									"source": 18,
									"value": "4"
								},
								{
									"begin": 934,
									"end": 19326,
									"name": "MSTORE",
									"source": 18
								},
								{
									"begin": 934,
									"end": 19326,
									"name": "PUSH",
									"source": 18,
									"value": "24"
								},
								{
									"begin": 934,
									"end": 19326,
									"name": "PUSH",
									"source": 18,
									"value": "0"
								},
								{
									"begin": 934,
									"end": 19326,
									"name": "REVERT",
									"source": 18
								},
								{
									"begin": 934,
									"end": 19326,
									"name": "tag",
									"source": 18,
									"value": "1"
								},
								{
									"begin": 934,
									"end": 19326,
									"name": "JUMPDEST",
									"source": 18
								},
								{
									"begin": 934,
									"end": 19326,
									"name": "ADDRESS",
									"source": 18
								},
								{
									"begin": 934,
									"end": 19326,
									"name": "PUSH",
									"source": 18,
									"value": "0"
								},
								{
									"begin": 934,
									"end": 19326,
									"name": "MSTORE",
									"source": 18
								},
								{
									"begin": 934,
									"end": 19326,
									"name": "PUSH",
									"source": 18,
									"value": "73"
								},
								{
									"begin": 934,
									"end": 19326,
									"name": "DUP2",
									"source": 18
								},
								{
									"begin": 934,
									"end": 19326,
									"name": "MSTORE8",
									"source": 18
								},
								{
									"begin": 934,
									"end": 19326,
									"name": "DUP3",
									"source": 18
								},
								{
									"begin": 934,
									"end": 19326,
									"name": "DUP2",
									"source": 18
								},
								{
									"begin": 934,
									"end": 19326,
									"name": "RETURN",
									"source": 18
								}
							],
							".data": {
								"0": {
									".auxdata": "a26469706673582212204d508743046e2d0d971bc5726fec74cd28ba092b3041d43d9310e92d1375eaa964736f6c63430008060033",
									".code": [
										{
											"begin": 934,
											"end": 19326,
											"name": "PUSHDEPLOYADDRESS",
											"source": 18
										},
										{
											"begin": 934,
											"end": 19326,
											"name": "ADDRESS",
											"source": 18
										},
										{
											"begin": 934,
											"end": 19326,
											"name": "EQ",
											"source": 18
										},
										{
											"begin": 934,
											"end": 19326,
											"name": "PUSH",
											"source": 18,
											"value": "80"
										},
										{
											"begin": 934,
											"end": 19326,
											"name": "PUSH",
											"source": 18,
											"value": "40"
										},
										{
											"begin": 934,
											"end": 19326,
											"name": "MSTORE",
											"source": 18
										},
										{
											"begin": 934,
											"end": 19326,
											"name": "PUSH",
											"source": 18,
											"value": "4"
										},
										{
											"begin": 934,
											"end": 19326,
											"name": "CALLDATASIZE",
											"source": 18
										},
										{
											"begin": 934,
											"end": 19326,
											"name": "LT",
											"source": 18
										},
										{
											"begin": 934,
											"end": 19326,
											"name": "PUSH [tag]",
											"source": 18,
											"value": "1"
										},
										{
											"begin": 934,
											"end": 19326,
											"name": "JUMPI",
											"source": 18
										},
										{
											"begin": 934,
											"end": 19326,
											"name": "PUSH",
											"source": 18,
											"value": "0"
										},
										{
											"begin": 934,
											"end": 19326,
											"name": "CALLDATALOAD",
											"source": 18
										},
										{
											"begin": 934,
											"end": 19326,
											"name": "PUSH",
											"source": 18,
											"value": "E0"
										},
										{
											"begin": 934,
											"end": 19326,
											"name": "SHR",
											"source": 18
										},
										{
											"begin": 934,
											"end": 19326,
											"name": "DUP1",
											"source": 18
										},
										{
											"begin": 934,
											"end": 19326,
											"name": "PUSH",
											"source": 18,
											"value": "8200D873"
										},
										{
											"begin": 934,
											"end": 19326,
											"name": "EQ",
											"source": 18
										},
										{
											"begin": 934,
											"end": 19326,
											"name": "PUSH [tag]",
											"source": 18,
											"value": "2"
										},
										{
											"begin": 934,
											"end": 19326,
											"name": "JUMPI",
											"source": 18
										},
										{
											"begin": 934,
											"end": 19326,
											"name": "tag",
											"source": 18,
											"value": "1"
										},
										{
											"begin": 934,
											"end": 19326,
											"name": "JUMPDEST",
											"source": 18
										},
										{
											"begin": 934,
											"end": 19326,
											"name": "PUSH",
											"source": 18,
											"value": "0"
										},
										{
											"begin": 934,
											"end": 19326,
											"name": "DUP1",
											"source": 18
										},
										{
											"begin": 934,
											"end": 19326,
											"name": "REVERT",
											"source": 18
										},
										{
											"begin": 2024,
											"end": 2073,
											"name": "tag",
											"source": 18,
											"value": "2"
										},
										{
											"begin": 2024,
											"end": 2073,
											"name": "JUMPDEST",
											"source": 18
										},
										{
											"begin": 2024,
											"end": 2073,
											"name": "PUSH [tag]",
											"source": 18,
											"value": "3"
										},
										{
											"begin": 2024,
											"end": 2073,
											"name": "PUSH [tag]",
											"source": 18,
											"value": "4"
										},
										{
											"begin": 2024,
											"end": 2073,
											"name": "JUMP",
											"source": 18,
											"value": "[in]"
										},
										{
											"begin": 2024,
											"end": 2073,
											"name": "tag",
											"source": 18,
											"value": "3"
										},
										{
											"begin": 2024,
											"end": 2073,
											"name": "JUMPDEST",
											"source": 18
										},
										{
											"begin": 2024,
											"end": 2073,
											"name": "PUSH",
											"source": 18,
											"value": "40"
										},
										{
											"begin": 2024,
											"end": 2073,
											"name": "MLOAD",
											"source": 18
										},
										{
											"begin": 2024,
											"end": 2073,
											"name": "PUSH [tag]",
											"source": 18,
											"value": "5"
										},
										{
											"begin": 2024,
											"end": 2073,
											"name": "SWAP2",
											"source": 18
										},
										{
											"begin": 2024,
											"end": 2073,
											"name": "SWAP1",
											"source": 18
										},
										{
											"begin": 2024,
											"end": 2073,
											"name": "PUSH [tag]",
											"source": 18,
											"value": "6"
										},
										{
											"begin": 2024,
											"end": 2073,
											"name": "JUMP",
											"source": 18,
											"value": "[in]"
										},
										{
											"begin": 2024,
											"end": 2073,
											"name": "tag",
											"source": 18,
											"value": "5"
										},
										{
											"begin": 2024,
											"end": 2073,
											"name": "JUMPDEST",
											"source": 18
										},
										{
											"begin": 2024,
											"end": 2073,
											"name": "PUSH",
											"source": 18,
											"value": "40"
										},
										{
											"begin": 2024,
											"end": 2073,
											"name": "MLOAD",
											"source": 18
										},
										{
											"begin": 2024,
											"end": 2073,
											"name": "DUP1",
											"source": 18
										},
										{
											"begin": 2024,
											"end": 2073,
											"name": "SWAP2",
											"source": 18
										},
										{
											"begin": 2024,
											"end": 2073,
											"name": "SUB",
											"source": 18
										},
										{
											"begin": 2024,
											"end": 2073,
											"name": "SWAP1",
											"source": 18
										},
										{
											"begin": 2024,
											"end": 2073,
											"name": "RETURN",
											"source": 18
										},
										{
											"begin": 2024,
											"end": 2073,
											"name": "tag",
											"source": 18,
											"value": "4"
										},
										{
											"begin": 2024,
											"end": 2073,
											"name": "JUMPDEST",
											"source": 18
										},
										{
											"begin": 2065,
											"end": 2073,
											"name": "PUSH",
											"source": 18,
											"value": "FFFFFF"
										},
										{
											"begin": 2024,
											"end": 2073,
											"name": "DUP2",
											"source": 18
										},
										{
											"begin": 2024,
											"end": 2073,
											"name": "JUMP",
											"source": 18,
											"value": "[out]"
										},
										{
											"begin": 7,
											"end": 130,
											"name": "tag",
											"source": 19,
											"value": "8"
										},
										{
											"begin": 7,
											"end": 130,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 100,
											"end": 123,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "10"
										},
										{
											"begin": 117,
											"end": 122,
											"name": "DUP2",
											"source": 19
										},
										{
											"begin": 100,
											"end": 123,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "11"
										},
										{
											"begin": 100,
											"end": 123,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 100,
											"end": 123,
											"name": "tag",
											"source": 19,
											"value": "10"
										},
										{
											"begin": 100,
											"end": 123,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 95,
											"end": 98,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 88,
											"end": 124,
											"name": "MSTORE",
											"source": 19
										},
										{
											"begin": 78,
											"end": 130,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 78,
											"end": 130,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 78,
											"end": 130,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 136,
											"end": 370,
											"name": "tag",
											"source": 19,
											"value": "6"
										},
										{
											"begin": 136,
											"end": 370,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 235,
											"end": 239,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 273,
											"end": 275,
											"name": "PUSH",
											"source": 19,
											"value": "20"
										},
										{
											"begin": 262,
											"end": 271,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 258,
											"end": 276,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 250,
											"end": 276,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 250,
											"end": 276,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 286,
											"end": 363,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "13"
										},
										{
											"begin": 360,
											"end": 361,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 349,
											"end": 358,
											"name": "DUP4",
											"source": 19
										},
										{
											"begin": 345,
											"end": 362,
											"name": "ADD",
											"source": 19
										},
										{
											"begin": 336,
											"end": 342,
											"name": "DUP5",
											"source": 19
										},
										{
											"begin": 286,
											"end": 363,
											"name": "PUSH [tag]",
											"source": 19,
											"value": "8"
										},
										{
											"begin": 286,
											"end": 363,
											"name": "JUMP",
											"source": 19,
											"value": "[in]"
										},
										{
											"begin": 286,
											"end": 363,
											"name": "tag",
											"source": 19,
											"value": "13"
										},
										{
											"begin": 286,
											"end": 363,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 240,
											"end": 370,
											"name": "SWAP3",
											"source": 19
										},
										{
											"begin": 240,
											"end": 370,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 240,
											"end": 370,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 240,
											"end": 370,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 240,
											"end": 370,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										},
										{
											"begin": 376,
											"end": 467,
											"name": "tag",
											"source": 19,
											"value": "11"
										},
										{
											"begin": 376,
											"end": 467,
											"name": "JUMPDEST",
											"source": 19
										},
										{
											"begin": 412,
											"end": 419,
											"name": "PUSH",
											"source": 19,
											"value": "0"
										},
										{
											"begin": 452,
											"end": 460,
											"name": "PUSH",
											"source": 19,
											"value": "FFFFFF"
										},
										{
											"begin": 445,
											"end": 450,
											"name": "DUP3",
											"source": 19
										},
										{
											"begin": 441,
											"end": 461,
											"name": "AND",
											"source": 19
										},
										{
											"begin": 430,
											"end": 461,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 430,
											"end": 461,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 420,
											"end": 467,
											"name": "SWAP2",
											"source": 19
										},
										{
											"begin": 420,
											"end": 467,
											"name": "SWAP1",
											"source": 19
										},
										{
											"begin": 420,
											"end": 467,
											"name": "POP",
											"source": 19
										},
										{
											"begin": 420,
											"end": 467,
											"name": "JUMP",
											"source": 19,
											"value": "[out]"
										}
									]
								}
							}
						},
						"methodIdentifiers": {
							"MAX_CARDINALITY()": "8200d873"
						}
					},
					"metadata": "{\"compiler\":{\"version\":\"0.8.6+commit.11564f7e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"MAX_CARDINALITY\",\"outputs\":[{\"internalType\":\"uint24\",\"name\":\"\",\"type\":\"uint24\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"PoolTogether Inc Team\",\"details\":\"Time-Weighted Average Balance Library for ERC20 tokens.\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"MAX_CARDINALITY\":{\"details\":\"The user Account.AccountDetails.cardinality parameter can NOT exceed the max cardinality variable. Preventing \\\"corrupted\\\" ring buffer lookup pointers and new observation checkpoints. The MAX_CARDINALITY in fact guarantees at least 7.4 years of records: If 14 = block time in seconds (2**24) * 14 = 234881024 seconds of history 234881024 / (365 * 24 * 60 * 60) ~= 7.44 years\"}},\"title\":\"PoolTogether V4 TwabLib (Library)\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"MAX_CARDINALITY()\":{\"notice\":\"Sets max ring buffer length in the Account.twabs Observation list. As users transfer/mint/burn tickets new Observation checkpoints are recorded. The current max cardinality guarantees a seven year minimum, of accurate historical lookups with current estimates of 1 new block every 15 seconds - assuming each block contains a transfer to trigger an observation write to storage.\"}},\"notice\":\"This TwabLib adds on-chain historical lookups to a user(s) time-weighted average balance. Each user is mapped to an Account struct containing the TWAB history (ring buffer) and ring buffer parameters. Every token.transfer() creates a new TWAB checkpoint. The new TWAB checkpoint is stored in the circular ring buffer, as either a new checkpoint or rewriting a previous checkpoint with new parameters. The TwabLib (using existing blocktimes of 1block/15sec) guarantees minimum 7.4 years of search history.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/TwabLib.sol\":\"TwabLib\"},\"evmVersion\":\"berlin\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x02686c31ccb9ee77a299fa5f47327af5271f251a707a0e24f321957166ff0434\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cb562d8ae1da31249ca0d8553df9f89ef4c3c110a018c4449dde68ae30e51ec1\",\"dweb:/ipfs/QmUwxjtTUYB89ymeV46TZPmTsGnYrKNcgTHk7MQA1MG3hj\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/ExtendedSafeCastLib.sol\":{\"keccak256\":\"0x9dae48760b4f78e5418ea8f44abe51fd40570b3159fac80ff17935b6451dcacd\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://c42ee90f5e36b58e049eb582d20250ab83faebec81f4b4664fe5e2a093f04aba\",\"dweb:/ipfs/QmNmUzXXiR7JYsMRU9qyZNMp6SVmj7UUz8kS2qr5nPTtTM\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/ObservationLib.sol\":{\"keccak256\":\"0x225592b42013fc0af60822e75bc047d53b42a5fcf15f2173cdc3b50bea334b0a\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://3b2023bfcc8fb346a52c519b3667c8bb1b935d16993d68b651ec2b84f61d8f3c\",\"dweb:/ipfs/QmYP7kPZefm4SN4kaJwMNrJq3KyYwfvndXY6XQdxeih646\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/OverflowSafeComparatorLib.sol\":{\"keccak256\":\"0x20630cf89e7b92462946defe979fd0e69fa119841d55886121948ad810778c74\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://2dda66ae7137027e803570a61c0aff2aa5bcf9c430ff068ba10529b1c5dd3d6a\",\"dweb:/ipfs/QmZbWq1fiisXBnj774CTKwZQF3vdgj16EUqGGQPegxLWZq\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/RingBufferLib.sol\":{\"keccak256\":\"0x052e3bf6bfb30f32950e322c853589a8d153cf34f4b1ee292b17eb46f2ae656c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://587d1e6fd1df4bfe26b78a23503e67f171c68bb44afe6582bbcb5726b9a60808\",\"dweb:/ipfs/Qmb2F87Lh23o922Qn8Mt2uZBz8qKoEfwMtwQYCT5L5z5wd\"]},\"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/TwabLib.sol\":{\"keccak256\":\"0x446d8221329601d40464981a50a0e31f3fd48da0ebf0fea646c5a089ccfbdff4\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://d6e67f1f69fa796c388eb4733090445cf7bc859e463f1d3be36973e8cd258528\",\"dweb:/ipfs/QmYA3noFrMP1QwoQEAN3yyXYJvJfTb47uS5hdR6LBxrwjY\"]}},\"version\":1}",
					"storageLayout": {
						"storage": [],
						"types": null
					},
					"userdoc": {
						"kind": "user",
						"methods": {
							"MAX_CARDINALITY()": {
								"notice": "Sets max ring buffer length in the Account.twabs Observation list. As users transfer/mint/burn tickets new Observation checkpoints are recorded. The current max cardinality guarantees a seven year minimum, of accurate historical lookups with current estimates of 1 new block every 15 seconds - assuming each block contains a transfer to trigger an observation write to storage."
							}
						},
						"notice": "This TwabLib adds on-chain historical lookups to a user(s) time-weighted average balance. Each user is mapped to an Account struct containing the TWAB history (ring buffer) and ring buffer parameters. Every token.transfer() creates a new TWAB checkpoint. The new TWAB checkpoint is stored in the circular ring buffer, as either a new checkpoint or rewriting a previous checkpoint with new parameters. The TwabLib (using existing blocktimes of 1block/15sec) guarantees minimum 7.4 years of search history.",
						"version": 1
					}
				}
			}
		},
		"sources": {
			"@openzeppelin/contracts/token/ERC20/IERC20.sol": {
				"ast": {
					"absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
					"exportedSymbols": {
						"IERC20": [
							77
						]
					},
					"id": 78,
					"license": "MIT",
					"nodeType": "SourceUnit",
					"nodes": [
						{
							"id": 1,
							"literals": [
								"solidity",
								"^",
								"0.8",
								".0"
							],
							"nodeType": "PragmaDirective",
							"src": "106:23:0"
						},
						{
							"abstract": false,
							"baseContracts": [],
							"contractDependencies": [],
							"contractKind": "interface",
							"documentation": {
								"id": 2,
								"nodeType": "StructuredDocumentation",
								"src": "131:70:0",
								"text": " @dev Interface of the ERC20 standard as defined in the EIP."
							},
							"fullyImplemented": false,
							"id": 77,
							"linearizedBaseContracts": [
								77
							],
							"name": "IERC20",
							"nameLocation": "212:6:0",
							"nodeType": "ContractDefinition",
							"nodes": [
								{
									"anonymous": false,
									"documentation": {
										"id": 3,
										"nodeType": "StructuredDocumentation",
										"src": "225:158:0",
										"text": " @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero."
									},
									"id": 11,
									"name": "Transfer",
									"nameLocation": "394:8:0",
									"nodeType": "EventDefinition",
									"parameters": {
										"id": 10,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 5,
												"indexed": true,
												"mutability": "mutable",
												"name": "from",
												"nameLocation": "419:4:0",
												"nodeType": "VariableDeclaration",
												"scope": 11,
												"src": "403:20:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 4,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "403:7:0",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 7,
												"indexed": true,
												"mutability": "mutable",
												"name": "to",
												"nameLocation": "441:2:0",
												"nodeType": "VariableDeclaration",
												"scope": 11,
												"src": "425:18:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 6,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "425:7:0",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 9,
												"indexed": false,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "453:5:0",
												"nodeType": "VariableDeclaration",
												"scope": 11,
												"src": "445:13:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 8,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "445:7:0",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "402:57:0"
									},
									"src": "388:72:0"
								},
								{
									"anonymous": false,
									"documentation": {
										"id": 12,
										"nodeType": "StructuredDocumentation",
										"src": "466:148:0",
										"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."
									},
									"id": 20,
									"name": "Approval",
									"nameLocation": "625:8:0",
									"nodeType": "EventDefinition",
									"parameters": {
										"id": 19,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 14,
												"indexed": true,
												"mutability": "mutable",
												"name": "owner",
												"nameLocation": "650:5:0",
												"nodeType": "VariableDeclaration",
												"scope": 20,
												"src": "634:21:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 13,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "634:7:0",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 16,
												"indexed": true,
												"mutability": "mutable",
												"name": "spender",
												"nameLocation": "673:7:0",
												"nodeType": "VariableDeclaration",
												"scope": 20,
												"src": "657:23:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 15,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "657:7:0",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 18,
												"indexed": false,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "690:5:0",
												"nodeType": "VariableDeclaration",
												"scope": 20,
												"src": "682:13:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 17,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "682:7:0",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "633:63:0"
									},
									"src": "619:78:0"
								},
								{
									"documentation": {
										"id": 21,
										"nodeType": "StructuredDocumentation",
										"src": "703:66:0",
										"text": " @dev Returns the amount of tokens in existence."
									},
									"functionSelector": "18160ddd",
									"id": 26,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "totalSupply",
									"nameLocation": "783:11:0",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 22,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "794:2:0"
									},
									"returnParameters": {
										"id": 25,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 24,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 26,
												"src": "820:7:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 23,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "820:7:0",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "819:9:0"
									},
									"scope": 77,
									"src": "774:55:0",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 27,
										"nodeType": "StructuredDocumentation",
										"src": "835:72:0",
										"text": " @dev Returns the amount of tokens owned by `account`."
									},
									"functionSelector": "70a08231",
									"id": 34,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "balanceOf",
									"nameLocation": "921:9:0",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 30,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 29,
												"mutability": "mutable",
												"name": "account",
												"nameLocation": "939:7:0",
												"nodeType": "VariableDeclaration",
												"scope": 34,
												"src": "931:15:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 28,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "931:7:0",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "930:17:0"
									},
									"returnParameters": {
										"id": 33,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 32,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 34,
												"src": "971:7:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 31,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "971:7:0",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "970:9:0"
									},
									"scope": 77,
									"src": "912:68:0",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 35,
										"nodeType": "StructuredDocumentation",
										"src": "986:202:0",
										"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": 44,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "transfer",
									"nameLocation": "1202:8:0",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 40,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 37,
												"mutability": "mutable",
												"name": "to",
												"nameLocation": "1219:2:0",
												"nodeType": "VariableDeclaration",
												"scope": 44,
												"src": "1211:10:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 36,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1211:7:0",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 39,
												"mutability": "mutable",
												"name": "amount",
												"nameLocation": "1231:6:0",
												"nodeType": "VariableDeclaration",
												"scope": 44,
												"src": "1223:14:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 38,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1223:7:0",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1210:28:0"
									},
									"returnParameters": {
										"id": 43,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 42,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 44,
												"src": "1257:4:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bool",
													"typeString": "bool"
												},
												"typeName": {
													"id": 41,
													"name": "bool",
													"nodeType": "ElementaryTypeName",
													"src": "1257:4:0",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1256:6:0"
									},
									"scope": 77,
									"src": "1193:70:0",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 45,
										"nodeType": "StructuredDocumentation",
										"src": "1269:264:0",
										"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": 54,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "allowance",
									"nameLocation": "1547:9:0",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 50,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 47,
												"mutability": "mutable",
												"name": "owner",
												"nameLocation": "1565:5:0",
												"nodeType": "VariableDeclaration",
												"scope": 54,
												"src": "1557:13:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 46,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1557:7:0",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 49,
												"mutability": "mutable",
												"name": "spender",
												"nameLocation": "1580:7:0",
												"nodeType": "VariableDeclaration",
												"scope": 54,
												"src": "1572:15:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 48,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1572:7:0",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1556:32:0"
									},
									"returnParameters": {
										"id": 53,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 52,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 54,
												"src": "1612:7:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 51,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1612:7:0",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1611:9:0"
									},
									"scope": 77,
									"src": "1538:83:0",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 55,
										"nodeType": "StructuredDocumentation",
										"src": "1627:642:0",
										"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": 64,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "approve",
									"nameLocation": "2283:7:0",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 60,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 57,
												"mutability": "mutable",
												"name": "spender",
												"nameLocation": "2299:7:0",
												"nodeType": "VariableDeclaration",
												"scope": 64,
												"src": "2291:15:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 56,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "2291:7:0",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 59,
												"mutability": "mutable",
												"name": "amount",
												"nameLocation": "2316:6:0",
												"nodeType": "VariableDeclaration",
												"scope": 64,
												"src": "2308:14:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 58,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "2308:7:0",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2290:33:0"
									},
									"returnParameters": {
										"id": 63,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 62,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 64,
												"src": "2342:4:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bool",
													"typeString": "bool"
												},
												"typeName": {
													"id": 61,
													"name": "bool",
													"nodeType": "ElementaryTypeName",
													"src": "2342:4:0",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2341:6:0"
									},
									"scope": 77,
									"src": "2274:74:0",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 65,
										"nodeType": "StructuredDocumentation",
										"src": "2354:287:0",
										"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": 76,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "transferFrom",
									"nameLocation": "2655:12:0",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 72,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 67,
												"mutability": "mutable",
												"name": "from",
												"nameLocation": "2685:4:0",
												"nodeType": "VariableDeclaration",
												"scope": 76,
												"src": "2677:12:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 66,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "2677:7:0",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 69,
												"mutability": "mutable",
												"name": "to",
												"nameLocation": "2707:2:0",
												"nodeType": "VariableDeclaration",
												"scope": 76,
												"src": "2699:10:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 68,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "2699:7:0",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 71,
												"mutability": "mutable",
												"name": "amount",
												"nameLocation": "2727:6:0",
												"nodeType": "VariableDeclaration",
												"scope": 76,
												"src": "2719:14:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 70,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "2719:7:0",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2667:72:0"
									},
									"returnParameters": {
										"id": 75,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 74,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 76,
												"src": "2758:4:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bool",
													"typeString": "bool"
												},
												"typeName": {
													"id": 73,
													"name": "bool",
													"nodeType": "ElementaryTypeName",
													"src": "2758:4:0",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2757:6:0"
									},
									"scope": 77,
									"src": "2646:118:0",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								}
							],
							"scope": 78,
							"src": "202:2564:0",
							"usedErrors": []
						}
					],
					"src": "106:2661:0"
				},
				"id": 0
			},
			"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol": {
				"ast": {
					"absolutePath": "@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol",
					"exportedSymbols": {
						"IERC20Permit": [
							113
						]
					},
					"id": 114,
					"license": "MIT",
					"nodeType": "SourceUnit",
					"nodes": [
						{
							"id": 79,
							"literals": [
								"solidity",
								"^",
								"0.8",
								".0"
							],
							"nodeType": "PragmaDirective",
							"src": "114:23:1"
						},
						{
							"abstract": false,
							"baseContracts": [],
							"contractDependencies": [],
							"contractKind": "interface",
							"documentation": {
								"id": 80,
								"nodeType": "StructuredDocumentation",
								"src": "139:480:1",
								"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."
							},
							"fullyImplemented": false,
							"id": 113,
							"linearizedBaseContracts": [
								113
							],
							"name": "IERC20Permit",
							"nameLocation": "630:12:1",
							"nodeType": "ContractDefinition",
							"nodes": [
								{
									"documentation": {
										"id": 81,
										"nodeType": "StructuredDocumentation",
										"src": "649:792:1",
										"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]."
									},
									"functionSelector": "d505accf",
									"id": 98,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "permit",
									"nameLocation": "1455:6:1",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 96,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 83,
												"mutability": "mutable",
												"name": "owner",
												"nameLocation": "1479:5:1",
												"nodeType": "VariableDeclaration",
												"scope": 98,
												"src": "1471:13:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 82,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1471:7:1",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 85,
												"mutability": "mutable",
												"name": "spender",
												"nameLocation": "1502:7:1",
												"nodeType": "VariableDeclaration",
												"scope": 98,
												"src": "1494:15:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 84,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1494:7:1",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 87,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "1527:5:1",
												"nodeType": "VariableDeclaration",
												"scope": 98,
												"src": "1519:13:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 86,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1519:7:1",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 89,
												"mutability": "mutable",
												"name": "deadline",
												"nameLocation": "1550:8:1",
												"nodeType": "VariableDeclaration",
												"scope": 98,
												"src": "1542:16:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 88,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1542:7:1",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 91,
												"mutability": "mutable",
												"name": "v",
												"nameLocation": "1574:1:1",
												"nodeType": "VariableDeclaration",
												"scope": 98,
												"src": "1568:7:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint8",
													"typeString": "uint8"
												},
												"typeName": {
													"id": 90,
													"name": "uint8",
													"nodeType": "ElementaryTypeName",
													"src": "1568:5:1",
													"typeDescriptions": {
														"typeIdentifier": "t_uint8",
														"typeString": "uint8"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 93,
												"mutability": "mutable",
												"name": "r",
												"nameLocation": "1593:1:1",
												"nodeType": "VariableDeclaration",
												"scope": 98,
												"src": "1585:9:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes32",
													"typeString": "bytes32"
												},
												"typeName": {
													"id": 92,
													"name": "bytes32",
													"nodeType": "ElementaryTypeName",
													"src": "1585:7:1",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes32",
														"typeString": "bytes32"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 95,
												"mutability": "mutable",
												"name": "s",
												"nameLocation": "1612:1:1",
												"nodeType": "VariableDeclaration",
												"scope": 98,
												"src": "1604:9:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes32",
													"typeString": "bytes32"
												},
												"typeName": {
													"id": 94,
													"name": "bytes32",
													"nodeType": "ElementaryTypeName",
													"src": "1604:7:1",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes32",
														"typeString": "bytes32"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1461:158:1"
									},
									"returnParameters": {
										"id": 97,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "1628:0:1"
									},
									"scope": 113,
									"src": "1446:183:1",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 99,
										"nodeType": "StructuredDocumentation",
										"src": "1635:294:1",
										"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": 106,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "nonces",
									"nameLocation": "1943:6:1",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 102,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 101,
												"mutability": "mutable",
												"name": "owner",
												"nameLocation": "1958:5:1",
												"nodeType": "VariableDeclaration",
												"scope": 106,
												"src": "1950:13:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 100,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1950:7:1",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1949:15:1"
									},
									"returnParameters": {
										"id": 105,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 104,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 106,
												"src": "1988:7:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 103,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1988:7:1",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1987:9:1"
									},
									"scope": 113,
									"src": "1934:63:1",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 107,
										"nodeType": "StructuredDocumentation",
										"src": "2003:128:1",
										"text": " @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}."
									},
									"functionSelector": "3644e515",
									"id": 112,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "DOMAIN_SEPARATOR",
									"nameLocation": "2198:16:1",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 108,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "2214:2:1"
									},
									"returnParameters": {
										"id": 111,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 110,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 112,
												"src": "2240:7:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes32",
													"typeString": "bytes32"
												},
												"typeName": {
													"id": 109,
													"name": "bytes32",
													"nodeType": "ElementaryTypeName",
													"src": "2240:7:1",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes32",
														"typeString": "bytes32"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2239:9:1"
									},
									"scope": 113,
									"src": "2189:60:1",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								}
							],
							"scope": 114,
							"src": "620:1631:1",
							"usedErrors": []
						}
					],
					"src": "114:2138:1"
				},
				"id": 1
			},
			"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": {
				"ast": {
					"absolutePath": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol",
					"exportedSymbols": {
						"Address": [
							689
						],
						"IERC20": [
							77
						],
						"IERC20Permit": [
							113
						],
						"SafeERC20": [
							394
						]
					},
					"id": 395,
					"license": "MIT",
					"nodeType": "SourceUnit",
					"nodes": [
						{
							"id": 115,
							"literals": [
								"solidity",
								"^",
								"0.8",
								".0"
							],
							"nodeType": "PragmaDirective",
							"src": "115:23:2"
						},
						{
							"absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
							"file": "../IERC20.sol",
							"id": 116,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 395,
							"sourceUnit": 78,
							"src": "140:23:2",
							"symbolAliases": [],
							"unitAlias": ""
						},
						{
							"absolutePath": "@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol",
							"file": "../extensions/draft-IERC20Permit.sol",
							"id": 117,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 395,
							"sourceUnit": 114,
							"src": "164:46:2",
							"symbolAliases": [],
							"unitAlias": ""
						},
						{
							"absolutePath": "@openzeppelin/contracts/utils/Address.sol",
							"file": "../../../utils/Address.sol",
							"id": 118,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 395,
							"sourceUnit": 690,
							"src": "211:36:2",
							"symbolAliases": [],
							"unitAlias": ""
						},
						{
							"abstract": false,
							"baseContracts": [],
							"contractDependencies": [],
							"contractKind": "library",
							"documentation": {
								"id": 119,
								"nodeType": "StructuredDocumentation",
								"src": "249:457:2",
								"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": 394,
							"linearizedBaseContracts": [
								394
							],
							"name": "SafeERC20",
							"nameLocation": "715:9:2",
							"nodeType": "ContractDefinition",
							"nodes": [
								{
									"id": 122,
									"libraryName": {
										"id": 120,
										"name": "Address",
										"nodeType": "IdentifierPath",
										"referencedDeclaration": 689,
										"src": "737:7:2"
									},
									"nodeType": "UsingForDirective",
									"src": "731:26:2",
									"typeName": {
										"id": 121,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "749:7:2",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									}
								},
								{
									"body": {
										"id": 144,
										"nodeType": "Block",
										"src": "865:103:2",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"id": 133,
															"name": "token",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 125,
															"src": "895:5:2",
															"typeDescriptions": {
																"typeIdentifier": "t_contract$_IERC20_$77",
																"typeString": "contract IERC20"
															}
														},
														{
															"arguments": [
																{
																	"expression": {
																		"expression": {
																			"id": 136,
																			"name": "token",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 125,
																			"src": "925:5:2",
																			"typeDescriptions": {
																				"typeIdentifier": "t_contract$_IERC20_$77",
																				"typeString": "contract IERC20"
																			}
																		},
																		"id": 137,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "transfer",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 44,
																		"src": "925:14:2",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
																			"typeString": "function (address,uint256) external returns (bool)"
																		}
																	},
																	"id": 138,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "selector",
																	"nodeType": "MemberAccess",
																	"src": "925:23:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_bytes4",
																		"typeString": "bytes4"
																	}
																},
																{
																	"id": 139,
																	"name": "to",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 127,
																	"src": "950:2:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																{
																	"id": 140,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 129,
																	"src": "954:5:2",
																	"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": 134,
																	"name": "abi",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 4294967295,
																	"src": "902:3:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_abi",
																		"typeString": "abi"
																	}
																},
																"id": 135,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "encodeWithSelector",
																"nodeType": "MemberAccess",
																"src": "902:22:2",
																"typeDescriptions": {
																	"typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
																	"typeString": "function (bytes4) pure returns (bytes memory)"
																}
															},
															"id": 141,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "functionCall",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "902:58:2",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_contract$_IERC20_$77",
																"typeString": "contract IERC20"
															},
															{
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														],
														"id": 132,
														"name": "_callOptionalReturn",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 393,
														"src": "875:19:2",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_bytes_memory_ptr_$returns$__$",
															"typeString": "function (contract IERC20,bytes memory)"
														}
													},
													"id": 142,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "875:86:2",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 143,
												"nodeType": "ExpressionStatement",
												"src": "875:86:2"
											}
										]
									},
									"id": 145,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "safeTransfer",
									"nameLocation": "772:12:2",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 130,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 125,
												"mutability": "mutable",
												"name": "token",
												"nameLocation": "801:5:2",
												"nodeType": "VariableDeclaration",
												"scope": 145,
												"src": "794:12:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_IERC20_$77",
													"typeString": "contract IERC20"
												},
												"typeName": {
													"id": 124,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 123,
														"name": "IERC20",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 77,
														"src": "794:6:2"
													},
													"referencedDeclaration": 77,
													"src": "794:6:2",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_IERC20_$77",
														"typeString": "contract IERC20"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 127,
												"mutability": "mutable",
												"name": "to",
												"nameLocation": "824:2:2",
												"nodeType": "VariableDeclaration",
												"scope": 145,
												"src": "816:10:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 126,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "816:7:2",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 129,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "844:5:2",
												"nodeType": "VariableDeclaration",
												"scope": 145,
												"src": "836:13:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 128,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "836:7:2",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "784:71:2"
									},
									"returnParameters": {
										"id": 131,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "865:0:2"
									},
									"scope": 394,
									"src": "763:205:2",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 170,
										"nodeType": "Block",
										"src": "1102:113:2",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"id": 158,
															"name": "token",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 148,
															"src": "1132:5:2",
															"typeDescriptions": {
																"typeIdentifier": "t_contract$_IERC20_$77",
																"typeString": "contract IERC20"
															}
														},
														{
															"arguments": [
																{
																	"expression": {
																		"expression": {
																			"id": 161,
																			"name": "token",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 148,
																			"src": "1162:5:2",
																			"typeDescriptions": {
																				"typeIdentifier": "t_contract$_IERC20_$77",
																				"typeString": "contract IERC20"
																			}
																		},
																		"id": 162,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "transferFrom",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 76,
																		"src": "1162:18:2",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
																			"typeString": "function (address,address,uint256) external returns (bool)"
																		}
																	},
																	"id": 163,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "selector",
																	"nodeType": "MemberAccess",
																	"src": "1162:27:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_bytes4",
																		"typeString": "bytes4"
																	}
																},
																{
																	"id": 164,
																	"name": "from",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 150,
																	"src": "1191:4:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																{
																	"id": 165,
																	"name": "to",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 152,
																	"src": "1197:2:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																{
																	"id": 166,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 154,
																	"src": "1201:5:2",
																	"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": 159,
																	"name": "abi",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 4294967295,
																	"src": "1139:3:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_abi",
																		"typeString": "abi"
																	}
																},
																"id": 160,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "encodeWithSelector",
																"nodeType": "MemberAccess",
																"src": "1139:22:2",
																"typeDescriptions": {
																	"typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
																	"typeString": "function (bytes4) pure returns (bytes memory)"
																}
															},
															"id": 167,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "functionCall",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "1139:68:2",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_contract$_IERC20_$77",
																"typeString": "contract IERC20"
															},
															{
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														],
														"id": 157,
														"name": "_callOptionalReturn",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 393,
														"src": "1112:19:2",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_bytes_memory_ptr_$returns$__$",
															"typeString": "function (contract IERC20,bytes memory)"
														}
													},
													"id": 168,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "1112:96:2",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 169,
												"nodeType": "ExpressionStatement",
												"src": "1112:96:2"
											}
										]
									},
									"id": 171,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "safeTransferFrom",
									"nameLocation": "983:16:2",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 155,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 148,
												"mutability": "mutable",
												"name": "token",
												"nameLocation": "1016:5:2",
												"nodeType": "VariableDeclaration",
												"scope": 171,
												"src": "1009:12:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_IERC20_$77",
													"typeString": "contract IERC20"
												},
												"typeName": {
													"id": 147,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 146,
														"name": "IERC20",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 77,
														"src": "1009:6:2"
													},
													"referencedDeclaration": 77,
													"src": "1009:6:2",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_IERC20_$77",
														"typeString": "contract IERC20"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 150,
												"mutability": "mutable",
												"name": "from",
												"nameLocation": "1039:4:2",
												"nodeType": "VariableDeclaration",
												"scope": 171,
												"src": "1031:12:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 149,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1031:7:2",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 152,
												"mutability": "mutable",
												"name": "to",
												"nameLocation": "1061:2:2",
												"nodeType": "VariableDeclaration",
												"scope": 171,
												"src": "1053:10:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 151,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1053:7:2",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 154,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "1081:5:2",
												"nodeType": "VariableDeclaration",
												"scope": 171,
												"src": "1073:13:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 153,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1073:7:2",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "999:93:2"
									},
									"returnParameters": {
										"id": 156,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "1102:0:2"
									},
									"scope": 394,
									"src": "974:241:2",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 214,
										"nodeType": "Block",
										"src": "1581:497:2",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															"id": 198,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"components": [
																	{
																		"commonType": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		},
																		"id": 185,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": false,
																		"lValueRequested": false,
																		"leftExpression": {
																			"id": 183,
																			"name": "value",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 179,
																			"src": "1830:5:2",
																			"typeDescriptions": {
																				"typeIdentifier": "t_uint256",
																				"typeString": "uint256"
																			}
																		},
																		"nodeType": "BinaryOperation",
																		"operator": "==",
																		"rightExpression": {
																			"hexValue": "30",
																			"id": 184,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"kind": "number",
																			"lValueRequested": false,
																			"nodeType": "Literal",
																			"src": "1839:1:2",
																			"typeDescriptions": {
																				"typeIdentifier": "t_rational_0_by_1",
																				"typeString": "int_const 0"
																			},
																			"value": "0"
																		},
																		"src": "1830:10:2",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bool",
																			"typeString": "bool"
																		}
																	}
																],
																"id": 186,
																"isConstant": false,
																"isInlineArray": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"nodeType": "TupleExpression",
																"src": "1829:12:2",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "||",
															"rightExpression": {
																"components": [
																	{
																		"commonType": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		},
																		"id": 196,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": false,
																		"lValueRequested": false,
																		"leftExpression": {
																			"arguments": [
																				{
																					"arguments": [
																						{
																							"id": 191,
																							"name": "this",
																							"nodeType": "Identifier",
																							"overloadedDeclarations": [],
																							"referencedDeclaration": 4294967268,
																							"src": "1870:4:2",
																							"typeDescriptions": {
																								"typeIdentifier": "t_contract$_SafeERC20_$394",
																								"typeString": "library SafeERC20"
																							}
																						}
																					],
																					"expression": {
																						"argumentTypes": [
																							{
																								"typeIdentifier": "t_contract$_SafeERC20_$394",
																								"typeString": "library SafeERC20"
																							}
																						],
																						"id": 190,
																						"isConstant": false,
																						"isLValue": false,
																						"isPure": true,
																						"lValueRequested": false,
																						"nodeType": "ElementaryTypeNameExpression",
																						"src": "1862:7:2",
																						"typeDescriptions": {
																							"typeIdentifier": "t_type$_t_address_$",
																							"typeString": "type(address)"
																						},
																						"typeName": {
																							"id": 189,
																							"name": "address",
																							"nodeType": "ElementaryTypeName",
																							"src": "1862:7:2",
																							"typeDescriptions": {}
																						}
																					},
																					"id": 192,
																					"isConstant": false,
																					"isLValue": false,
																					"isPure": false,
																					"kind": "typeConversion",
																					"lValueRequested": false,
																					"names": [],
																					"nodeType": "FunctionCall",
																					"src": "1862:13:2",
																					"tryCall": false,
																					"typeDescriptions": {
																						"typeIdentifier": "t_address",
																						"typeString": "address"
																					}
																				},
																				{
																					"id": 193,
																					"name": "spender",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 177,
																					"src": "1877:7:2",
																					"typeDescriptions": {
																						"typeIdentifier": "t_address",
																						"typeString": "address"
																					}
																				}
																			],
																			"expression": {
																				"argumentTypes": [
																					{
																						"typeIdentifier": "t_address",
																						"typeString": "address"
																					},
																					{
																						"typeIdentifier": "t_address",
																						"typeString": "address"
																					}
																				],
																				"expression": {
																					"id": 187,
																					"name": "token",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 175,
																					"src": "1846:5:2",
																					"typeDescriptions": {
																						"typeIdentifier": "t_contract$_IERC20_$77",
																						"typeString": "contract IERC20"
																					}
																				},
																				"id": 188,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": false,
																				"lValueRequested": false,
																				"memberName": "allowance",
																				"nodeType": "MemberAccess",
																				"referencedDeclaration": 54,
																				"src": "1846:15:2",
																				"typeDescriptions": {
																					"typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
																					"typeString": "function (address,address) view external returns (uint256)"
																				}
																			},
																			"id": 194,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": false,
																			"kind": "functionCall",
																			"lValueRequested": false,
																			"names": [],
																			"nodeType": "FunctionCall",
																			"src": "1846:39:2",
																			"tryCall": false,
																			"typeDescriptions": {
																				"typeIdentifier": "t_uint256",
																				"typeString": "uint256"
																			}
																		},
																		"nodeType": "BinaryOperation",
																		"operator": "==",
																		"rightExpression": {
																			"hexValue": "30",
																			"id": 195,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"kind": "number",
																			"lValueRequested": false,
																			"nodeType": "Literal",
																			"src": "1889:1:2",
																			"typeDescriptions": {
																				"typeIdentifier": "t_rational_0_by_1",
																				"typeString": "int_const 0"
																			},
																			"value": "0"
																		},
																		"src": "1846:44:2",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bool",
																			"typeString": "bool"
																		}
																	}
																],
																"id": 197,
																"isConstant": false,
																"isInlineArray": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"nodeType": "TupleExpression",
																"src": "1845:46:2",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"src": "1829:62:2",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365",
															"id": 199,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "1905:56:2",
															"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": 182,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "1808:7:2",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 200,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "1808:163:2",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 201,
												"nodeType": "ExpressionStatement",
												"src": "1808:163:2"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 203,
															"name": "token",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 175,
															"src": "2001:5:2",
															"typeDescriptions": {
																"typeIdentifier": "t_contract$_IERC20_$77",
																"typeString": "contract IERC20"
															}
														},
														{
															"arguments": [
																{
																	"expression": {
																		"expression": {
																			"id": 206,
																			"name": "token",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 175,
																			"src": "2031:5:2",
																			"typeDescriptions": {
																				"typeIdentifier": "t_contract$_IERC20_$77",
																				"typeString": "contract IERC20"
																			}
																		},
																		"id": 207,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "approve",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 64,
																		"src": "2031:13:2",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
																			"typeString": "function (address,uint256) external returns (bool)"
																		}
																	},
																	"id": 208,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "selector",
																	"nodeType": "MemberAccess",
																	"src": "2031:22:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_bytes4",
																		"typeString": "bytes4"
																	}
																},
																{
																	"id": 209,
																	"name": "spender",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 177,
																	"src": "2055:7:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																{
																	"id": 210,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 179,
																	"src": "2064:5:2",
																	"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": 204,
																	"name": "abi",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 4294967295,
																	"src": "2008:3:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_abi",
																		"typeString": "abi"
																	}
																},
																"id": 205,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "encodeWithSelector",
																"nodeType": "MemberAccess",
																"src": "2008:22:2",
																"typeDescriptions": {
																	"typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
																	"typeString": "function (bytes4) pure returns (bytes memory)"
																}
															},
															"id": 211,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "functionCall",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "2008:62:2",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_contract$_IERC20_$77",
																"typeString": "contract IERC20"
															},
															{
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														],
														"id": 202,
														"name": "_callOptionalReturn",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 393,
														"src": "1981:19:2",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_bytes_memory_ptr_$returns$__$",
															"typeString": "function (contract IERC20,bytes memory)"
														}
													},
													"id": 212,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "1981:90:2",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 213,
												"nodeType": "ExpressionStatement",
												"src": "1981:90:2"
											}
										]
									},
									"documentation": {
										"id": 172,
										"nodeType": "StructuredDocumentation",
										"src": "1221:249:2",
										"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": 215,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "safeApprove",
									"nameLocation": "1484:11:2",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 180,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 175,
												"mutability": "mutable",
												"name": "token",
												"nameLocation": "1512:5:2",
												"nodeType": "VariableDeclaration",
												"scope": 215,
												"src": "1505:12:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_IERC20_$77",
													"typeString": "contract IERC20"
												},
												"typeName": {
													"id": 174,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 173,
														"name": "IERC20",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 77,
														"src": "1505:6:2"
													},
													"referencedDeclaration": 77,
													"src": "1505:6:2",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_IERC20_$77",
														"typeString": "contract IERC20"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 177,
												"mutability": "mutable",
												"name": "spender",
												"nameLocation": "1535:7:2",
												"nodeType": "VariableDeclaration",
												"scope": 215,
												"src": "1527:15:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 176,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1527:7:2",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 179,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "1560:5:2",
												"nodeType": "VariableDeclaration",
												"scope": 215,
												"src": "1552:13:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 178,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1552:7:2",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1495:76:2"
									},
									"returnParameters": {
										"id": 181,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "1581:0:2"
									},
									"scope": 394,
									"src": "1475:603:2",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 250,
										"nodeType": "Block",
										"src": "2200:194:2",
										"statements": [
											{
												"assignments": [
													226
												],
												"declarations": [
													{
														"constant": false,
														"id": 226,
														"mutability": "mutable",
														"name": "newAllowance",
														"nameLocation": "2218:12:2",
														"nodeType": "VariableDeclaration",
														"scope": 250,
														"src": "2210:20:2",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 225,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "2210:7:2",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 237,
												"initialValue": {
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 236,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"arguments": [
															{
																"arguments": [
																	{
																		"id": 231,
																		"name": "this",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967268,
																		"src": "2257:4:2",
																		"typeDescriptions": {
																			"typeIdentifier": "t_contract$_SafeERC20_$394",
																			"typeString": "library SafeERC20"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_contract$_SafeERC20_$394",
																			"typeString": "library SafeERC20"
																		}
																	],
																	"id": 230,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"nodeType": "ElementaryTypeNameExpression",
																	"src": "2249:7:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_type$_t_address_$",
																		"typeString": "type(address)"
																	},
																	"typeName": {
																		"id": 229,
																		"name": "address",
																		"nodeType": "ElementaryTypeName",
																		"src": "2249:7:2",
																		"typeDescriptions": {}
																	}
																},
																"id": 232,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "typeConversion",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "2249:13:2",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															{
																"id": 233,
																"name": "spender",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 220,
																"src": "2264:7:2",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															}
														],
														"expression": {
															"argumentTypes": [
																{
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																},
																{
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															],
															"expression": {
																"id": 227,
																"name": "token",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 218,
																"src": "2233:5:2",
																"typeDescriptions": {
																	"typeIdentifier": "t_contract$_IERC20_$77",
																	"typeString": "contract IERC20"
																}
															},
															"id": 228,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "allowance",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 54,
															"src": "2233:15:2",
															"typeDescriptions": {
																"typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
																"typeString": "function (address,address) view external returns (uint256)"
															}
														},
														"id": 234,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"kind": "functionCall",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "2233:39:2",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "+",
													"rightExpression": {
														"id": 235,
														"name": "value",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 222,
														"src": "2275:5:2",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"src": "2233:47:2",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "2210:70:2"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 239,
															"name": "token",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 218,
															"src": "2310:5:2",
															"typeDescriptions": {
																"typeIdentifier": "t_contract$_IERC20_$77",
																"typeString": "contract IERC20"
															}
														},
														{
															"arguments": [
																{
																	"expression": {
																		"expression": {
																			"id": 242,
																			"name": "token",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 218,
																			"src": "2340:5:2",
																			"typeDescriptions": {
																				"typeIdentifier": "t_contract$_IERC20_$77",
																				"typeString": "contract IERC20"
																			}
																		},
																		"id": 243,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "approve",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 64,
																		"src": "2340:13:2",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
																			"typeString": "function (address,uint256) external returns (bool)"
																		}
																	},
																	"id": 244,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "selector",
																	"nodeType": "MemberAccess",
																	"src": "2340:22:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_bytes4",
																		"typeString": "bytes4"
																	}
																},
																{
																	"id": 245,
																	"name": "spender",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 220,
																	"src": "2364:7:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																{
																	"id": 246,
																	"name": "newAllowance",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 226,
																	"src": "2373:12:2",
																	"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": 240,
																	"name": "abi",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 4294967295,
																	"src": "2317:3:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_abi",
																		"typeString": "abi"
																	}
																},
																"id": 241,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "encodeWithSelector",
																"nodeType": "MemberAccess",
																"src": "2317:22:2",
																"typeDescriptions": {
																	"typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
																	"typeString": "function (bytes4) pure returns (bytes memory)"
																}
															},
															"id": 247,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "functionCall",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "2317:69:2",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_contract$_IERC20_$77",
																"typeString": "contract IERC20"
															},
															{
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														],
														"id": 238,
														"name": "_callOptionalReturn",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 393,
														"src": "2290:19:2",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_bytes_memory_ptr_$returns$__$",
															"typeString": "function (contract IERC20,bytes memory)"
														}
													},
													"id": 248,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "2290:97:2",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 249,
												"nodeType": "ExpressionStatement",
												"src": "2290:97:2"
											}
										]
									},
									"id": 251,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "safeIncreaseAllowance",
									"nameLocation": "2093:21:2",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 223,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 218,
												"mutability": "mutable",
												"name": "token",
												"nameLocation": "2131:5:2",
												"nodeType": "VariableDeclaration",
												"scope": 251,
												"src": "2124:12:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_IERC20_$77",
													"typeString": "contract IERC20"
												},
												"typeName": {
													"id": 217,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 216,
														"name": "IERC20",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 77,
														"src": "2124:6:2"
													},
													"referencedDeclaration": 77,
													"src": "2124:6:2",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_IERC20_$77",
														"typeString": "contract IERC20"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 220,
												"mutability": "mutable",
												"name": "spender",
												"nameLocation": "2154:7:2",
												"nodeType": "VariableDeclaration",
												"scope": 251,
												"src": "2146:15:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 219,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "2146:7:2",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 222,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "2179:5:2",
												"nodeType": "VariableDeclaration",
												"scope": 251,
												"src": "2171:13:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 221,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "2171:7:2",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2114:76:2"
									},
									"returnParameters": {
										"id": 224,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "2200:0:2"
									},
									"scope": 394,
									"src": "2084:310:2",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 298,
										"nodeType": "Block",
										"src": "2516:370:2",
										"statements": [
											{
												"id": 297,
												"nodeType": "UncheckedBlock",
												"src": "2526:354:2",
												"statements": [
													{
														"assignments": [
															262
														],
														"declarations": [
															{
																"constant": false,
																"id": 262,
																"mutability": "mutable",
																"name": "oldAllowance",
																"nameLocation": "2558:12:2",
																"nodeType": "VariableDeclaration",
																"scope": 297,
																"src": "2550:20:2",
																"stateVariable": false,
																"storageLocation": "default",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																},
																"typeName": {
																	"id": 261,
																	"name": "uint256",
																	"nodeType": "ElementaryTypeName",
																	"src": "2550:7:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"visibility": "internal"
															}
														],
														"id": 271,
														"initialValue": {
															"arguments": [
																{
																	"arguments": [
																		{
																			"id": 267,
																			"name": "this",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967268,
																			"src": "2597:4:2",
																			"typeDescriptions": {
																				"typeIdentifier": "t_contract$_SafeERC20_$394",
																				"typeString": "library SafeERC20"
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_contract$_SafeERC20_$394",
																				"typeString": "library SafeERC20"
																			}
																		],
																		"id": 266,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"lValueRequested": false,
																		"nodeType": "ElementaryTypeNameExpression",
																		"src": "2589:7:2",
																		"typeDescriptions": {
																			"typeIdentifier": "t_type$_t_address_$",
																			"typeString": "type(address)"
																		},
																		"typeName": {
																			"id": 265,
																			"name": "address",
																			"nodeType": "ElementaryTypeName",
																			"src": "2589:7:2",
																			"typeDescriptions": {}
																		}
																	},
																	"id": 268,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"kind": "typeConversion",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "2589:13:2",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																{
																	"id": 269,
																	"name": "spender",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 256,
																	"src": "2604:7:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																}
															],
															"expression": {
																"argumentTypes": [
																	{
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	},
																	{
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																],
																"expression": {
																	"id": 263,
																	"name": "token",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 254,
																	"src": "2573:5:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_contract$_IERC20_$77",
																		"typeString": "contract IERC20"
																	}
																},
																"id": 264,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "allowance",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 54,
																"src": "2573:15:2",
																"typeDescriptions": {
																	"typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
																	"typeString": "function (address,address) view external returns (uint256)"
																}
															},
															"id": 270,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "functionCall",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "2573:39:2",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"nodeType": "VariableDeclarationStatement",
														"src": "2550:62:2"
													},
													{
														"expression": {
															"arguments": [
																{
																	"commonType": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	},
																	"id": 275,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"lValueRequested": false,
																	"leftExpression": {
																		"id": 273,
																		"name": "oldAllowance",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 262,
																		"src": "2634:12:2",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		}
																	},
																	"nodeType": "BinaryOperation",
																	"operator": ">=",
																	"rightExpression": {
																		"id": 274,
																		"name": "value",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 258,
																		"src": "2650:5:2",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		}
																	},
																	"src": "2634:21:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_bool",
																		"typeString": "bool"
																	}
																},
																{
																	"hexValue": "5361666545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f",
																	"id": 276,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "string",
																	"lValueRequested": false,
																	"nodeType": "Literal",
																	"src": "2657:43:2",
																	"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": 272,
																"name": "require",
																"nodeType": "Identifier",
																"overloadedDeclarations": [
																	4294967278,
																	4294967278
																],
																"referencedDeclaration": 4294967278,
																"src": "2626:7:2",
																"typeDescriptions": {
																	"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
																	"typeString": "function (bool,string memory) pure"
																}
															},
															"id": 277,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "functionCall",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "2626:75:2",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_tuple$__$",
																"typeString": "tuple()"
															}
														},
														"id": 278,
														"nodeType": "ExpressionStatement",
														"src": "2626:75:2"
													},
													{
														"assignments": [
															280
														],
														"declarations": [
															{
																"constant": false,
																"id": 280,
																"mutability": "mutable",
																"name": "newAllowance",
																"nameLocation": "2723:12:2",
																"nodeType": "VariableDeclaration",
																"scope": 297,
																"src": "2715:20:2",
																"stateVariable": false,
																"storageLocation": "default",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																},
																"typeName": {
																	"id": 279,
																	"name": "uint256",
																	"nodeType": "ElementaryTypeName",
																	"src": "2715:7:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"visibility": "internal"
															}
														],
														"id": 284,
														"initialValue": {
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 283,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 281,
																"name": "oldAllowance",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 262,
																"src": "2738:12:2",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "-",
															"rightExpression": {
																"id": 282,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 258,
																"src": "2753:5:2",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"src": "2738:20:2",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"nodeType": "VariableDeclarationStatement",
														"src": "2715:43:2"
													},
													{
														"expression": {
															"arguments": [
																{
																	"id": 286,
																	"name": "token",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 254,
																	"src": "2792:5:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_contract$_IERC20_$77",
																		"typeString": "contract IERC20"
																	}
																},
																{
																	"arguments": [
																		{
																			"expression": {
																				"expression": {
																					"id": 289,
																					"name": "token",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 254,
																					"src": "2822:5:2",
																					"typeDescriptions": {
																						"typeIdentifier": "t_contract$_IERC20_$77",
																						"typeString": "contract IERC20"
																					}
																				},
																				"id": 290,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": false,
																				"lValueRequested": false,
																				"memberName": "approve",
																				"nodeType": "MemberAccess",
																				"referencedDeclaration": 64,
																				"src": "2822:13:2",
																				"typeDescriptions": {
																					"typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
																					"typeString": "function (address,uint256) external returns (bool)"
																				}
																			},
																			"id": 291,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": false,
																			"lValueRequested": false,
																			"memberName": "selector",
																			"nodeType": "MemberAccess",
																			"src": "2822:22:2",
																			"typeDescriptions": {
																				"typeIdentifier": "t_bytes4",
																				"typeString": "bytes4"
																			}
																		},
																		{
																			"id": 292,
																			"name": "spender",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 256,
																			"src": "2846:7:2",
																			"typeDescriptions": {
																				"typeIdentifier": "t_address",
																				"typeString": "address"
																			}
																		},
																		{
																			"id": 293,
																			"name": "newAllowance",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 280,
																			"src": "2855:12:2",
																			"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": 287,
																			"name": "abi",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967295,
																			"src": "2799:3:2",
																			"typeDescriptions": {
																				"typeIdentifier": "t_magic_abi",
																				"typeString": "abi"
																			}
																		},
																		"id": 288,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"lValueRequested": false,
																		"memberName": "encodeWithSelector",
																		"nodeType": "MemberAccess",
																		"src": "2799:22:2",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
																			"typeString": "function (bytes4) pure returns (bytes memory)"
																		}
																	},
																	"id": 294,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "2799:69:2",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_bytes_memory_ptr",
																		"typeString": "bytes memory"
																	}
																}
															],
															"expression": {
																"argumentTypes": [
																	{
																		"typeIdentifier": "t_contract$_IERC20_$77",
																		"typeString": "contract IERC20"
																	},
																	{
																		"typeIdentifier": "t_bytes_memory_ptr",
																		"typeString": "bytes memory"
																	}
																],
																"id": 285,
																"name": "_callOptionalReturn",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 393,
																"src": "2772:19:2",
																"typeDescriptions": {
																	"typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_bytes_memory_ptr_$returns$__$",
																	"typeString": "function (contract IERC20,bytes memory)"
																}
															},
															"id": 295,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "functionCall",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "2772:97:2",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_tuple$__$",
																"typeString": "tuple()"
															}
														},
														"id": 296,
														"nodeType": "ExpressionStatement",
														"src": "2772:97:2"
													}
												]
											}
										]
									},
									"id": 299,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "safeDecreaseAllowance",
									"nameLocation": "2409:21:2",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 259,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 254,
												"mutability": "mutable",
												"name": "token",
												"nameLocation": "2447:5:2",
												"nodeType": "VariableDeclaration",
												"scope": 299,
												"src": "2440:12:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_IERC20_$77",
													"typeString": "contract IERC20"
												},
												"typeName": {
													"id": 253,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 252,
														"name": "IERC20",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 77,
														"src": "2440:6:2"
													},
													"referencedDeclaration": 77,
													"src": "2440:6:2",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_IERC20_$77",
														"typeString": "contract IERC20"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 256,
												"mutability": "mutable",
												"name": "spender",
												"nameLocation": "2470:7:2",
												"nodeType": "VariableDeclaration",
												"scope": 299,
												"src": "2462:15:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 255,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "2462:7:2",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 258,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "2495:5:2",
												"nodeType": "VariableDeclaration",
												"scope": 299,
												"src": "2487:13:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 257,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "2487:7:2",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2430:76:2"
									},
									"returnParameters": {
										"id": 260,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "2516:0:2"
									},
									"scope": 394,
									"src": "2400:486:2",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 354,
										"nodeType": "Block",
										"src": "3107:257:2",
										"statements": [
											{
												"assignments": [
													320
												],
												"declarations": [
													{
														"constant": false,
														"id": 320,
														"mutability": "mutable",
														"name": "nonceBefore",
														"nameLocation": "3125:11:2",
														"nodeType": "VariableDeclaration",
														"scope": 354,
														"src": "3117:19:2",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 319,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "3117:7:2",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 325,
												"initialValue": {
													"arguments": [
														{
															"id": 323,
															"name": "owner",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 304,
															"src": "3152:5:2",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														],
														"expression": {
															"id": 321,
															"name": "token",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 302,
															"src": "3139:5:2",
															"typeDescriptions": {
																"typeIdentifier": "t_contract$_IERC20Permit_$113",
																"typeString": "contract IERC20Permit"
															}
														},
														"id": 322,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "nonces",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 106,
														"src": "3139:12:2",
														"typeDescriptions": {
															"typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
															"typeString": "function (address) view external returns (uint256)"
														}
													},
													"id": 324,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "3139:19:2",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "3117:41:2"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 329,
															"name": "owner",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 304,
															"src": "3181:5:2",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 330,
															"name": "spender",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 306,
															"src": "3188:7:2",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 331,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 308,
															"src": "3197:5:2",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														{
															"id": 332,
															"name": "deadline",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 310,
															"src": "3204:8:2",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														{
															"id": 333,
															"name": "v",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 312,
															"src": "3214:1:2",
															"typeDescriptions": {
																"typeIdentifier": "t_uint8",
																"typeString": "uint8"
															}
														},
														{
															"id": 334,
															"name": "r",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 314,
															"src": "3217:1:2",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes32",
																"typeString": "bytes32"
															}
														},
														{
															"id": 335,
															"name": "s",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 316,
															"src": "3220:1:2",
															"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": 326,
															"name": "token",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 302,
															"src": "3168:5:2",
															"typeDescriptions": {
																"typeIdentifier": "t_contract$_IERC20Permit_$113",
																"typeString": "contract IERC20Permit"
															}
														},
														"id": 328,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "permit",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 98,
														"src": "3168:12:2",
														"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": 336,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "3168:54:2",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 337,
												"nodeType": "ExpressionStatement",
												"src": "3168:54:2"
											},
											{
												"assignments": [
													339
												],
												"declarations": [
													{
														"constant": false,
														"id": 339,
														"mutability": "mutable",
														"name": "nonceAfter",
														"nameLocation": "3240:10:2",
														"nodeType": "VariableDeclaration",
														"scope": 354,
														"src": "3232:18:2",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 338,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "3232:7:2",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 344,
												"initialValue": {
													"arguments": [
														{
															"id": 342,
															"name": "owner",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 304,
															"src": "3266:5:2",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														],
														"expression": {
															"id": 340,
															"name": "token",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 302,
															"src": "3253:5:2",
															"typeDescriptions": {
																"typeIdentifier": "t_contract$_IERC20Permit_$113",
																"typeString": "contract IERC20Permit"
															}
														},
														"id": 341,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "nonces",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 106,
														"src": "3253:12:2",
														"typeDescriptions": {
															"typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
															"typeString": "function (address) view external returns (uint256)"
														}
													},
													"id": 343,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "3253:19:2",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "3232:40:2"
											},
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 350,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 346,
																"name": "nonceAfter",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 339,
																"src": "3290:10:2",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "==",
															"rightExpression": {
																"commonType": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																},
																"id": 349,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 347,
																	"name": "nonceBefore",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 320,
																	"src": "3304:11:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "+",
																"rightExpression": {
																	"hexValue": "31",
																	"id": 348,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "number",
																	"lValueRequested": false,
																	"nodeType": "Literal",
																	"src": "3318:1:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_rational_1_by_1",
																		"typeString": "int_const 1"
																	},
																	"value": "1"
																},
																"src": "3304:15:2",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"src": "3290:29:2",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "5361666545524332303a207065726d697420646964206e6f742073756363656564",
															"id": 351,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "3321:35:2",
															"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": 345,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "3282:7:2",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 352,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "3282:75:2",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 353,
												"nodeType": "ExpressionStatement",
												"src": "3282:75:2"
											}
										]
									},
									"id": 355,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "safePermit",
									"nameLocation": "2901:10:2",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 317,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 302,
												"mutability": "mutable",
												"name": "token",
												"nameLocation": "2934:5:2",
												"nodeType": "VariableDeclaration",
												"scope": 355,
												"src": "2921:18:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_IERC20Permit_$113",
													"typeString": "contract IERC20Permit"
												},
												"typeName": {
													"id": 301,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 300,
														"name": "IERC20Permit",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 113,
														"src": "2921:12:2"
													},
													"referencedDeclaration": 113,
													"src": "2921:12:2",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_IERC20Permit_$113",
														"typeString": "contract IERC20Permit"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 304,
												"mutability": "mutable",
												"name": "owner",
												"nameLocation": "2957:5:2",
												"nodeType": "VariableDeclaration",
												"scope": 355,
												"src": "2949:13:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 303,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "2949:7:2",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 306,
												"mutability": "mutable",
												"name": "spender",
												"nameLocation": "2980:7:2",
												"nodeType": "VariableDeclaration",
												"scope": 355,
												"src": "2972:15:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 305,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "2972:7:2",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 308,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "3005:5:2",
												"nodeType": "VariableDeclaration",
												"scope": 355,
												"src": "2997:13:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 307,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "2997:7:2",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 310,
												"mutability": "mutable",
												"name": "deadline",
												"nameLocation": "3028:8:2",
												"nodeType": "VariableDeclaration",
												"scope": 355,
												"src": "3020:16:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 309,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "3020:7:2",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 312,
												"mutability": "mutable",
												"name": "v",
												"nameLocation": "3052:1:2",
												"nodeType": "VariableDeclaration",
												"scope": 355,
												"src": "3046:7:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint8",
													"typeString": "uint8"
												},
												"typeName": {
													"id": 311,
													"name": "uint8",
													"nodeType": "ElementaryTypeName",
													"src": "3046:5:2",
													"typeDescriptions": {
														"typeIdentifier": "t_uint8",
														"typeString": "uint8"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 314,
												"mutability": "mutable",
												"name": "r",
												"nameLocation": "3071:1:2",
												"nodeType": "VariableDeclaration",
												"scope": 355,
												"src": "3063:9:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes32",
													"typeString": "bytes32"
												},
												"typeName": {
													"id": 313,
													"name": "bytes32",
													"nodeType": "ElementaryTypeName",
													"src": "3063:7:2",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes32",
														"typeString": "bytes32"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 316,
												"mutability": "mutable",
												"name": "s",
												"nameLocation": "3090:1:2",
												"nodeType": "VariableDeclaration",
												"scope": 355,
												"src": "3082:9:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes32",
													"typeString": "bytes32"
												},
												"typeName": {
													"id": 315,
													"name": "bytes32",
													"nodeType": "ElementaryTypeName",
													"src": "3082:7:2",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes32",
														"typeString": "bytes32"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2911:186:2"
									},
									"returnParameters": {
										"id": 318,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "3107:0:2"
									},
									"scope": 394,
									"src": "2892:472:2",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 392,
										"nodeType": "Block",
										"src": "3817:636:2",
										"statements": [
											{
												"assignments": [
													365
												],
												"declarations": [
													{
														"constant": false,
														"id": 365,
														"mutability": "mutable",
														"name": "returndata",
														"nameLocation": "4179:10:2",
														"nodeType": "VariableDeclaration",
														"scope": 392,
														"src": "4166:23:2",
														"stateVariable": false,
														"storageLocation": "memory",
														"typeDescriptions": {
															"typeIdentifier": "t_bytes_memory_ptr",
															"typeString": "bytes"
														},
														"typeName": {
															"id": 364,
															"name": "bytes",
															"nodeType": "ElementaryTypeName",
															"src": "4166:5:2",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_storage_ptr",
																"typeString": "bytes"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 374,
												"initialValue": {
													"arguments": [
														{
															"id": 371,
															"name": "data",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 361,
															"src": "4220:4:2",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														},
														{
															"hexValue": "5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564",
															"id": 372,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "4226:34:2",
															"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": 368,
																	"name": "token",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 359,
																	"src": "4200:5:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_contract$_IERC20_$77",
																		"typeString": "contract IERC20"
																	}
																}
															],
															"expression": {
																"argumentTypes": [
																	{
																		"typeIdentifier": "t_contract$_IERC20_$77",
																		"typeString": "contract IERC20"
																	}
																],
																"id": 367,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"nodeType": "ElementaryTypeNameExpression",
																"src": "4192:7:2",
																"typeDescriptions": {
																	"typeIdentifier": "t_type$_t_address_$",
																	"typeString": "type(address)"
																},
																"typeName": {
																	"id": 366,
																	"name": "address",
																	"nodeType": "ElementaryTypeName",
																	"src": "4192:7:2",
																	"typeDescriptions": {}
																}
															},
															"id": 369,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "typeConversion",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "4192:14:2",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														"id": 370,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "functionCall",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 483,
														"src": "4192:27:2",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_address_$",
															"typeString": "function (address,bytes memory,string memory) returns (bytes memory)"
														}
													},
													"id": 373,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "4192:69:2",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_memory_ptr",
														"typeString": "bytes memory"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "4166:95:2"
											},
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 378,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"expression": {
															"id": 375,
															"name": "returndata",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 365,
															"src": "4275:10:2",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														},
														"id": 376,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "length",
														"nodeType": "MemberAccess",
														"src": "4275:17:2",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": ">",
													"rightExpression": {
														"hexValue": "30",
														"id": 377,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "number",
														"lValueRequested": false,
														"nodeType": "Literal",
														"src": "4295:1:2",
														"typeDescriptions": {
															"typeIdentifier": "t_rational_0_by_1",
															"typeString": "int_const 0"
														},
														"value": "0"
													},
													"src": "4275:21:2",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 391,
												"nodeType": "IfStatement",
												"src": "4271:176:2",
												"trueBody": {
													"id": 390,
													"nodeType": "Block",
													"src": "4298:149:2",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"id": 382,
																				"name": "returndata",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 365,
																				"src": "4370:10:2",
																				"typeDescriptions": {
																					"typeIdentifier": "t_bytes_memory_ptr",
																					"typeString": "bytes memory"
																				}
																			},
																			{
																				"components": [
																					{
																						"id": 384,
																						"isConstant": false,
																						"isLValue": false,
																						"isPure": true,
																						"lValueRequested": false,
																						"nodeType": "ElementaryTypeNameExpression",
																						"src": "4383:4:2",
																						"typeDescriptions": {
																							"typeIdentifier": "t_type$_t_bool_$",
																							"typeString": "type(bool)"
																						},
																						"typeName": {
																							"id": 383,
																							"name": "bool",
																							"nodeType": "ElementaryTypeName",
																							"src": "4383:4:2",
																							"typeDescriptions": {}
																						}
																					}
																				],
																				"id": 385,
																				"isConstant": false,
																				"isInlineArray": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "TupleExpression",
																				"src": "4382:6:2",
																				"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": 380,
																				"name": "abi",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 4294967295,
																				"src": "4359:3:2",
																				"typeDescriptions": {
																					"typeIdentifier": "t_magic_abi",
																					"typeString": "abi"
																				}
																			},
																			"id": 381,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"memberName": "decode",
																			"nodeType": "MemberAccess",
																			"src": "4359:10:2",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 386,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": false,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "4359:30:2",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_bool",
																			"typeString": "bool"
																		}
																	},
																	{
																		"hexValue": "5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564",
																		"id": 387,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "string",
																		"lValueRequested": false,
																		"nodeType": "Literal",
																		"src": "4391:44:2",
																		"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": 379,
																	"name": "require",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [
																		4294967278,
																		4294967278
																	],
																	"referencedDeclaration": 4294967278,
																	"src": "4351:7:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
																		"typeString": "function (bool,string memory) pure"
																	}
																},
																"id": 388,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "4351:85:2",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_tuple$__$",
																	"typeString": "tuple()"
																}
															},
															"id": 389,
															"nodeType": "ExpressionStatement",
															"src": "4351:85:2"
														}
													]
												}
											}
										]
									},
									"documentation": {
										"id": 356,
										"nodeType": "StructuredDocumentation",
										"src": "3370:372:2",
										"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": 393,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "_callOptionalReturn",
									"nameLocation": "3756:19:2",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 362,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 359,
												"mutability": "mutable",
												"name": "token",
												"nameLocation": "3783:5:2",
												"nodeType": "VariableDeclaration",
												"scope": 393,
												"src": "3776:12:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_IERC20_$77",
													"typeString": "contract IERC20"
												},
												"typeName": {
													"id": 358,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 357,
														"name": "IERC20",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 77,
														"src": "3776:6:2"
													},
													"referencedDeclaration": 77,
													"src": "3776:6:2",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_IERC20_$77",
														"typeString": "contract IERC20"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 361,
												"mutability": "mutable",
												"name": "data",
												"nameLocation": "3803:4:2",
												"nodeType": "VariableDeclaration",
												"scope": 393,
												"src": "3790:17:2",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 360,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "3790:5:2",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "3775:33:2"
									},
									"returnParameters": {
										"id": 363,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "3817:0:2"
									},
									"scope": 394,
									"src": "3747:706:2",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "private"
								}
							],
							"scope": 395,
							"src": "707:3748:2",
							"usedErrors": []
						}
					],
					"src": "115:4341:2"
				},
				"id": 2
			},
			"@openzeppelin/contracts/utils/Address.sol": {
				"ast": {
					"absolutePath": "@openzeppelin/contracts/utils/Address.sol",
					"exportedSymbols": {
						"Address": [
							689
						]
					},
					"id": 690,
					"license": "MIT",
					"nodeType": "SourceUnit",
					"nodes": [
						{
							"id": 396,
							"literals": [
								"solidity",
								"^",
								"0.8",
								".1"
							],
							"nodeType": "PragmaDirective",
							"src": "101:23:3"
						},
						{
							"abstract": false,
							"baseContracts": [],
							"contractDependencies": [],
							"contractKind": "library",
							"documentation": {
								"id": 397,
								"nodeType": "StructuredDocumentation",
								"src": "126:67:3",
								"text": " @dev Collection of functions related to the address type"
							},
							"fullyImplemented": true,
							"id": 689,
							"linearizedBaseContracts": [
								689
							],
							"name": "Address",
							"nameLocation": "202:7:3",
							"nodeType": "ContractDefinition",
							"nodes": [
								{
									"body": {
										"id": 411,
										"nodeType": "Block",
										"src": "1241:254:3",
										"statements": [
											{
												"expression": {
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 409,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"expression": {
															"expression": {
																"id": 405,
																"name": "account",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 400,
																"src": "1465:7:3",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"id": 406,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "code",
															"nodeType": "MemberAccess",
															"src": "1465:12:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														},
														"id": 407,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "length",
														"nodeType": "MemberAccess",
														"src": "1465:19:3",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": ">",
													"rightExpression": {
														"hexValue": "30",
														"id": 408,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "number",
														"lValueRequested": false,
														"nodeType": "Literal",
														"src": "1487:1:3",
														"typeDescriptions": {
															"typeIdentifier": "t_rational_0_by_1",
															"typeString": "int_const 0"
														},
														"value": "0"
													},
													"src": "1465:23:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"functionReturnParameters": 404,
												"id": 410,
												"nodeType": "Return",
												"src": "1458:30:3"
											}
										]
									},
									"documentation": {
										"id": 398,
										"nodeType": "StructuredDocumentation",
										"src": "216:954:3",
										"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": 412,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "isContract",
									"nameLocation": "1184:10:3",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 401,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 400,
												"mutability": "mutable",
												"name": "account",
												"nameLocation": "1203:7:3",
												"nodeType": "VariableDeclaration",
												"scope": 412,
												"src": "1195:15:3",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 399,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1195:7:3",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1194:17:3"
									},
									"returnParameters": {
										"id": 404,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 403,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 412,
												"src": "1235:4:3",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bool",
													"typeString": "bool"
												},
												"typeName": {
													"id": 402,
													"name": "bool",
													"nodeType": "ElementaryTypeName",
													"src": "1235:4:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1234:6:3"
									},
									"scope": 689,
									"src": "1175:320:3",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 445,
										"nodeType": "Block",
										"src": "2483:241:3",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 427,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 423,
																			"name": "this",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967268,
																			"src": "2509:4:3",
																			"typeDescriptions": {
																				"typeIdentifier": "t_contract$_Address_$689",
																				"typeString": "library Address"
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_contract$_Address_$689",
																				"typeString": "library Address"
																			}
																		],
																		"id": 422,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"lValueRequested": false,
																		"nodeType": "ElementaryTypeNameExpression",
																		"src": "2501:7:3",
																		"typeDescriptions": {
																			"typeIdentifier": "t_type$_t_address_$",
																			"typeString": "type(address)"
																		},
																		"typeName": {
																			"id": 421,
																			"name": "address",
																			"nodeType": "ElementaryTypeName",
																			"src": "2501:7:3",
																			"typeDescriptions": {}
																		}
																	},
																	"id": 424,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"kind": "typeConversion",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "2501:13:3",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																"id": 425,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "balance",
																"nodeType": "MemberAccess",
																"src": "2501:21:3",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": ">=",
															"rightExpression": {
																"id": 426,
																"name": "amount",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 417,
																"src": "2526:6:3",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"src": "2501:31:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "416464726573733a20696e73756666696369656e742062616c616e6365",
															"id": 428,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "2534:31:3",
															"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": 420,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "2493:7:3",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 429,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "2493:73:3",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 430,
												"nodeType": "ExpressionStatement",
												"src": "2493:73:3"
											},
											{
												"assignments": [
													432,
													null
												],
												"declarations": [
													{
														"constant": false,
														"id": 432,
														"mutability": "mutable",
														"name": "success",
														"nameLocation": "2583:7:3",
														"nodeType": "VariableDeclaration",
														"scope": 445,
														"src": "2578:12:3",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_bool",
															"typeString": "bool"
														},
														"typeName": {
															"id": 431,
															"name": "bool",
															"nodeType": "ElementaryTypeName",
															"src": "2578:4:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														"visibility": "internal"
													},
													null
												],
												"id": 439,
												"initialValue": {
													"arguments": [
														{
															"hexValue": "",
															"id": 437,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "2626:2:3",
															"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": 433,
																"name": "recipient",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 415,
																"src": "2596:9:3",
																"typeDescriptions": {
																	"typeIdentifier": "t_address_payable",
																	"typeString": "address payable"
																}
															},
															"id": 434,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "call",
															"nodeType": "MemberAccess",
															"src": "2596:14:3",
															"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": 436,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"names": [
															"value"
														],
														"nodeType": "FunctionCallOptions",
														"options": [
															{
																"id": 435,
																"name": "amount",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 417,
																"src": "2618:6:3",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															}
														],
														"src": "2596:29:3",
														"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": 438,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "2596:33:3",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
														"typeString": "tuple(bool,bytes memory)"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "2577:52:3"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 441,
															"name": "success",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 432,
															"src": "2647:7:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564",
															"id": 442,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "2656:60:3",
															"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": 440,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "2639:7:3",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 443,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "2639:78:3",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 444,
												"nodeType": "ExpressionStatement",
												"src": "2639:78:3"
											}
										]
									},
									"documentation": {
										"id": 413,
										"nodeType": "StructuredDocumentation",
										"src": "1501:906:3",
										"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": 446,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "sendValue",
									"nameLocation": "2421:9:3",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 418,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 415,
												"mutability": "mutable",
												"name": "recipient",
												"nameLocation": "2447:9:3",
												"nodeType": "VariableDeclaration",
												"scope": 446,
												"src": "2431:25:3",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address_payable",
													"typeString": "address payable"
												},
												"typeName": {
													"id": 414,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "2431:15:3",
													"stateMutability": "payable",
													"typeDescriptions": {
														"typeIdentifier": "t_address_payable",
														"typeString": "address payable"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 417,
												"mutability": "mutable",
												"name": "amount",
												"nameLocation": "2466:6:3",
												"nodeType": "VariableDeclaration",
												"scope": 446,
												"src": "2458:14:3",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 416,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "2458:7:3",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2430:43:3"
									},
									"returnParameters": {
										"id": 419,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "2483:0:3"
									},
									"scope": 689,
									"src": "2412:312:3",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 462,
										"nodeType": "Block",
										"src": "3555:84:3",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"id": 457,
															"name": "target",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 449,
															"src": "3585:6:3",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 458,
															"name": "data",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 451,
															"src": "3593:4:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														},
														{
															"hexValue": "416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564",
															"id": 459,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "3599:32:3",
															"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": 456,
														"name": "functionCall",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															463,
															483
														],
														"referencedDeclaration": 483,
														"src": "3572:12:3",
														"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": 460,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "3572:60:3",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_memory_ptr",
														"typeString": "bytes memory"
													}
												},
												"functionReturnParameters": 455,
												"id": 461,
												"nodeType": "Return",
												"src": "3565:67:3"
											}
										]
									},
									"documentation": {
										"id": 447,
										"nodeType": "StructuredDocumentation",
										"src": "2730:731:3",
										"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": 463,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "functionCall",
									"nameLocation": "3475:12:3",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 452,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 449,
												"mutability": "mutable",
												"name": "target",
												"nameLocation": "3496:6:3",
												"nodeType": "VariableDeclaration",
												"scope": 463,
												"src": "3488:14:3",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 448,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "3488:7:3",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 451,
												"mutability": "mutable",
												"name": "data",
												"nameLocation": "3517:4:3",
												"nodeType": "VariableDeclaration",
												"scope": 463,
												"src": "3504:17:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 450,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "3504:5:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "3487:35:3"
									},
									"returnParameters": {
										"id": 455,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 454,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 463,
												"src": "3541:12:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 453,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "3541:5:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "3540:14:3"
									},
									"scope": 689,
									"src": "3466:173:3",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 482,
										"nodeType": "Block",
										"src": "4008:76:3",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"id": 476,
															"name": "target",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 466,
															"src": "4047:6:3",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 477,
															"name": "data",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 468,
															"src": "4055:4:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														},
														{
															"hexValue": "30",
															"id": 478,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "number",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "4061:1:3",
															"typeDescriptions": {
																"typeIdentifier": "t_rational_0_by_1",
																"typeString": "int_const 0"
															},
															"value": "0"
														},
														{
															"id": 479,
															"name": "errorMessage",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 470,
															"src": "4064:12:3",
															"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": 475,
														"name": "functionCallWithValue",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															503,
															553
														],
														"referencedDeclaration": 553,
														"src": "4025:21:3",
														"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": 480,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "4025:52:3",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_memory_ptr",
														"typeString": "bytes memory"
													}
												},
												"functionReturnParameters": 474,
												"id": 481,
												"nodeType": "Return",
												"src": "4018:59:3"
											}
										]
									},
									"documentation": {
										"id": 464,
										"nodeType": "StructuredDocumentation",
										"src": "3645:211:3",
										"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": 483,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "functionCall",
									"nameLocation": "3870:12:3",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 471,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 466,
												"mutability": "mutable",
												"name": "target",
												"nameLocation": "3900:6:3",
												"nodeType": "VariableDeclaration",
												"scope": 483,
												"src": "3892:14:3",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 465,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "3892:7:3",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 468,
												"mutability": "mutable",
												"name": "data",
												"nameLocation": "3929:4:3",
												"nodeType": "VariableDeclaration",
												"scope": 483,
												"src": "3916:17:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 467,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "3916:5:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 470,
												"mutability": "mutable",
												"name": "errorMessage",
												"nameLocation": "3957:12:3",
												"nodeType": "VariableDeclaration",
												"scope": 483,
												"src": "3943:26:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_string_memory_ptr",
													"typeString": "string"
												},
												"typeName": {
													"id": 469,
													"name": "string",
													"nodeType": "ElementaryTypeName",
													"src": "3943:6:3",
													"typeDescriptions": {
														"typeIdentifier": "t_string_storage_ptr",
														"typeString": "string"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "3882:93:3"
									},
									"returnParameters": {
										"id": 474,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 473,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 483,
												"src": "3994:12:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 472,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "3994:5:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "3993:14:3"
									},
									"scope": 689,
									"src": "3861:223:3",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 502,
										"nodeType": "Block",
										"src": "4589:111:3",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"id": 496,
															"name": "target",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 486,
															"src": "4628:6:3",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 497,
															"name": "data",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 488,
															"src": "4636:4:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														},
														{
															"id": 498,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 490,
															"src": "4642:5:3",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														{
															"hexValue": "416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564",
															"id": 499,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "4649:43:3",
															"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": 495,
														"name": "functionCallWithValue",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															503,
															553
														],
														"referencedDeclaration": 553,
														"src": "4606:21:3",
														"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": 500,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "4606:87:3",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_memory_ptr",
														"typeString": "bytes memory"
													}
												},
												"functionReturnParameters": 494,
												"id": 501,
												"nodeType": "Return",
												"src": "4599:94:3"
											}
										]
									},
									"documentation": {
										"id": 484,
										"nodeType": "StructuredDocumentation",
										"src": "4090:351:3",
										"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": 503,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "functionCallWithValue",
									"nameLocation": "4455:21:3",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 491,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 486,
												"mutability": "mutable",
												"name": "target",
												"nameLocation": "4494:6:3",
												"nodeType": "VariableDeclaration",
												"scope": 503,
												"src": "4486:14:3",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 485,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "4486:7:3",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 488,
												"mutability": "mutable",
												"name": "data",
												"nameLocation": "4523:4:3",
												"nodeType": "VariableDeclaration",
												"scope": 503,
												"src": "4510:17:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 487,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "4510:5:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 490,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "4545:5:3",
												"nodeType": "VariableDeclaration",
												"scope": 503,
												"src": "4537:13:3",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 489,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "4537:7:3",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "4476:80:3"
									},
									"returnParameters": {
										"id": 494,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 493,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 503,
												"src": "4575:12:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 492,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "4575:5:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "4574:14:3"
									},
									"scope": 689,
									"src": "4446:254:3",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 552,
										"nodeType": "Block",
										"src": "5127:320:3",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 524,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 520,
																			"name": "this",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967268,
																			"src": "5153:4:3",
																			"typeDescriptions": {
																				"typeIdentifier": "t_contract$_Address_$689",
																				"typeString": "library Address"
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_contract$_Address_$689",
																				"typeString": "library Address"
																			}
																		],
																		"id": 519,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"lValueRequested": false,
																		"nodeType": "ElementaryTypeNameExpression",
																		"src": "5145:7:3",
																		"typeDescriptions": {
																			"typeIdentifier": "t_type$_t_address_$",
																			"typeString": "type(address)"
																		},
																		"typeName": {
																			"id": 518,
																			"name": "address",
																			"nodeType": "ElementaryTypeName",
																			"src": "5145:7:3",
																			"typeDescriptions": {}
																		}
																	},
																	"id": 521,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"kind": "typeConversion",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "5145:13:3",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																"id": 522,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "balance",
																"nodeType": "MemberAccess",
																"src": "5145:21:3",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": ">=",
															"rightExpression": {
																"id": 523,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 510,
																"src": "5170:5:3",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"src": "5145:30:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c",
															"id": 525,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "5177:40:3",
															"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": 517,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "5137:7:3",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 526,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "5137:81:3",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 527,
												"nodeType": "ExpressionStatement",
												"src": "5137:81:3"
											},
											{
												"expression": {
													"arguments": [
														{
															"arguments": [
																{
																	"id": 530,
																	"name": "target",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 506,
																	"src": "5247:6:3",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																}
															],
															"expression": {
																"argumentTypes": [
																	{
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																],
																"id": 529,
																"name": "isContract",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 412,
																"src": "5236:10:3",
																"typeDescriptions": {
																	"typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
																	"typeString": "function (address) view returns (bool)"
																}
															},
															"id": 531,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "functionCall",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "5236:18:3",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374",
															"id": 532,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "5256:31:3",
															"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": 528,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "5228:7:3",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 533,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "5228:60:3",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 534,
												"nodeType": "ExpressionStatement",
												"src": "5228:60:3"
											},
											{
												"assignments": [
													536,
													538
												],
												"declarations": [
													{
														"constant": false,
														"id": 536,
														"mutability": "mutable",
														"name": "success",
														"nameLocation": "5305:7:3",
														"nodeType": "VariableDeclaration",
														"scope": 552,
														"src": "5300:12:3",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_bool",
															"typeString": "bool"
														},
														"typeName": {
															"id": 535,
															"name": "bool",
															"nodeType": "ElementaryTypeName",
															"src": "5300:4:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														"visibility": "internal"
													},
													{
														"constant": false,
														"id": 538,
														"mutability": "mutable",
														"name": "returndata",
														"nameLocation": "5327:10:3",
														"nodeType": "VariableDeclaration",
														"scope": 552,
														"src": "5314:23:3",
														"stateVariable": false,
														"storageLocation": "memory",
														"typeDescriptions": {
															"typeIdentifier": "t_bytes_memory_ptr",
															"typeString": "bytes"
														},
														"typeName": {
															"id": 537,
															"name": "bytes",
															"nodeType": "ElementaryTypeName",
															"src": "5314:5:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_storage_ptr",
																"typeString": "bytes"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 545,
												"initialValue": {
													"arguments": [
														{
															"id": 543,
															"name": "data",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 508,
															"src": "5367:4:3",
															"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": 539,
																"name": "target",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 506,
																"src": "5341:6:3",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"id": 540,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "call",
															"nodeType": "MemberAccess",
															"src": "5341:11:3",
															"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": 542,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"names": [
															"value"
														],
														"nodeType": "FunctionCallOptions",
														"options": [
															{
																"id": 541,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 510,
																"src": "5360:5:3",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															}
														],
														"src": "5341:25:3",
														"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": 544,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "5341:31:3",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
														"typeString": "tuple(bool,bytes memory)"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "5299:73:3"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 547,
															"name": "success",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 536,
															"src": "5406:7:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"id": 548,
															"name": "returndata",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 538,
															"src": "5415:10:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														},
														{
															"id": 549,
															"name": "errorMessage",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 512,
															"src": "5427:12:3",
															"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": 546,
														"name": "verifyCallResult",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 688,
														"src": "5389:16:3",
														"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": 550,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "5389:51:3",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_memory_ptr",
														"typeString": "bytes memory"
													}
												},
												"functionReturnParameters": 516,
												"id": 551,
												"nodeType": "Return",
												"src": "5382:58:3"
											}
										]
									},
									"documentation": {
										"id": 504,
										"nodeType": "StructuredDocumentation",
										"src": "4706:237:3",
										"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": 553,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "functionCallWithValue",
									"nameLocation": "4957:21:3",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 513,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 506,
												"mutability": "mutable",
												"name": "target",
												"nameLocation": "4996:6:3",
												"nodeType": "VariableDeclaration",
												"scope": 553,
												"src": "4988:14:3",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 505,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "4988:7:3",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 508,
												"mutability": "mutable",
												"name": "data",
												"nameLocation": "5025:4:3",
												"nodeType": "VariableDeclaration",
												"scope": 553,
												"src": "5012:17:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 507,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "5012:5:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 510,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "5047:5:3",
												"nodeType": "VariableDeclaration",
												"scope": 553,
												"src": "5039:13:3",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 509,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "5039:7:3",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 512,
												"mutability": "mutable",
												"name": "errorMessage",
												"nameLocation": "5076:12:3",
												"nodeType": "VariableDeclaration",
												"scope": 553,
												"src": "5062:26:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_string_memory_ptr",
													"typeString": "string"
												},
												"typeName": {
													"id": 511,
													"name": "string",
													"nodeType": "ElementaryTypeName",
													"src": "5062:6:3",
													"typeDescriptions": {
														"typeIdentifier": "t_string_storage_ptr",
														"typeString": "string"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "4978:116:3"
									},
									"returnParameters": {
										"id": 516,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 515,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 553,
												"src": "5113:12:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 514,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "5113:5:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "5112:14:3"
									},
									"scope": 689,
									"src": "4948:499:3",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 569,
										"nodeType": "Block",
										"src": "5724:97:3",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"id": 564,
															"name": "target",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 556,
															"src": "5760:6:3",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 565,
															"name": "data",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 558,
															"src": "5768:4:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														},
														{
															"hexValue": "416464726573733a206c6f772d6c6576656c207374617469632063616c6c206661696c6564",
															"id": 566,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "5774:39:3",
															"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": 563,
														"name": "functionStaticCall",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															570,
															605
														],
														"referencedDeclaration": 605,
														"src": "5741:18:3",
														"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": 567,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "5741:73:3",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_memory_ptr",
														"typeString": "bytes memory"
													}
												},
												"functionReturnParameters": 562,
												"id": 568,
												"nodeType": "Return",
												"src": "5734:80:3"
											}
										]
									},
									"documentation": {
										"id": 554,
										"nodeType": "StructuredDocumentation",
										"src": "5453:166:3",
										"text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"
									},
									"id": 570,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "functionStaticCall",
									"nameLocation": "5633:18:3",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 559,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 556,
												"mutability": "mutable",
												"name": "target",
												"nameLocation": "5660:6:3",
												"nodeType": "VariableDeclaration",
												"scope": 570,
												"src": "5652:14:3",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 555,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "5652:7:3",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 558,
												"mutability": "mutable",
												"name": "data",
												"nameLocation": "5681:4:3",
												"nodeType": "VariableDeclaration",
												"scope": 570,
												"src": "5668:17:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 557,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "5668:5:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "5651:35:3"
									},
									"returnParameters": {
										"id": 562,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 561,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 570,
												"src": "5710:12:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 560,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "5710:5:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "5709:14:3"
									},
									"scope": 689,
									"src": "5624:197:3",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 604,
										"nodeType": "Block",
										"src": "6163:228:3",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"arguments": [
																{
																	"id": 584,
																	"name": "target",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 573,
																	"src": "6192:6:3",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																}
															],
															"expression": {
																"argumentTypes": [
																	{
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																],
																"id": 583,
																"name": "isContract",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 412,
																"src": "6181:10:3",
																"typeDescriptions": {
																	"typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
																	"typeString": "function (address) view returns (bool)"
																}
															},
															"id": 585,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "functionCall",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "6181:18:3",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "416464726573733a207374617469632063616c6c20746f206e6f6e2d636f6e7472616374",
															"id": 586,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "6201:38:3",
															"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": 582,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "6173:7:3",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 587,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "6173:67:3",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 588,
												"nodeType": "ExpressionStatement",
												"src": "6173:67:3"
											},
											{
												"assignments": [
													590,
													592
												],
												"declarations": [
													{
														"constant": false,
														"id": 590,
														"mutability": "mutable",
														"name": "success",
														"nameLocation": "6257:7:3",
														"nodeType": "VariableDeclaration",
														"scope": 604,
														"src": "6252:12:3",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_bool",
															"typeString": "bool"
														},
														"typeName": {
															"id": 589,
															"name": "bool",
															"nodeType": "ElementaryTypeName",
															"src": "6252:4:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														"visibility": "internal"
													},
													{
														"constant": false,
														"id": 592,
														"mutability": "mutable",
														"name": "returndata",
														"nameLocation": "6279:10:3",
														"nodeType": "VariableDeclaration",
														"scope": 604,
														"src": "6266:23:3",
														"stateVariable": false,
														"storageLocation": "memory",
														"typeDescriptions": {
															"typeIdentifier": "t_bytes_memory_ptr",
															"typeString": "bytes"
														},
														"typeName": {
															"id": 591,
															"name": "bytes",
															"nodeType": "ElementaryTypeName",
															"src": "6266:5:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_storage_ptr",
																"typeString": "bytes"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 597,
												"initialValue": {
													"arguments": [
														{
															"id": 595,
															"name": "data",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 575,
															"src": "6311:4:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														],
														"expression": {
															"id": 593,
															"name": "target",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 573,
															"src": "6293:6:3",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														"id": 594,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "staticcall",
														"nodeType": "MemberAccess",
														"src": "6293:17:3",
														"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": 596,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "6293:23:3",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
														"typeString": "tuple(bool,bytes memory)"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "6251:65:3"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 599,
															"name": "success",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 590,
															"src": "6350:7:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"id": 600,
															"name": "returndata",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 592,
															"src": "6359:10:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														},
														{
															"id": 601,
															"name": "errorMessage",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 577,
															"src": "6371:12:3",
															"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": 598,
														"name": "verifyCallResult",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 688,
														"src": "6333:16:3",
														"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": 602,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "6333:51:3",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_memory_ptr",
														"typeString": "bytes memory"
													}
												},
												"functionReturnParameters": 581,
												"id": 603,
												"nodeType": "Return",
												"src": "6326:58:3"
											}
										]
									},
									"documentation": {
										"id": 571,
										"nodeType": "StructuredDocumentation",
										"src": "5827:173:3",
										"text": " @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"
									},
									"id": 605,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "functionStaticCall",
									"nameLocation": "6014:18:3",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 578,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 573,
												"mutability": "mutable",
												"name": "target",
												"nameLocation": "6050:6:3",
												"nodeType": "VariableDeclaration",
												"scope": 605,
												"src": "6042:14:3",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 572,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "6042:7:3",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 575,
												"mutability": "mutable",
												"name": "data",
												"nameLocation": "6079:4:3",
												"nodeType": "VariableDeclaration",
												"scope": 605,
												"src": "6066:17:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 574,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "6066:5:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 577,
												"mutability": "mutable",
												"name": "errorMessage",
												"nameLocation": "6107:12:3",
												"nodeType": "VariableDeclaration",
												"scope": 605,
												"src": "6093:26:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_string_memory_ptr",
													"typeString": "string"
												},
												"typeName": {
													"id": 576,
													"name": "string",
													"nodeType": "ElementaryTypeName",
													"src": "6093:6:3",
													"typeDescriptions": {
														"typeIdentifier": "t_string_storage_ptr",
														"typeString": "string"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "6032:93:3"
									},
									"returnParameters": {
										"id": 581,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 580,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 605,
												"src": "6149:12:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 579,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "6149:5:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "6148:14:3"
									},
									"scope": 689,
									"src": "6005:386:3",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 621,
										"nodeType": "Block",
										"src": "6667:101:3",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"id": 616,
															"name": "target",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 608,
															"src": "6705:6:3",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 617,
															"name": "data",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 610,
															"src": "6713:4:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														},
														{
															"hexValue": "416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564",
															"id": 618,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "6719:41:3",
															"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": 615,
														"name": "functionDelegateCall",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															622,
															657
														],
														"referencedDeclaration": 657,
														"src": "6684:20:3",
														"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": 619,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "6684:77:3",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_memory_ptr",
														"typeString": "bytes memory"
													}
												},
												"functionReturnParameters": 614,
												"id": 620,
												"nodeType": "Return",
												"src": "6677:84:3"
											}
										]
									},
									"documentation": {
										"id": 606,
										"nodeType": "StructuredDocumentation",
										"src": "6397:168:3",
										"text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"
									},
									"id": 622,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "functionDelegateCall",
									"nameLocation": "6579:20:3",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 611,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 608,
												"mutability": "mutable",
												"name": "target",
												"nameLocation": "6608:6:3",
												"nodeType": "VariableDeclaration",
												"scope": 622,
												"src": "6600:14:3",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 607,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "6600:7:3",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 610,
												"mutability": "mutable",
												"name": "data",
												"nameLocation": "6629:4:3",
												"nodeType": "VariableDeclaration",
												"scope": 622,
												"src": "6616:17:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 609,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "6616:5:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "6599:35:3"
									},
									"returnParameters": {
										"id": 614,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 613,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 622,
												"src": "6653:12:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 612,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "6653:5:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "6652:14:3"
									},
									"scope": 689,
									"src": "6570:198:3",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 656,
										"nodeType": "Block",
										"src": "7109:232:3",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"arguments": [
																{
																	"id": 636,
																	"name": "target",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 625,
																	"src": "7138:6:3",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																}
															],
															"expression": {
																"argumentTypes": [
																	{
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																],
																"id": 635,
																"name": "isContract",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 412,
																"src": "7127:10:3",
																"typeDescriptions": {
																	"typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
																	"typeString": "function (address) view returns (bool)"
																}
															},
															"id": 637,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "functionCall",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "7127:18:3",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374",
															"id": 638,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "7147:40:3",
															"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": 634,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "7119:7:3",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 639,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "7119:69:3",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 640,
												"nodeType": "ExpressionStatement",
												"src": "7119:69:3"
											},
											{
												"assignments": [
													642,
													644
												],
												"declarations": [
													{
														"constant": false,
														"id": 642,
														"mutability": "mutable",
														"name": "success",
														"nameLocation": "7205:7:3",
														"nodeType": "VariableDeclaration",
														"scope": 656,
														"src": "7200:12:3",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_bool",
															"typeString": "bool"
														},
														"typeName": {
															"id": 641,
															"name": "bool",
															"nodeType": "ElementaryTypeName",
															"src": "7200:4:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														"visibility": "internal"
													},
													{
														"constant": false,
														"id": 644,
														"mutability": "mutable",
														"name": "returndata",
														"nameLocation": "7227:10:3",
														"nodeType": "VariableDeclaration",
														"scope": 656,
														"src": "7214:23:3",
														"stateVariable": false,
														"storageLocation": "memory",
														"typeDescriptions": {
															"typeIdentifier": "t_bytes_memory_ptr",
															"typeString": "bytes"
														},
														"typeName": {
															"id": 643,
															"name": "bytes",
															"nodeType": "ElementaryTypeName",
															"src": "7214:5:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_storage_ptr",
																"typeString": "bytes"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 649,
												"initialValue": {
													"arguments": [
														{
															"id": 647,
															"name": "data",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 627,
															"src": "7261:4:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														],
														"expression": {
															"id": 645,
															"name": "target",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 625,
															"src": "7241:6:3",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														"id": 646,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "delegatecall",
														"nodeType": "MemberAccess",
														"src": "7241:19:3",
														"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": 648,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "7241:25:3",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
														"typeString": "tuple(bool,bytes memory)"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "7199:67:3"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 651,
															"name": "success",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 642,
															"src": "7300:7:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"id": 652,
															"name": "returndata",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 644,
															"src": "7309:10:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														},
														{
															"id": 653,
															"name": "errorMessage",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 629,
															"src": "7321:12:3",
															"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": 650,
														"name": "verifyCallResult",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 688,
														"src": "7283:16:3",
														"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": 654,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "7283:51:3",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_memory_ptr",
														"typeString": "bytes memory"
													}
												},
												"functionReturnParameters": 633,
												"id": 655,
												"nodeType": "Return",
												"src": "7276:58:3"
											}
										]
									},
									"documentation": {
										"id": 623,
										"nodeType": "StructuredDocumentation",
										"src": "6774:175:3",
										"text": " @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"
									},
									"id": 657,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "functionDelegateCall",
									"nameLocation": "6963:20:3",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 630,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 625,
												"mutability": "mutable",
												"name": "target",
												"nameLocation": "7001:6:3",
												"nodeType": "VariableDeclaration",
												"scope": 657,
												"src": "6993:14:3",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 624,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "6993:7:3",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 627,
												"mutability": "mutable",
												"name": "data",
												"nameLocation": "7030:4:3",
												"nodeType": "VariableDeclaration",
												"scope": 657,
												"src": "7017:17:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 626,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "7017:5:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 629,
												"mutability": "mutable",
												"name": "errorMessage",
												"nameLocation": "7058:12:3",
												"nodeType": "VariableDeclaration",
												"scope": 657,
												"src": "7044:26:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_string_memory_ptr",
													"typeString": "string"
												},
												"typeName": {
													"id": 628,
													"name": "string",
													"nodeType": "ElementaryTypeName",
													"src": "7044:6:3",
													"typeDescriptions": {
														"typeIdentifier": "t_string_storage_ptr",
														"typeString": "string"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "6983:93:3"
									},
									"returnParameters": {
										"id": 633,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 632,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 657,
												"src": "7095:12:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 631,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "7095:5:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "7094:14:3"
									},
									"scope": 689,
									"src": "6954:387:3",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 687,
										"nodeType": "Block",
										"src": "7721:582:3",
										"statements": [
											{
												"condition": {
													"id": 669,
													"name": "success",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 660,
													"src": "7735:7:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"falseBody": {
													"id": 685,
													"nodeType": "Block",
													"src": "7792:505:3",
													"statements": [
														{
															"condition": {
																"commonType": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																},
																"id": 676,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"expression": {
																		"id": 673,
																		"name": "returndata",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 662,
																		"src": "7876:10:3",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bytes_memory_ptr",
																			"typeString": "bytes memory"
																		}
																	},
																	"id": 674,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "length",
																	"nodeType": "MemberAccess",
																	"src": "7876:17:3",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": ">",
																"rightExpression": {
																	"hexValue": "30",
																	"id": 675,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "number",
																	"lValueRequested": false,
																	"nodeType": "Literal",
																	"src": "7896:1:3",
																	"typeDescriptions": {
																		"typeIdentifier": "t_rational_0_by_1",
																		"typeString": "int_const 0"
																	},
																	"value": "0"
																},
																"src": "7876:21:3",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"falseBody": {
																"id": 683,
																"nodeType": "Block",
																"src": "8234:53:3",
																"statements": [
																	{
																		"expression": {
																			"arguments": [
																				{
																					"id": 680,
																					"name": "errorMessage",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 664,
																					"src": "8259:12:3",
																					"typeDescriptions": {
																						"typeIdentifier": "t_string_memory_ptr",
																						"typeString": "string memory"
																					}
																				}
																			],
																			"expression": {
																				"argumentTypes": [
																					{
																						"typeIdentifier": "t_string_memory_ptr",
																						"typeString": "string memory"
																					}
																				],
																				"id": 679,
																				"name": "revert",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [
																					4294967277,
																					4294967277
																				],
																				"referencedDeclaration": 4294967277,
																				"src": "8252:6:3",
																				"typeDescriptions": {
																					"typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
																					"typeString": "function (string memory) pure"
																				}
																			},
																			"id": 681,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": false,
																			"kind": "functionCall",
																			"lValueRequested": false,
																			"names": [],
																			"nodeType": "FunctionCall",
																			"src": "8252:20:3",
																			"tryCall": false,
																			"typeDescriptions": {
																				"typeIdentifier": "t_tuple$__$",
																				"typeString": "tuple()"
																			}
																		},
																		"id": 682,
																		"nodeType": "ExpressionStatement",
																		"src": "8252:20:3"
																	}
																]
															},
															"id": 684,
															"nodeType": "IfStatement",
															"src": "7872:415:3",
															"trueBody": {
																"id": 678,
																"nodeType": "Block",
																"src": "7899:329:3",
																"statements": [
																	{
																		"AST": {
																			"nodeType": "YulBlock",
																			"src": "8069:145:3",
																			"statements": [
																				{
																					"nodeType": "YulVariableDeclaration",
																					"src": "8091:40:3",
																					"value": {
																						"arguments": [
																							{
																								"name": "returndata",
																								"nodeType": "YulIdentifier",
																								"src": "8120:10:3"
																							}
																						],
																						"functionName": {
																							"name": "mload",
																							"nodeType": "YulIdentifier",
																							"src": "8114:5:3"
																						},
																						"nodeType": "YulFunctionCall",
																						"src": "8114:17:3"
																					},
																					"variables": [
																						{
																							"name": "returndata_size",
																							"nodeType": "YulTypedName",
																							"src": "8095:15:3",
																							"type": ""
																						}
																					]
																				},
																				{
																					"expression": {
																						"arguments": [
																							{
																								"arguments": [
																									{
																										"kind": "number",
																										"nodeType": "YulLiteral",
																										"src": "8163:2:3",
																										"type": "",
																										"value": "32"
																									},
																									{
																										"name": "returndata",
																										"nodeType": "YulIdentifier",
																										"src": "8167:10:3"
																									}
																								],
																								"functionName": {
																									"name": "add",
																									"nodeType": "YulIdentifier",
																									"src": "8159:3:3"
																								},
																								"nodeType": "YulFunctionCall",
																								"src": "8159:19:3"
																							},
																							{
																								"name": "returndata_size",
																								"nodeType": "YulIdentifier",
																								"src": "8180:15:3"
																							}
																						],
																						"functionName": {
																							"name": "revert",
																							"nodeType": "YulIdentifier",
																							"src": "8152:6:3"
																						},
																						"nodeType": "YulFunctionCall",
																						"src": "8152:44:3"
																					},
																					"nodeType": "YulExpressionStatement",
																					"src": "8152:44:3"
																				}
																			]
																		},
																		"documentation": "@solidity memory-safe-assembly",
																		"evmVersion": "berlin",
																		"externalReferences": [
																			{
																				"declaration": 662,
																				"isOffset": false,
																				"isSlot": false,
																				"src": "8120:10:3",
																				"valueSize": 1
																			},
																			{
																				"declaration": 662,
																				"isOffset": false,
																				"isSlot": false,
																				"src": "8167:10:3",
																				"valueSize": 1
																			}
																		],
																		"id": 677,
																		"nodeType": "InlineAssembly",
																		"src": "8060:154:3"
																	}
																]
															}
														}
													]
												},
												"id": 686,
												"nodeType": "IfStatement",
												"src": "7731:566:3",
												"trueBody": {
													"id": 672,
													"nodeType": "Block",
													"src": "7744:42:3",
													"statements": [
														{
															"expression": {
																"id": 670,
																"name": "returndata",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 662,
																"src": "7765:10:3",
																"typeDescriptions": {
																	"typeIdentifier": "t_bytes_memory_ptr",
																	"typeString": "bytes memory"
																}
															},
															"functionReturnParameters": 668,
															"id": 671,
															"nodeType": "Return",
															"src": "7758:17:3"
														}
													]
												}
											}
										]
									},
									"documentation": {
										"id": 658,
										"nodeType": "StructuredDocumentation",
										"src": "7347:209:3",
										"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": 688,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "verifyCallResult",
									"nameLocation": "7570:16:3",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 665,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 660,
												"mutability": "mutable",
												"name": "success",
												"nameLocation": "7601:7:3",
												"nodeType": "VariableDeclaration",
												"scope": 688,
												"src": "7596:12:3",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bool",
													"typeString": "bool"
												},
												"typeName": {
													"id": 659,
													"name": "bool",
													"nodeType": "ElementaryTypeName",
													"src": "7596:4:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 662,
												"mutability": "mutable",
												"name": "returndata",
												"nameLocation": "7631:10:3",
												"nodeType": "VariableDeclaration",
												"scope": 688,
												"src": "7618:23:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 661,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "7618:5:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 664,
												"mutability": "mutable",
												"name": "errorMessage",
												"nameLocation": "7665:12:3",
												"nodeType": "VariableDeclaration",
												"scope": 688,
												"src": "7651:26:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_string_memory_ptr",
													"typeString": "string"
												},
												"typeName": {
													"id": 663,
													"name": "string",
													"nodeType": "ElementaryTypeName",
													"src": "7651:6:3",
													"typeDescriptions": {
														"typeIdentifier": "t_string_storage_ptr",
														"typeString": "string"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "7586:97:3"
									},
									"returnParameters": {
										"id": 668,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 667,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 688,
												"src": "7707:12:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 666,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "7707:5:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "7706:14:3"
									},
									"scope": 689,
									"src": "7561:742:3",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								}
							],
							"scope": 690,
							"src": "194:8111:3",
							"usedErrors": []
						}
					],
					"src": "101:8205:3"
				},
				"id": 3
			},
			"@openzeppelin/contracts/utils/Multicall.sol": {
				"ast": {
					"absolutePath": "@openzeppelin/contracts/utils/Multicall.sol",
					"exportedSymbols": {
						"Address": [
							689
						],
						"Multicall": [
							744
						]
					},
					"id": 745,
					"license": "MIT",
					"nodeType": "SourceUnit",
					"nodes": [
						{
							"id": 691,
							"literals": [
								"solidity",
								"^",
								"0.8",
								".0"
							],
							"nodeType": "PragmaDirective",
							"src": "103:23:4"
						},
						{
							"absolutePath": "@openzeppelin/contracts/utils/Address.sol",
							"file": "./Address.sol",
							"id": 692,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 745,
							"sourceUnit": 690,
							"src": "128:23:4",
							"symbolAliases": [],
							"unitAlias": ""
						},
						{
							"abstract": true,
							"baseContracts": [],
							"contractDependencies": [],
							"contractKind": "contract",
							"documentation": {
								"id": 693,
								"nodeType": "StructuredDocumentation",
								"src": "153:125:4",
								"text": " @dev Provides a function to batch together multiple calls in a single external call.\n _Available since v4.1._"
							},
							"fullyImplemented": true,
							"id": 744,
							"linearizedBaseContracts": [
								744
							],
							"name": "Multicall",
							"nameLocation": "297:9:4",
							"nodeType": "ContractDefinition",
							"nodes": [
								{
									"body": {
										"id": 742,
										"nodeType": "Block",
										"src": "499:216:4",
										"statements": [
											{
												"expression": {
													"id": 710,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"id": 703,
														"name": "results",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 701,
														"src": "509:7:4",
														"typeDescriptions": {
															"typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
															"typeString": "bytes memory[] memory"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"arguments": [
															{
																"expression": {
																	"id": 707,
																	"name": "data",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 697,
																	"src": "531:4:4",
																	"typeDescriptions": {
																		"typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
																		"typeString": "bytes calldata[] calldata"
																	}
																},
																"id": 708,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "length",
																"nodeType": "MemberAccess",
																"src": "531:11:4",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															}
														],
														"expression": {
															"argumentTypes": [
																{
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															],
															"id": 706,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"lValueRequested": false,
															"nodeType": "NewExpression",
															"src": "519:11:4",
															"typeDescriptions": {
																"typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$",
																"typeString": "function (uint256) pure returns (bytes memory[] memory)"
															},
															"typeName": {
																"baseType": {
																	"id": 704,
																	"name": "bytes",
																	"nodeType": "ElementaryTypeName",
																	"src": "523:5:4",
																	"typeDescriptions": {
																		"typeIdentifier": "t_bytes_storage_ptr",
																		"typeString": "bytes"
																	}
																},
																"id": 705,
																"nodeType": "ArrayTypeName",
																"src": "523:7:4",
																"typeDescriptions": {
																	"typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
																	"typeString": "bytes[]"
																}
															}
														},
														"id": 709,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"kind": "functionCall",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "519:24:4",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
															"typeString": "bytes memory[] memory"
														}
													},
													"src": "509:34:4",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
														"typeString": "bytes memory[] memory"
													}
												},
												"id": 711,
												"nodeType": "ExpressionStatement",
												"src": "509:34:4"
											},
											{
												"body": {
													"id": 738,
													"nodeType": "Block",
													"src": "595:90:4",
													"statements": [
														{
															"expression": {
																"id": 736,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftHandSide": {
																	"baseExpression": {
																		"id": 723,
																		"name": "results",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 701,
																		"src": "609:7:4",
																		"typeDescriptions": {
																			"typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
																			"typeString": "bytes memory[] memory"
																		}
																	},
																	"id": 725,
																	"indexExpression": {
																		"id": 724,
																		"name": "i",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 713,
																		"src": "617:1:4",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		}
																	},
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": true,
																	"nodeType": "IndexAccess",
																	"src": "609:10:4",
																	"typeDescriptions": {
																		"typeIdentifier": "t_bytes_memory_ptr",
																		"typeString": "bytes memory"
																	}
																},
																"nodeType": "Assignment",
																"operator": "=",
																"rightHandSide": {
																	"arguments": [
																		{
																			"arguments": [
																				{
																					"id": 730,
																					"name": "this",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 4294967268,
																					"src": "659:4:4",
																					"typeDescriptions": {
																						"typeIdentifier": "t_contract$_Multicall_$744",
																						"typeString": "contract Multicall"
																					}
																				}
																			],
																			"expression": {
																				"argumentTypes": [
																					{
																						"typeIdentifier": "t_contract$_Multicall_$744",
																						"typeString": "contract Multicall"
																					}
																				],
																				"id": 729,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "651:7:4",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_address_$",
																					"typeString": "type(address)"
																				},
																				"typeName": {
																					"id": 728,
																					"name": "address",
																					"nodeType": "ElementaryTypeName",
																					"src": "651:7:4",
																					"typeDescriptions": {}
																				}
																			},
																			"id": 731,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": false,
																			"kind": "typeConversion",
																			"lValueRequested": false,
																			"names": [],
																			"nodeType": "FunctionCall",
																			"src": "651:13:4",
																			"tryCall": false,
																			"typeDescriptions": {
																				"typeIdentifier": "t_address",
																				"typeString": "address"
																			}
																		},
																		{
																			"baseExpression": {
																				"id": 732,
																				"name": "data",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 697,
																				"src": "666:4:4",
																				"typeDescriptions": {
																					"typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
																					"typeString": "bytes calldata[] calldata"
																				}
																			},
																			"id": 734,
																			"indexExpression": {
																				"id": 733,
																				"name": "i",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 713,
																				"src": "671:1:4",
																				"typeDescriptions": {
																					"typeIdentifier": "t_uint256",
																					"typeString": "uint256"
																				}
																			},
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": false,
																			"lValueRequested": false,
																			"nodeType": "IndexAccess",
																			"src": "666:7:4",
																			"typeDescriptions": {
																				"typeIdentifier": "t_bytes_calldata_ptr",
																				"typeString": "bytes calldata"
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_address",
																				"typeString": "address"
																			},
																			{
																				"typeIdentifier": "t_bytes_calldata_ptr",
																				"typeString": "bytes calldata"
																			}
																		],
																		"expression": {
																			"id": 726,
																			"name": "Address",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 689,
																			"src": "622:7:4",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_contract$_Address_$689_$",
																				"typeString": "type(library Address)"
																			}
																		},
																		"id": 727,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "functionDelegateCall",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 622,
																		"src": "622:28:4",
																		"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": 735,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "622:52:4",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_bytes_memory_ptr",
																		"typeString": "bytes memory"
																	}
																},
																"src": "609:65:4",
																"typeDescriptions": {
																	"typeIdentifier": "t_bytes_memory_ptr",
																	"typeString": "bytes memory"
																}
															},
															"id": 737,
															"nodeType": "ExpressionStatement",
															"src": "609:65:4"
														}
													]
												},
												"condition": {
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 719,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 716,
														"name": "i",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 713,
														"src": "573:1:4",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "<",
													"rightExpression": {
														"expression": {
															"id": 717,
															"name": "data",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 697,
															"src": "577:4:4",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
																"typeString": "bytes calldata[] calldata"
															}
														},
														"id": 718,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "length",
														"nodeType": "MemberAccess",
														"src": "577:11:4",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"src": "573:15:4",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 739,
												"initializationExpression": {
													"assignments": [
														713
													],
													"declarations": [
														{
															"constant": false,
															"id": 713,
															"mutability": "mutable",
															"name": "i",
															"nameLocation": "566:1:4",
															"nodeType": "VariableDeclaration",
															"scope": 739,
															"src": "558:9:4",
															"stateVariable": false,
															"storageLocation": "default",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"typeName": {
																"id": 712,
																"name": "uint256",
																"nodeType": "ElementaryTypeName",
																"src": "558:7:4",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"visibility": "internal"
														}
													],
													"id": 715,
													"initialValue": {
														"hexValue": "30",
														"id": 714,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "number",
														"lValueRequested": false,
														"nodeType": "Literal",
														"src": "570:1:4",
														"typeDescriptions": {
															"typeIdentifier": "t_rational_0_by_1",
															"typeString": "int_const 0"
														},
														"value": "0"
													},
													"nodeType": "VariableDeclarationStatement",
													"src": "558:13:4"
												},
												"loopExpression": {
													"expression": {
														"id": 721,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"nodeType": "UnaryOperation",
														"operator": "++",
														"prefix": false,
														"src": "590:3:4",
														"subExpression": {
															"id": 720,
															"name": "i",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 713,
															"src": "590:1:4",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"id": 722,
													"nodeType": "ExpressionStatement",
													"src": "590:3:4"
												},
												"nodeType": "ForStatement",
												"src": "553:132:4"
											},
											{
												"expression": {
													"id": 740,
													"name": "results",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 701,
													"src": "701:7:4",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
														"typeString": "bytes memory[] memory"
													}
												},
												"functionReturnParameters": 702,
												"id": 741,
												"nodeType": "Return",
												"src": "694:14:4"
											}
										]
									},
									"documentation": {
										"id": 694,
										"nodeType": "StructuredDocumentation",
										"src": "313:89:4",
										"text": " @dev Receives and executes a batch of function calls on this contract."
									},
									"functionSelector": "ac9650d8",
									"id": 743,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "multicall",
									"nameLocation": "416:9:4",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 698,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 697,
												"mutability": "mutable",
												"name": "data",
												"nameLocation": "443:4:4",
												"nodeType": "VariableDeclaration",
												"scope": 743,
												"src": "426:21:4",
												"stateVariable": false,
												"storageLocation": "calldata",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
													"typeString": "bytes[]"
												},
												"typeName": {
													"baseType": {
														"id": 695,
														"name": "bytes",
														"nodeType": "ElementaryTypeName",
														"src": "426:5:4",
														"typeDescriptions": {
															"typeIdentifier": "t_bytes_storage_ptr",
															"typeString": "bytes"
														}
													},
													"id": 696,
													"nodeType": "ArrayTypeName",
													"src": "426:7:4",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
														"typeString": "bytes[]"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "425:23:4"
									},
									"returnParameters": {
										"id": 702,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 701,
												"mutability": "mutable",
												"name": "results",
												"nameLocation": "490:7:4",
												"nodeType": "VariableDeclaration",
												"scope": 743,
												"src": "475:22:4",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
													"typeString": "bytes[]"
												},
												"typeName": {
													"baseType": {
														"id": 699,
														"name": "bytes",
														"nodeType": "ElementaryTypeName",
														"src": "475:5:4",
														"typeDescriptions": {
															"typeIdentifier": "t_bytes_storage_ptr",
															"typeString": "bytes"
														}
													},
													"id": 700,
													"nodeType": "ArrayTypeName",
													"src": "475:7:4",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
														"typeString": "bytes[]"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "474:24:4"
									},
									"scope": 744,
									"src": "407:308:4",
									"stateMutability": "nonpayable",
									"virtual": true,
									"visibility": "external"
								}
							],
							"scope": 745,
							"src": "279:438:4",
							"usedErrors": []
						}
					],
					"src": "103:615:4"
				},
				"id": 4
			},
			"@openzeppelin/contracts/utils/math/SafeCast.sol": {
				"ast": {
					"absolutePath": "@openzeppelin/contracts/utils/math/SafeCast.sol",
					"exportedSymbols": {
						"SafeCast": [
							2595
						]
					},
					"id": 2596,
					"license": "MIT",
					"nodeType": "SourceUnit",
					"nodes": [
						{
							"id": 746,
							"literals": [
								"solidity",
								"^",
								"0.8",
								".0"
							],
							"nodeType": "PragmaDirective",
							"src": "107:23:5"
						},
						{
							"abstract": false,
							"baseContracts": [],
							"contractDependencies": [],
							"contractKind": "library",
							"documentation": {
								"id": 747,
								"nodeType": "StructuredDocumentation",
								"src": "132:709:5",
								"text": " @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\n checks.\n Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n easily result in undesired exploitation or bugs, since developers usually\n assume that overflows raise errors. `SafeCast` restores this intuition by\n reverting the transaction when such an operation overflows.\n Using this library instead of the unchecked operations eliminates an entire\n class of bugs, so it's recommended to use it always.\n Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\n all math on `uint256` and `int256` and then downcasting."
							},
							"fullyImplemented": true,
							"id": 2595,
							"linearizedBaseContracts": [
								2595
							],
							"name": "SafeCast",
							"nameLocation": "850:8:5",
							"nodeType": "ContractDefinition",
							"nodes": [
								{
									"body": {
										"id": 771,
										"nodeType": "Block",
										"src": "1254:126:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 762,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 756,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 750,
																"src": "1272:5:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<=",
															"rightExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 759,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "1286:7:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint248_$",
																				"typeString": "type(uint248)"
																			},
																			"typeName": {
																				"id": 758,
																				"name": "uint248",
																				"nodeType": "ElementaryTypeName",
																				"src": "1286:7:5",
																				"typeDescriptions": {}
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_type$_t_uint248_$",
																				"typeString": "type(uint248)"
																			}
																		],
																		"id": 757,
																		"name": "type",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967269,
																		"src": "1281:4:5",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 760,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "1281:13:5",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_meta_type_t_uint248",
																		"typeString": "type(uint248)"
																	}
																},
																"id": 761,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "max",
																"nodeType": "MemberAccess",
																"src": "1281:17:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint248",
																	"typeString": "uint248"
																}
															},
															"src": "1272:26:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203234382062697473",
															"id": 763,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "1300:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_6ac19bba4607c9b45ff35f54fbc4ca64c29c7457109a16fa180ea77cdbda8593",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 248 bits\""
															},
															"value": "SafeCast: value doesn't fit in 248 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_6ac19bba4607c9b45ff35f54fbc4ca64c29c7457109a16fa180ea77cdbda8593",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 248 bits\""
															}
														],
														"id": 755,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "1264:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 764,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "1264:78:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 765,
												"nodeType": "ExpressionStatement",
												"src": "1264:78:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 768,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 750,
															"src": "1367:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 767,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "1359:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint248_$",
															"typeString": "type(uint248)"
														},
														"typeName": {
															"id": 766,
															"name": "uint248",
															"nodeType": "ElementaryTypeName",
															"src": "1359:7:5",
															"typeDescriptions": {}
														}
													},
													"id": 769,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "1359:14:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint248",
														"typeString": "uint248"
													}
												},
												"functionReturnParameters": 754,
												"id": 770,
												"nodeType": "Return",
												"src": "1352:21:5"
											}
										]
									},
									"documentation": {
										"id": 748,
										"nodeType": "StructuredDocumentation",
										"src": "865:318:5",
										"text": " @dev Returns the downcasted uint248 from uint256, reverting on\n overflow (when the input is greater than largest uint248).\n Counterpart to Solidity's `uint248` operator.\n Requirements:\n - input must fit into 248 bits\n _Available since v4.7._"
									},
									"id": 772,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toUint248",
									"nameLocation": "1197:9:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 751,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 750,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "1215:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 772,
												"src": "1207:13:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 749,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1207:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1206:15:5"
									},
									"returnParameters": {
										"id": 754,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 753,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 772,
												"src": "1245:7:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint248",
													"typeString": "uint248"
												},
												"typeName": {
													"id": 752,
													"name": "uint248",
													"nodeType": "ElementaryTypeName",
													"src": "1245:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint248",
														"typeString": "uint248"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1244:9:5"
									},
									"scope": 2595,
									"src": "1188:192:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 796,
										"nodeType": "Block",
										"src": "1775:126:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 787,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 781,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 775,
																"src": "1793:5:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<=",
															"rightExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 784,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "1807:7:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint240_$",
																				"typeString": "type(uint240)"
																			},
																			"typeName": {
																				"id": 783,
																				"name": "uint240",
																				"nodeType": "ElementaryTypeName",
																				"src": "1807:7:5",
																				"typeDescriptions": {}
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_type$_t_uint240_$",
																				"typeString": "type(uint240)"
																			}
																		],
																		"id": 782,
																		"name": "type",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967269,
																		"src": "1802:4:5",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 785,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "1802:13:5",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_meta_type_t_uint240",
																		"typeString": "type(uint240)"
																	}
																},
																"id": 786,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "max",
																"nodeType": "MemberAccess",
																"src": "1802:17:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint240",
																	"typeString": "uint240"
																}
															},
															"src": "1793:26:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203234302062697473",
															"id": 788,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "1821:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_375fa0f6cb9fb5845d214c630920cedf4424913ed6dc32c297d430efa3d61a87",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 240 bits\""
															},
															"value": "SafeCast: value doesn't fit in 240 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_375fa0f6cb9fb5845d214c630920cedf4424913ed6dc32c297d430efa3d61a87",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 240 bits\""
															}
														],
														"id": 780,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "1785:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 789,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "1785:78:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 790,
												"nodeType": "ExpressionStatement",
												"src": "1785:78:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 793,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 775,
															"src": "1888:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 792,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "1880:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint240_$",
															"typeString": "type(uint240)"
														},
														"typeName": {
															"id": 791,
															"name": "uint240",
															"nodeType": "ElementaryTypeName",
															"src": "1880:7:5",
															"typeDescriptions": {}
														}
													},
													"id": 794,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "1880:14:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint240",
														"typeString": "uint240"
													}
												},
												"functionReturnParameters": 779,
												"id": 795,
												"nodeType": "Return",
												"src": "1873:21:5"
											}
										]
									},
									"documentation": {
										"id": 773,
										"nodeType": "StructuredDocumentation",
										"src": "1386:318:5",
										"text": " @dev Returns the downcasted uint240 from uint256, reverting on\n overflow (when the input is greater than largest uint240).\n Counterpart to Solidity's `uint240` operator.\n Requirements:\n - input must fit into 240 bits\n _Available since v4.7._"
									},
									"id": 797,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toUint240",
									"nameLocation": "1718:9:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 776,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 775,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "1736:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 797,
												"src": "1728:13:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 774,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1728:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1727:15:5"
									},
									"returnParameters": {
										"id": 779,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 778,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 797,
												"src": "1766:7:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint240",
													"typeString": "uint240"
												},
												"typeName": {
													"id": 777,
													"name": "uint240",
													"nodeType": "ElementaryTypeName",
													"src": "1766:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint240",
														"typeString": "uint240"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1765:9:5"
									},
									"scope": 2595,
									"src": "1709:192:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 821,
										"nodeType": "Block",
										"src": "2296:126:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 812,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 806,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 800,
																"src": "2314:5:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<=",
															"rightExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 809,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "2328:7:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint232_$",
																				"typeString": "type(uint232)"
																			},
																			"typeName": {
																				"id": 808,
																				"name": "uint232",
																				"nodeType": "ElementaryTypeName",
																				"src": "2328:7:5",
																				"typeDescriptions": {}
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_type$_t_uint232_$",
																				"typeString": "type(uint232)"
																			}
																		],
																		"id": 807,
																		"name": "type",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967269,
																		"src": "2323:4:5",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 810,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "2323:13:5",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_meta_type_t_uint232",
																		"typeString": "type(uint232)"
																	}
																},
																"id": 811,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "max",
																"nodeType": "MemberAccess",
																"src": "2323:17:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint232",
																	"typeString": "uint232"
																}
															},
															"src": "2314:26:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203233322062697473",
															"id": 813,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "2342:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_5797fb2c4589bd6a92752ce0eacaac67341e37ab28c96c2284ab897e7ac77957",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 232 bits\""
															},
															"value": "SafeCast: value doesn't fit in 232 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_5797fb2c4589bd6a92752ce0eacaac67341e37ab28c96c2284ab897e7ac77957",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 232 bits\""
															}
														],
														"id": 805,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "2306:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 814,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "2306:78:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 815,
												"nodeType": "ExpressionStatement",
												"src": "2306:78:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 818,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 800,
															"src": "2409:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 817,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "2401:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint232_$",
															"typeString": "type(uint232)"
														},
														"typeName": {
															"id": 816,
															"name": "uint232",
															"nodeType": "ElementaryTypeName",
															"src": "2401:7:5",
															"typeDescriptions": {}
														}
													},
													"id": 819,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "2401:14:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint232",
														"typeString": "uint232"
													}
												},
												"functionReturnParameters": 804,
												"id": 820,
												"nodeType": "Return",
												"src": "2394:21:5"
											}
										]
									},
									"documentation": {
										"id": 798,
										"nodeType": "StructuredDocumentation",
										"src": "1907:318:5",
										"text": " @dev Returns the downcasted uint232 from uint256, reverting on\n overflow (when the input is greater than largest uint232).\n Counterpart to Solidity's `uint232` operator.\n Requirements:\n - input must fit into 232 bits\n _Available since v4.7._"
									},
									"id": 822,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toUint232",
									"nameLocation": "2239:9:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 801,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 800,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "2257:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 822,
												"src": "2249:13:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 799,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "2249:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2248:15:5"
									},
									"returnParameters": {
										"id": 804,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 803,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 822,
												"src": "2287:7:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint232",
													"typeString": "uint232"
												},
												"typeName": {
													"id": 802,
													"name": "uint232",
													"nodeType": "ElementaryTypeName",
													"src": "2287:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint232",
														"typeString": "uint232"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2286:9:5"
									},
									"scope": 2595,
									"src": "2230:192:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 846,
										"nodeType": "Block",
										"src": "2817:126:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 837,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 831,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 825,
																"src": "2835:5:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<=",
															"rightExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 834,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "2849:7:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint224_$",
																				"typeString": "type(uint224)"
																			},
																			"typeName": {
																				"id": 833,
																				"name": "uint224",
																				"nodeType": "ElementaryTypeName",
																				"src": "2849:7:5",
																				"typeDescriptions": {}
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_type$_t_uint224_$",
																				"typeString": "type(uint224)"
																			}
																		],
																		"id": 832,
																		"name": "type",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967269,
																		"src": "2844:4:5",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 835,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "2844:13:5",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_meta_type_t_uint224",
																		"typeString": "type(uint224)"
																	}
																},
																"id": 836,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "max",
																"nodeType": "MemberAccess",
																"src": "2844:17:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint224",
																	"typeString": "uint224"
																}
															},
															"src": "2835:26:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203232342062697473",
															"id": 838,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "2863:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_9d2acf551b2466898443b9bc3a403a4d86037386bc5a8960c1bbb0f204e69b79",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 224 bits\""
															},
															"value": "SafeCast: value doesn't fit in 224 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_9d2acf551b2466898443b9bc3a403a4d86037386bc5a8960c1bbb0f204e69b79",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 224 bits\""
															}
														],
														"id": 830,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "2827:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 839,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "2827:78:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 840,
												"nodeType": "ExpressionStatement",
												"src": "2827:78:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 843,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 825,
															"src": "2930:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 842,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "2922:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint224_$",
															"typeString": "type(uint224)"
														},
														"typeName": {
															"id": 841,
															"name": "uint224",
															"nodeType": "ElementaryTypeName",
															"src": "2922:7:5",
															"typeDescriptions": {}
														}
													},
													"id": 844,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "2922:14:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint224",
														"typeString": "uint224"
													}
												},
												"functionReturnParameters": 829,
												"id": 845,
												"nodeType": "Return",
												"src": "2915:21:5"
											}
										]
									},
									"documentation": {
										"id": 823,
										"nodeType": "StructuredDocumentation",
										"src": "2428:318:5",
										"text": " @dev Returns the downcasted uint224 from uint256, reverting on\n overflow (when the input is greater than largest uint224).\n Counterpart to Solidity's `uint224` operator.\n Requirements:\n - input must fit into 224 bits\n _Available since v4.2._"
									},
									"id": 847,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toUint224",
									"nameLocation": "2760:9:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 826,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 825,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "2778:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 847,
												"src": "2770:13:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 824,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "2770:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2769:15:5"
									},
									"returnParameters": {
										"id": 829,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 828,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 847,
												"src": "2808:7:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint224",
													"typeString": "uint224"
												},
												"typeName": {
													"id": 827,
													"name": "uint224",
													"nodeType": "ElementaryTypeName",
													"src": "2808:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint224",
														"typeString": "uint224"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2807:9:5"
									},
									"scope": 2595,
									"src": "2751:192:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 871,
										"nodeType": "Block",
										"src": "3338:126:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 862,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 856,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 850,
																"src": "3356:5:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<=",
															"rightExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 859,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "3370:7:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint216_$",
																				"typeString": "type(uint216)"
																			},
																			"typeName": {
																				"id": 858,
																				"name": "uint216",
																				"nodeType": "ElementaryTypeName",
																				"src": "3370:7:5",
																				"typeDescriptions": {}
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_type$_t_uint216_$",
																				"typeString": "type(uint216)"
																			}
																		],
																		"id": 857,
																		"name": "type",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967269,
																		"src": "3365:4:5",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 860,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "3365:13:5",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_meta_type_t_uint216",
																		"typeString": "type(uint216)"
																	}
																},
																"id": 861,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "max",
																"nodeType": "MemberAccess",
																"src": "3365:17:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint216",
																	"typeString": "uint216"
																}
															},
															"src": "3356:26:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203231362062697473",
															"id": 863,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "3384:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_8966adc0aad8dc91b207c69c3eb4937e498af8cc706cfe7edd55f3a6ea53488d",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 216 bits\""
															},
															"value": "SafeCast: value doesn't fit in 216 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_8966adc0aad8dc91b207c69c3eb4937e498af8cc706cfe7edd55f3a6ea53488d",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 216 bits\""
															}
														],
														"id": 855,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "3348:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 864,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "3348:78:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 865,
												"nodeType": "ExpressionStatement",
												"src": "3348:78:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 868,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 850,
															"src": "3451:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 867,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "3443:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint216_$",
															"typeString": "type(uint216)"
														},
														"typeName": {
															"id": 866,
															"name": "uint216",
															"nodeType": "ElementaryTypeName",
															"src": "3443:7:5",
															"typeDescriptions": {}
														}
													},
													"id": 869,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "3443:14:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint216",
														"typeString": "uint216"
													}
												},
												"functionReturnParameters": 854,
												"id": 870,
												"nodeType": "Return",
												"src": "3436:21:5"
											}
										]
									},
									"documentation": {
										"id": 848,
										"nodeType": "StructuredDocumentation",
										"src": "2949:318:5",
										"text": " @dev Returns the downcasted uint216 from uint256, reverting on\n overflow (when the input is greater than largest uint216).\n Counterpart to Solidity's `uint216` operator.\n Requirements:\n - input must fit into 216 bits\n _Available since v4.7._"
									},
									"id": 872,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toUint216",
									"nameLocation": "3281:9:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 851,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 850,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "3299:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 872,
												"src": "3291:13:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 849,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "3291:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "3290:15:5"
									},
									"returnParameters": {
										"id": 854,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 853,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 872,
												"src": "3329:7:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint216",
													"typeString": "uint216"
												},
												"typeName": {
													"id": 852,
													"name": "uint216",
													"nodeType": "ElementaryTypeName",
													"src": "3329:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint216",
														"typeString": "uint216"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "3328:9:5"
									},
									"scope": 2595,
									"src": "3272:192:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 896,
										"nodeType": "Block",
										"src": "3859:126:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 887,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 881,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 875,
																"src": "3877:5:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<=",
															"rightExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 884,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "3891:7:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint208_$",
																				"typeString": "type(uint208)"
																			},
																			"typeName": {
																				"id": 883,
																				"name": "uint208",
																				"nodeType": "ElementaryTypeName",
																				"src": "3891:7:5",
																				"typeDescriptions": {}
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_type$_t_uint208_$",
																				"typeString": "type(uint208)"
																			}
																		],
																		"id": 882,
																		"name": "type",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967269,
																		"src": "3886:4:5",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 885,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "3886:13:5",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_meta_type_t_uint208",
																		"typeString": "type(uint208)"
																	}
																},
																"id": 886,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "max",
																"nodeType": "MemberAccess",
																"src": "3886:17:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint208",
																	"typeString": "uint208"
																}
															},
															"src": "3877:26:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203230382062697473",
															"id": 888,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "3905:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_43d81217fa633fa1c6e88855de94fb990f5831ac266b0a90afa660e986ab5e23",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 208 bits\""
															},
															"value": "SafeCast: value doesn't fit in 208 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_43d81217fa633fa1c6e88855de94fb990f5831ac266b0a90afa660e986ab5e23",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 208 bits\""
															}
														],
														"id": 880,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "3869:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 889,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "3869:78:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 890,
												"nodeType": "ExpressionStatement",
												"src": "3869:78:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 893,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 875,
															"src": "3972:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 892,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "3964:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint208_$",
															"typeString": "type(uint208)"
														},
														"typeName": {
															"id": 891,
															"name": "uint208",
															"nodeType": "ElementaryTypeName",
															"src": "3964:7:5",
															"typeDescriptions": {}
														}
													},
													"id": 894,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "3964:14:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint208",
														"typeString": "uint208"
													}
												},
												"functionReturnParameters": 879,
												"id": 895,
												"nodeType": "Return",
												"src": "3957:21:5"
											}
										]
									},
									"documentation": {
										"id": 873,
										"nodeType": "StructuredDocumentation",
										"src": "3470:318:5",
										"text": " @dev Returns the downcasted uint208 from uint256, reverting on\n overflow (when the input is greater than largest uint208).\n Counterpart to Solidity's `uint208` operator.\n Requirements:\n - input must fit into 208 bits\n _Available since v4.7._"
									},
									"id": 897,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toUint208",
									"nameLocation": "3802:9:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 876,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 875,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "3820:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 897,
												"src": "3812:13:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 874,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "3812:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "3811:15:5"
									},
									"returnParameters": {
										"id": 879,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 878,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 897,
												"src": "3850:7:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint208",
													"typeString": "uint208"
												},
												"typeName": {
													"id": 877,
													"name": "uint208",
													"nodeType": "ElementaryTypeName",
													"src": "3850:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint208",
														"typeString": "uint208"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "3849:9:5"
									},
									"scope": 2595,
									"src": "3793:192:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 921,
										"nodeType": "Block",
										"src": "4380:126:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 912,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 906,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 900,
																"src": "4398:5:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<=",
															"rightExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 909,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "4412:7:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint200_$",
																				"typeString": "type(uint200)"
																			},
																			"typeName": {
																				"id": 908,
																				"name": "uint200",
																				"nodeType": "ElementaryTypeName",
																				"src": "4412:7:5",
																				"typeDescriptions": {}
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_type$_t_uint200_$",
																				"typeString": "type(uint200)"
																			}
																		],
																		"id": 907,
																		"name": "type",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967269,
																		"src": "4407:4:5",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 910,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "4407:13:5",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_meta_type_t_uint200",
																		"typeString": "type(uint200)"
																	}
																},
																"id": 911,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "max",
																"nodeType": "MemberAccess",
																"src": "4407:17:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint200",
																	"typeString": "uint200"
																}
															},
															"src": "4398:26:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203230302062697473",
															"id": 913,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "4426:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_df8130f294fe2698967ea9ead82c4da9454490567d976d00551e0174e655314c",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 200 bits\""
															},
															"value": "SafeCast: value doesn't fit in 200 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_df8130f294fe2698967ea9ead82c4da9454490567d976d00551e0174e655314c",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 200 bits\""
															}
														],
														"id": 905,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "4390:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 914,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "4390:78:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 915,
												"nodeType": "ExpressionStatement",
												"src": "4390:78:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 918,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 900,
															"src": "4493:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 917,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "4485:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint200_$",
															"typeString": "type(uint200)"
														},
														"typeName": {
															"id": 916,
															"name": "uint200",
															"nodeType": "ElementaryTypeName",
															"src": "4485:7:5",
															"typeDescriptions": {}
														}
													},
													"id": 919,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "4485:14:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint200",
														"typeString": "uint200"
													}
												},
												"functionReturnParameters": 904,
												"id": 920,
												"nodeType": "Return",
												"src": "4478:21:5"
											}
										]
									},
									"documentation": {
										"id": 898,
										"nodeType": "StructuredDocumentation",
										"src": "3991:318:5",
										"text": " @dev Returns the downcasted uint200 from uint256, reverting on\n overflow (when the input is greater than largest uint200).\n Counterpart to Solidity's `uint200` operator.\n Requirements:\n - input must fit into 200 bits\n _Available since v4.7._"
									},
									"id": 922,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toUint200",
									"nameLocation": "4323:9:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 901,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 900,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "4341:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 922,
												"src": "4333:13:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 899,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "4333:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "4332:15:5"
									},
									"returnParameters": {
										"id": 904,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 903,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 922,
												"src": "4371:7:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint200",
													"typeString": "uint200"
												},
												"typeName": {
													"id": 902,
													"name": "uint200",
													"nodeType": "ElementaryTypeName",
													"src": "4371:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint200",
														"typeString": "uint200"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "4370:9:5"
									},
									"scope": 2595,
									"src": "4314:192:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 946,
										"nodeType": "Block",
										"src": "4901:126:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 937,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 931,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 925,
																"src": "4919:5:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<=",
															"rightExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 934,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "4933:7:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint192_$",
																				"typeString": "type(uint192)"
																			},
																			"typeName": {
																				"id": 933,
																				"name": "uint192",
																				"nodeType": "ElementaryTypeName",
																				"src": "4933:7:5",
																				"typeDescriptions": {}
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_type$_t_uint192_$",
																				"typeString": "type(uint192)"
																			}
																		],
																		"id": 932,
																		"name": "type",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967269,
																		"src": "4928:4:5",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 935,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "4928:13:5",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_meta_type_t_uint192",
																		"typeString": "type(uint192)"
																	}
																},
																"id": 936,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "max",
																"nodeType": "MemberAccess",
																"src": "4928:17:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint192",
																	"typeString": "uint192"
																}
															},
															"src": "4919:26:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203139322062697473",
															"id": 938,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "4947:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_112978800f12a1c4f1eab82789f7b6defd49dc1c17ba270a84ffc28392fb05ae",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 192 bits\""
															},
															"value": "SafeCast: value doesn't fit in 192 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_112978800f12a1c4f1eab82789f7b6defd49dc1c17ba270a84ffc28392fb05ae",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 192 bits\""
															}
														],
														"id": 930,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "4911:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 939,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "4911:78:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 940,
												"nodeType": "ExpressionStatement",
												"src": "4911:78:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 943,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 925,
															"src": "5014:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 942,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "5006:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint192_$",
															"typeString": "type(uint192)"
														},
														"typeName": {
															"id": 941,
															"name": "uint192",
															"nodeType": "ElementaryTypeName",
															"src": "5006:7:5",
															"typeDescriptions": {}
														}
													},
													"id": 944,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "5006:14:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint192",
														"typeString": "uint192"
													}
												},
												"functionReturnParameters": 929,
												"id": 945,
												"nodeType": "Return",
												"src": "4999:21:5"
											}
										]
									},
									"documentation": {
										"id": 923,
										"nodeType": "StructuredDocumentation",
										"src": "4512:318:5",
										"text": " @dev Returns the downcasted uint192 from uint256, reverting on\n overflow (when the input is greater than largest uint192).\n Counterpart to Solidity's `uint192` operator.\n Requirements:\n - input must fit into 192 bits\n _Available since v4.7._"
									},
									"id": 947,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toUint192",
									"nameLocation": "4844:9:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 926,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 925,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "4862:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 947,
												"src": "4854:13:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 924,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "4854:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "4853:15:5"
									},
									"returnParameters": {
										"id": 929,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 928,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 947,
												"src": "4892:7:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint192",
													"typeString": "uint192"
												},
												"typeName": {
													"id": 927,
													"name": "uint192",
													"nodeType": "ElementaryTypeName",
													"src": "4892:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint192",
														"typeString": "uint192"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "4891:9:5"
									},
									"scope": 2595,
									"src": "4835:192:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 971,
										"nodeType": "Block",
										"src": "5422:126:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 962,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 956,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 950,
																"src": "5440:5:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<=",
															"rightExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 959,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "5454:7:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint184_$",
																				"typeString": "type(uint184)"
																			},
																			"typeName": {
																				"id": 958,
																				"name": "uint184",
																				"nodeType": "ElementaryTypeName",
																				"src": "5454:7:5",
																				"typeDescriptions": {}
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_type$_t_uint184_$",
																				"typeString": "type(uint184)"
																			}
																		],
																		"id": 957,
																		"name": "type",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967269,
																		"src": "5449:4:5",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 960,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "5449:13:5",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_meta_type_t_uint184",
																		"typeString": "type(uint184)"
																	}
																},
																"id": 961,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "max",
																"nodeType": "MemberAccess",
																"src": "5449:17:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint184",
																	"typeString": "uint184"
																}
															},
															"src": "5440:26:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203138342062697473",
															"id": 963,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "5468:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_86c53d89b1944d561ecfa42e859033241d1df6ea8d42a57ae02f79d45de4aa75",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 184 bits\""
															},
															"value": "SafeCast: value doesn't fit in 184 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_86c53d89b1944d561ecfa42e859033241d1df6ea8d42a57ae02f79d45de4aa75",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 184 bits\""
															}
														],
														"id": 955,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "5432:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 964,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "5432:78:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 965,
												"nodeType": "ExpressionStatement",
												"src": "5432:78:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 968,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 950,
															"src": "5535:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 967,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "5527:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint184_$",
															"typeString": "type(uint184)"
														},
														"typeName": {
															"id": 966,
															"name": "uint184",
															"nodeType": "ElementaryTypeName",
															"src": "5527:7:5",
															"typeDescriptions": {}
														}
													},
													"id": 969,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "5527:14:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint184",
														"typeString": "uint184"
													}
												},
												"functionReturnParameters": 954,
												"id": 970,
												"nodeType": "Return",
												"src": "5520:21:5"
											}
										]
									},
									"documentation": {
										"id": 948,
										"nodeType": "StructuredDocumentation",
										"src": "5033:318:5",
										"text": " @dev Returns the downcasted uint184 from uint256, reverting on\n overflow (when the input is greater than largest uint184).\n Counterpart to Solidity's `uint184` operator.\n Requirements:\n - input must fit into 184 bits\n _Available since v4.7._"
									},
									"id": 972,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toUint184",
									"nameLocation": "5365:9:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 951,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 950,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "5383:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 972,
												"src": "5375:13:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 949,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "5375:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "5374:15:5"
									},
									"returnParameters": {
										"id": 954,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 953,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 972,
												"src": "5413:7:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint184",
													"typeString": "uint184"
												},
												"typeName": {
													"id": 952,
													"name": "uint184",
													"nodeType": "ElementaryTypeName",
													"src": "5413:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint184",
														"typeString": "uint184"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "5412:9:5"
									},
									"scope": 2595,
									"src": "5356:192:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 996,
										"nodeType": "Block",
										"src": "5943:126:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 987,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 981,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 975,
																"src": "5961:5:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<=",
															"rightExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 984,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "5975:7:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint176_$",
																				"typeString": "type(uint176)"
																			},
																			"typeName": {
																				"id": 983,
																				"name": "uint176",
																				"nodeType": "ElementaryTypeName",
																				"src": "5975:7:5",
																				"typeDescriptions": {}
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_type$_t_uint176_$",
																				"typeString": "type(uint176)"
																			}
																		],
																		"id": 982,
																		"name": "type",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967269,
																		"src": "5970:4:5",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 985,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "5970:13:5",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_meta_type_t_uint176",
																		"typeString": "type(uint176)"
																	}
																},
																"id": 986,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "max",
																"nodeType": "MemberAccess",
																"src": "5970:17:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint176",
																	"typeString": "uint176"
																}
															},
															"src": "5961:26:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203137362062697473",
															"id": 988,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "5989:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_4069e970f734339c7841e84a1b26f503bff22b76884c1168dc24e2e6af9b1e30",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 176 bits\""
															},
															"value": "SafeCast: value doesn't fit in 176 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_4069e970f734339c7841e84a1b26f503bff22b76884c1168dc24e2e6af9b1e30",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 176 bits\""
															}
														],
														"id": 980,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "5953:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 989,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "5953:78:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 990,
												"nodeType": "ExpressionStatement",
												"src": "5953:78:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 993,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 975,
															"src": "6056:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 992,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "6048:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint176_$",
															"typeString": "type(uint176)"
														},
														"typeName": {
															"id": 991,
															"name": "uint176",
															"nodeType": "ElementaryTypeName",
															"src": "6048:7:5",
															"typeDescriptions": {}
														}
													},
													"id": 994,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "6048:14:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint176",
														"typeString": "uint176"
													}
												},
												"functionReturnParameters": 979,
												"id": 995,
												"nodeType": "Return",
												"src": "6041:21:5"
											}
										]
									},
									"documentation": {
										"id": 973,
										"nodeType": "StructuredDocumentation",
										"src": "5554:318:5",
										"text": " @dev Returns the downcasted uint176 from uint256, reverting on\n overflow (when the input is greater than largest uint176).\n Counterpart to Solidity's `uint176` operator.\n Requirements:\n - input must fit into 176 bits\n _Available since v4.7._"
									},
									"id": 997,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toUint176",
									"nameLocation": "5886:9:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 976,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 975,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "5904:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 997,
												"src": "5896:13:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 974,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "5896:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "5895:15:5"
									},
									"returnParameters": {
										"id": 979,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 978,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 997,
												"src": "5934:7:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint176",
													"typeString": "uint176"
												},
												"typeName": {
													"id": 977,
													"name": "uint176",
													"nodeType": "ElementaryTypeName",
													"src": "5934:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint176",
														"typeString": "uint176"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "5933:9:5"
									},
									"scope": 2595,
									"src": "5877:192:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1021,
										"nodeType": "Block",
										"src": "6464:126:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 1012,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 1006,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1000,
																"src": "6482:5:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<=",
															"rightExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 1009,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "6496:7:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint168_$",
																				"typeString": "type(uint168)"
																			},
																			"typeName": {
																				"id": 1008,
																				"name": "uint168",
																				"nodeType": "ElementaryTypeName",
																				"src": "6496:7:5",
																				"typeDescriptions": {}
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_type$_t_uint168_$",
																				"typeString": "type(uint168)"
																			}
																		],
																		"id": 1007,
																		"name": "type",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967269,
																		"src": "6491:4:5",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 1010,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "6491:13:5",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_meta_type_t_uint168",
																		"typeString": "type(uint168)"
																	}
																},
																"id": 1011,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "max",
																"nodeType": "MemberAccess",
																"src": "6491:17:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint168",
																	"typeString": "uint168"
																}
															},
															"src": "6482:26:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203136382062697473",
															"id": 1013,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "6510:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_67ef32a3cbe7b34392347d335b0a7ae95c74a34ca40e4efb58f6c9a3154e85a1",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 168 bits\""
															},
															"value": "SafeCast: value doesn't fit in 168 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_67ef32a3cbe7b34392347d335b0a7ae95c74a34ca40e4efb58f6c9a3154e85a1",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 168 bits\""
															}
														],
														"id": 1005,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "6474:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1014,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "6474:78:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1015,
												"nodeType": "ExpressionStatement",
												"src": "6474:78:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1018,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1000,
															"src": "6577:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 1017,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "6569:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint168_$",
															"typeString": "type(uint168)"
														},
														"typeName": {
															"id": 1016,
															"name": "uint168",
															"nodeType": "ElementaryTypeName",
															"src": "6569:7:5",
															"typeDescriptions": {}
														}
													},
													"id": 1019,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "6569:14:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint168",
														"typeString": "uint168"
													}
												},
												"functionReturnParameters": 1004,
												"id": 1020,
												"nodeType": "Return",
												"src": "6562:21:5"
											}
										]
									},
									"documentation": {
										"id": 998,
										"nodeType": "StructuredDocumentation",
										"src": "6075:318:5",
										"text": " @dev Returns the downcasted uint168 from uint256, reverting on\n overflow (when the input is greater than largest uint168).\n Counterpart to Solidity's `uint168` operator.\n Requirements:\n - input must fit into 168 bits\n _Available since v4.7._"
									},
									"id": 1022,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toUint168",
									"nameLocation": "6407:9:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1001,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1000,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "6425:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 1022,
												"src": "6417:13:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 999,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "6417:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "6416:15:5"
									},
									"returnParameters": {
										"id": 1004,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1003,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1022,
												"src": "6455:7:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint168",
													"typeString": "uint168"
												},
												"typeName": {
													"id": 1002,
													"name": "uint168",
													"nodeType": "ElementaryTypeName",
													"src": "6455:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint168",
														"typeString": "uint168"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "6454:9:5"
									},
									"scope": 2595,
									"src": "6398:192:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1046,
										"nodeType": "Block",
										"src": "6985:126:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 1037,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 1031,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1025,
																"src": "7003:5:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<=",
															"rightExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 1034,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "7017:7:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint160_$",
																				"typeString": "type(uint160)"
																			},
																			"typeName": {
																				"id": 1033,
																				"name": "uint160",
																				"nodeType": "ElementaryTypeName",
																				"src": "7017:7:5",
																				"typeDescriptions": {}
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_type$_t_uint160_$",
																				"typeString": "type(uint160)"
																			}
																		],
																		"id": 1032,
																		"name": "type",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967269,
																		"src": "7012:4:5",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 1035,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "7012:13:5",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_meta_type_t_uint160",
																		"typeString": "type(uint160)"
																	}
																},
																"id": 1036,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "max",
																"nodeType": "MemberAccess",
																"src": "7012:17:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint160",
																	"typeString": "uint160"
																}
															},
															"src": "7003:26:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203136302062697473",
															"id": 1038,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "7031:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_976ecce9083debfe29d3a99b955facf24b8725f1b964d1a5bb4197ffcd60ab9d",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 160 bits\""
															},
															"value": "SafeCast: value doesn't fit in 160 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_976ecce9083debfe29d3a99b955facf24b8725f1b964d1a5bb4197ffcd60ab9d",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 160 bits\""
															}
														],
														"id": 1030,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "6995:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1039,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "6995:78:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1040,
												"nodeType": "ExpressionStatement",
												"src": "6995:78:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1043,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1025,
															"src": "7098:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 1042,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "7090:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint160_$",
															"typeString": "type(uint160)"
														},
														"typeName": {
															"id": 1041,
															"name": "uint160",
															"nodeType": "ElementaryTypeName",
															"src": "7090:7:5",
															"typeDescriptions": {}
														}
													},
													"id": 1044,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "7090:14:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint160",
														"typeString": "uint160"
													}
												},
												"functionReturnParameters": 1029,
												"id": 1045,
												"nodeType": "Return",
												"src": "7083:21:5"
											}
										]
									},
									"documentation": {
										"id": 1023,
										"nodeType": "StructuredDocumentation",
										"src": "6596:318:5",
										"text": " @dev Returns the downcasted uint160 from uint256, reverting on\n overflow (when the input is greater than largest uint160).\n Counterpart to Solidity's `uint160` operator.\n Requirements:\n - input must fit into 160 bits\n _Available since v4.7._"
									},
									"id": 1047,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toUint160",
									"nameLocation": "6928:9:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1026,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1025,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "6946:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 1047,
												"src": "6938:13:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 1024,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "6938:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "6937:15:5"
									},
									"returnParameters": {
										"id": 1029,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1028,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1047,
												"src": "6976:7:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint160",
													"typeString": "uint160"
												},
												"typeName": {
													"id": 1027,
													"name": "uint160",
													"nodeType": "ElementaryTypeName",
													"src": "6976:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint160",
														"typeString": "uint160"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "6975:9:5"
									},
									"scope": 2595,
									"src": "6919:192:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1071,
										"nodeType": "Block",
										"src": "7506:126:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 1062,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 1056,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1050,
																"src": "7524:5:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<=",
															"rightExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 1059,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "7538:7:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint152_$",
																				"typeString": "type(uint152)"
																			},
																			"typeName": {
																				"id": 1058,
																				"name": "uint152",
																				"nodeType": "ElementaryTypeName",
																				"src": "7538:7:5",
																				"typeDescriptions": {}
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_type$_t_uint152_$",
																				"typeString": "type(uint152)"
																			}
																		],
																		"id": 1057,
																		"name": "type",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967269,
																		"src": "7533:4:5",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 1060,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "7533:13:5",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_meta_type_t_uint152",
																		"typeString": "type(uint152)"
																	}
																},
																"id": 1061,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "max",
																"nodeType": "MemberAccess",
																"src": "7533:17:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint152",
																	"typeString": "uint152"
																}
															},
															"src": "7524:26:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203135322062697473",
															"id": 1063,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "7552:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_211cad43a2caf5f01e34af51190b8a7b6f3d9c195bd25586ea12242191b97831",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 152 bits\""
															},
															"value": "SafeCast: value doesn't fit in 152 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_211cad43a2caf5f01e34af51190b8a7b6f3d9c195bd25586ea12242191b97831",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 152 bits\""
															}
														],
														"id": 1055,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "7516:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1064,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "7516:78:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1065,
												"nodeType": "ExpressionStatement",
												"src": "7516:78:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1068,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1050,
															"src": "7619:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 1067,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "7611:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint152_$",
															"typeString": "type(uint152)"
														},
														"typeName": {
															"id": 1066,
															"name": "uint152",
															"nodeType": "ElementaryTypeName",
															"src": "7611:7:5",
															"typeDescriptions": {}
														}
													},
													"id": 1069,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "7611:14:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint152",
														"typeString": "uint152"
													}
												},
												"functionReturnParameters": 1054,
												"id": 1070,
												"nodeType": "Return",
												"src": "7604:21:5"
											}
										]
									},
									"documentation": {
										"id": 1048,
										"nodeType": "StructuredDocumentation",
										"src": "7117:318:5",
										"text": " @dev Returns the downcasted uint152 from uint256, reverting on\n overflow (when the input is greater than largest uint152).\n Counterpart to Solidity's `uint152` operator.\n Requirements:\n - input must fit into 152 bits\n _Available since v4.7._"
									},
									"id": 1072,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toUint152",
									"nameLocation": "7449:9:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1051,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1050,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "7467:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 1072,
												"src": "7459:13:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 1049,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "7459:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "7458:15:5"
									},
									"returnParameters": {
										"id": 1054,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1053,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1072,
												"src": "7497:7:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint152",
													"typeString": "uint152"
												},
												"typeName": {
													"id": 1052,
													"name": "uint152",
													"nodeType": "ElementaryTypeName",
													"src": "7497:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint152",
														"typeString": "uint152"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "7496:9:5"
									},
									"scope": 2595,
									"src": "7440:192:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1096,
										"nodeType": "Block",
										"src": "8027:126:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 1087,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 1081,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1075,
																"src": "8045:5:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<=",
															"rightExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 1084,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "8059:7:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint144_$",
																				"typeString": "type(uint144)"
																			},
																			"typeName": {
																				"id": 1083,
																				"name": "uint144",
																				"nodeType": "ElementaryTypeName",
																				"src": "8059:7:5",
																				"typeDescriptions": {}
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_type$_t_uint144_$",
																				"typeString": "type(uint144)"
																			}
																		],
																		"id": 1082,
																		"name": "type",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967269,
																		"src": "8054:4:5",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 1085,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "8054:13:5",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_meta_type_t_uint144",
																		"typeString": "type(uint144)"
																	}
																},
																"id": 1086,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "max",
																"nodeType": "MemberAccess",
																"src": "8054:17:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint144",
																	"typeString": "uint144"
																}
															},
															"src": "8045:26:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203134342062697473",
															"id": 1088,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "8073:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_17d8c5a6d3b2fd2517ba2e4a2ac70a3367cd362448f8338aaa6edf8bfd812bab",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 144 bits\""
															},
															"value": "SafeCast: value doesn't fit in 144 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_17d8c5a6d3b2fd2517ba2e4a2ac70a3367cd362448f8338aaa6edf8bfd812bab",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 144 bits\""
															}
														],
														"id": 1080,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "8037:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1089,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "8037:78:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1090,
												"nodeType": "ExpressionStatement",
												"src": "8037:78:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1093,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1075,
															"src": "8140:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 1092,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "8132:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint144_$",
															"typeString": "type(uint144)"
														},
														"typeName": {
															"id": 1091,
															"name": "uint144",
															"nodeType": "ElementaryTypeName",
															"src": "8132:7:5",
															"typeDescriptions": {}
														}
													},
													"id": 1094,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "8132:14:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint144",
														"typeString": "uint144"
													}
												},
												"functionReturnParameters": 1079,
												"id": 1095,
												"nodeType": "Return",
												"src": "8125:21:5"
											}
										]
									},
									"documentation": {
										"id": 1073,
										"nodeType": "StructuredDocumentation",
										"src": "7638:318:5",
										"text": " @dev Returns the downcasted uint144 from uint256, reverting on\n overflow (when the input is greater than largest uint144).\n Counterpart to Solidity's `uint144` operator.\n Requirements:\n - input must fit into 144 bits\n _Available since v4.7._"
									},
									"id": 1097,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toUint144",
									"nameLocation": "7970:9:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1076,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1075,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "7988:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 1097,
												"src": "7980:13:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 1074,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "7980:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "7979:15:5"
									},
									"returnParameters": {
										"id": 1079,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1078,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1097,
												"src": "8018:7:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint144",
													"typeString": "uint144"
												},
												"typeName": {
													"id": 1077,
													"name": "uint144",
													"nodeType": "ElementaryTypeName",
													"src": "8018:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint144",
														"typeString": "uint144"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "8017:9:5"
									},
									"scope": 2595,
									"src": "7961:192:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1121,
										"nodeType": "Block",
										"src": "8548:126:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 1112,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 1106,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1100,
																"src": "8566:5:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<=",
															"rightExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 1109,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "8580:7:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint136_$",
																				"typeString": "type(uint136)"
																			},
																			"typeName": {
																				"id": 1108,
																				"name": "uint136",
																				"nodeType": "ElementaryTypeName",
																				"src": "8580:7:5",
																				"typeDescriptions": {}
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_type$_t_uint136_$",
																				"typeString": "type(uint136)"
																			}
																		],
																		"id": 1107,
																		"name": "type",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967269,
																		"src": "8575:4:5",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 1110,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "8575:13:5",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_meta_type_t_uint136",
																		"typeString": "type(uint136)"
																	}
																},
																"id": 1111,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "max",
																"nodeType": "MemberAccess",
																"src": "8575:17:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint136",
																	"typeString": "uint136"
																}
															},
															"src": "8566:26:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203133362062697473",
															"id": 1113,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "8594:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_8b1f81e2e2913e1cee9dba7bcd9837bbf8a8122edaac4afc578271db3c25a56a",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 136 bits\""
															},
															"value": "SafeCast: value doesn't fit in 136 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_8b1f81e2e2913e1cee9dba7bcd9837bbf8a8122edaac4afc578271db3c25a56a",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 136 bits\""
															}
														],
														"id": 1105,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "8558:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1114,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "8558:78:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1115,
												"nodeType": "ExpressionStatement",
												"src": "8558:78:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1118,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1100,
															"src": "8661:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 1117,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "8653:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint136_$",
															"typeString": "type(uint136)"
														},
														"typeName": {
															"id": 1116,
															"name": "uint136",
															"nodeType": "ElementaryTypeName",
															"src": "8653:7:5",
															"typeDescriptions": {}
														}
													},
													"id": 1119,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "8653:14:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint136",
														"typeString": "uint136"
													}
												},
												"functionReturnParameters": 1104,
												"id": 1120,
												"nodeType": "Return",
												"src": "8646:21:5"
											}
										]
									},
									"documentation": {
										"id": 1098,
										"nodeType": "StructuredDocumentation",
										"src": "8159:318:5",
										"text": " @dev Returns the downcasted uint136 from uint256, reverting on\n overflow (when the input is greater than largest uint136).\n Counterpart to Solidity's `uint136` operator.\n Requirements:\n - input must fit into 136 bits\n _Available since v4.7._"
									},
									"id": 1122,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toUint136",
									"nameLocation": "8491:9:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1101,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1100,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "8509:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 1122,
												"src": "8501:13:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 1099,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "8501:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "8500:15:5"
									},
									"returnParameters": {
										"id": 1104,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1103,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1122,
												"src": "8539:7:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint136",
													"typeString": "uint136"
												},
												"typeName": {
													"id": 1102,
													"name": "uint136",
													"nodeType": "ElementaryTypeName",
													"src": "8539:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint136",
														"typeString": "uint136"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "8538:9:5"
									},
									"scope": 2595,
									"src": "8482:192:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1146,
										"nodeType": "Block",
										"src": "9069:126:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 1137,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 1131,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1125,
																"src": "9087:5:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<=",
															"rightExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 1134,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "9101:7:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint128_$",
																				"typeString": "type(uint128)"
																			},
																			"typeName": {
																				"id": 1133,
																				"name": "uint128",
																				"nodeType": "ElementaryTypeName",
																				"src": "9101:7:5",
																				"typeDescriptions": {}
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_type$_t_uint128_$",
																				"typeString": "type(uint128)"
																			}
																		],
																		"id": 1132,
																		"name": "type",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967269,
																		"src": "9096:4:5",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 1135,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "9096:13:5",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_meta_type_t_uint128",
																		"typeString": "type(uint128)"
																	}
																},
																"id": 1136,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "max",
																"nodeType": "MemberAccess",
																"src": "9096:17:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint128",
																	"typeString": "uint128"
																}
															},
															"src": "9087:26:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203132382062697473",
															"id": 1138,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "9115:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 128 bits\""
															},
															"value": "SafeCast: value doesn't fit in 128 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 128 bits\""
															}
														],
														"id": 1130,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "9079:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1139,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "9079:78:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1140,
												"nodeType": "ExpressionStatement",
												"src": "9079:78:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1143,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1125,
															"src": "9182:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 1142,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "9174:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint128_$",
															"typeString": "type(uint128)"
														},
														"typeName": {
															"id": 1141,
															"name": "uint128",
															"nodeType": "ElementaryTypeName",
															"src": "9174:7:5",
															"typeDescriptions": {}
														}
													},
													"id": 1144,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "9174:14:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint128",
														"typeString": "uint128"
													}
												},
												"functionReturnParameters": 1129,
												"id": 1145,
												"nodeType": "Return",
												"src": "9167:21:5"
											}
										]
									},
									"documentation": {
										"id": 1123,
										"nodeType": "StructuredDocumentation",
										"src": "8680:318:5",
										"text": " @dev Returns the downcasted uint128 from uint256, reverting on\n overflow (when the input is greater than largest uint128).\n Counterpart to Solidity's `uint128` operator.\n Requirements:\n - input must fit into 128 bits\n _Available since v2.5._"
									},
									"id": 1147,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toUint128",
									"nameLocation": "9012:9:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1126,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1125,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "9030:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 1147,
												"src": "9022:13:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 1124,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "9022:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "9021:15:5"
									},
									"returnParameters": {
										"id": 1129,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1128,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1147,
												"src": "9060:7:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint128",
													"typeString": "uint128"
												},
												"typeName": {
													"id": 1127,
													"name": "uint128",
													"nodeType": "ElementaryTypeName",
													"src": "9060:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint128",
														"typeString": "uint128"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "9059:9:5"
									},
									"scope": 2595,
									"src": "9003:192:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1171,
										"nodeType": "Block",
										"src": "9590:126:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 1162,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 1156,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1150,
																"src": "9608:5:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<=",
															"rightExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 1159,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "9622:7:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint120_$",
																				"typeString": "type(uint120)"
																			},
																			"typeName": {
																				"id": 1158,
																				"name": "uint120",
																				"nodeType": "ElementaryTypeName",
																				"src": "9622:7:5",
																				"typeDescriptions": {}
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_type$_t_uint120_$",
																				"typeString": "type(uint120)"
																			}
																		],
																		"id": 1157,
																		"name": "type",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967269,
																		"src": "9617:4:5",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 1160,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "9617:13:5",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_meta_type_t_uint120",
																		"typeString": "type(uint120)"
																	}
																},
																"id": 1161,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "max",
																"nodeType": "MemberAccess",
																"src": "9617:17:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint120",
																	"typeString": "uint120"
																}
															},
															"src": "9608:26:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203132302062697473",
															"id": 1163,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "9636:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_3c40c26bb27060cce77002ca0c426dcc1bef2d367c195ca2eb24bd8b2cc1bb09",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 120 bits\""
															},
															"value": "SafeCast: value doesn't fit in 120 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_3c40c26bb27060cce77002ca0c426dcc1bef2d367c195ca2eb24bd8b2cc1bb09",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 120 bits\""
															}
														],
														"id": 1155,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "9600:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1164,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "9600:78:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1165,
												"nodeType": "ExpressionStatement",
												"src": "9600:78:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1168,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1150,
															"src": "9703:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 1167,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "9695:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint120_$",
															"typeString": "type(uint120)"
														},
														"typeName": {
															"id": 1166,
															"name": "uint120",
															"nodeType": "ElementaryTypeName",
															"src": "9695:7:5",
															"typeDescriptions": {}
														}
													},
													"id": 1169,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "9695:14:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint120",
														"typeString": "uint120"
													}
												},
												"functionReturnParameters": 1154,
												"id": 1170,
												"nodeType": "Return",
												"src": "9688:21:5"
											}
										]
									},
									"documentation": {
										"id": 1148,
										"nodeType": "StructuredDocumentation",
										"src": "9201:318:5",
										"text": " @dev Returns the downcasted uint120 from uint256, reverting on\n overflow (when the input is greater than largest uint120).\n Counterpart to Solidity's `uint120` operator.\n Requirements:\n - input must fit into 120 bits\n _Available since v4.7._"
									},
									"id": 1172,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toUint120",
									"nameLocation": "9533:9:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1151,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1150,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "9551:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 1172,
												"src": "9543:13:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 1149,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "9543:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "9542:15:5"
									},
									"returnParameters": {
										"id": 1154,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1153,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1172,
												"src": "9581:7:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint120",
													"typeString": "uint120"
												},
												"typeName": {
													"id": 1152,
													"name": "uint120",
													"nodeType": "ElementaryTypeName",
													"src": "9581:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint120",
														"typeString": "uint120"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "9580:9:5"
									},
									"scope": 2595,
									"src": "9524:192:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1196,
										"nodeType": "Block",
										"src": "10111:126:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 1187,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 1181,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1175,
																"src": "10129:5:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<=",
															"rightExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 1184,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "10143:7:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint112_$",
																				"typeString": "type(uint112)"
																			},
																			"typeName": {
																				"id": 1183,
																				"name": "uint112",
																				"nodeType": "ElementaryTypeName",
																				"src": "10143:7:5",
																				"typeDescriptions": {}
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_type$_t_uint112_$",
																				"typeString": "type(uint112)"
																			}
																		],
																		"id": 1182,
																		"name": "type",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967269,
																		"src": "10138:4:5",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 1185,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "10138:13:5",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_meta_type_t_uint112",
																		"typeString": "type(uint112)"
																	}
																},
																"id": 1186,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "max",
																"nodeType": "MemberAccess",
																"src": "10138:17:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint112",
																	"typeString": "uint112"
																}
															},
															"src": "10129:26:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203131322062697473",
															"id": 1188,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "10157:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_45659ae152ef697531e1c1115de07c87af91ac22466c3e76b808821799776efd",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 112 bits\""
															},
															"value": "SafeCast: value doesn't fit in 112 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_45659ae152ef697531e1c1115de07c87af91ac22466c3e76b808821799776efd",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 112 bits\""
															}
														],
														"id": 1180,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "10121:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1189,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "10121:78:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1190,
												"nodeType": "ExpressionStatement",
												"src": "10121:78:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1193,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1175,
															"src": "10224:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 1192,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "10216:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint112_$",
															"typeString": "type(uint112)"
														},
														"typeName": {
															"id": 1191,
															"name": "uint112",
															"nodeType": "ElementaryTypeName",
															"src": "10216:7:5",
															"typeDescriptions": {}
														}
													},
													"id": 1194,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "10216:14:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint112",
														"typeString": "uint112"
													}
												},
												"functionReturnParameters": 1179,
												"id": 1195,
												"nodeType": "Return",
												"src": "10209:21:5"
											}
										]
									},
									"documentation": {
										"id": 1173,
										"nodeType": "StructuredDocumentation",
										"src": "9722:318:5",
										"text": " @dev Returns the downcasted uint112 from uint256, reverting on\n overflow (when the input is greater than largest uint112).\n Counterpart to Solidity's `uint112` operator.\n Requirements:\n - input must fit into 112 bits\n _Available since v4.7._"
									},
									"id": 1197,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toUint112",
									"nameLocation": "10054:9:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1176,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1175,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "10072:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 1197,
												"src": "10064:13:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 1174,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "10064:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "10063:15:5"
									},
									"returnParameters": {
										"id": 1179,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1178,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1197,
												"src": "10102:7:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint112",
													"typeString": "uint112"
												},
												"typeName": {
													"id": 1177,
													"name": "uint112",
													"nodeType": "ElementaryTypeName",
													"src": "10102:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint112",
														"typeString": "uint112"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "10101:9:5"
									},
									"scope": 2595,
									"src": "10045:192:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1221,
										"nodeType": "Block",
										"src": "10632:126:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 1212,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 1206,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1200,
																"src": "10650:5:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<=",
															"rightExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 1209,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "10664:7:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint104_$",
																				"typeString": "type(uint104)"
																			},
																			"typeName": {
																				"id": 1208,
																				"name": "uint104",
																				"nodeType": "ElementaryTypeName",
																				"src": "10664:7:5",
																				"typeDescriptions": {}
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_type$_t_uint104_$",
																				"typeString": "type(uint104)"
																			}
																		],
																		"id": 1207,
																		"name": "type",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967269,
																		"src": "10659:4:5",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 1210,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "10659:13:5",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_meta_type_t_uint104",
																		"typeString": "type(uint104)"
																	}
																},
																"id": 1211,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "max",
																"nodeType": "MemberAccess",
																"src": "10659:17:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint104",
																	"typeString": "uint104"
																}
															},
															"src": "10650:26:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203130342062697473",
															"id": 1213,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "10678:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_5d7f3e1b7e9f9a06fded6b093c6fd1473ca0a14cc4bb683db904e803e2482981",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 104 bits\""
															},
															"value": "SafeCast: value doesn't fit in 104 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_5d7f3e1b7e9f9a06fded6b093c6fd1473ca0a14cc4bb683db904e803e2482981",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 104 bits\""
															}
														],
														"id": 1205,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "10642:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1214,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "10642:78:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1215,
												"nodeType": "ExpressionStatement",
												"src": "10642:78:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1218,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1200,
															"src": "10745:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 1217,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "10737:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint104_$",
															"typeString": "type(uint104)"
														},
														"typeName": {
															"id": 1216,
															"name": "uint104",
															"nodeType": "ElementaryTypeName",
															"src": "10737:7:5",
															"typeDescriptions": {}
														}
													},
													"id": 1219,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "10737:14:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint104",
														"typeString": "uint104"
													}
												},
												"functionReturnParameters": 1204,
												"id": 1220,
												"nodeType": "Return",
												"src": "10730:21:5"
											}
										]
									},
									"documentation": {
										"id": 1198,
										"nodeType": "StructuredDocumentation",
										"src": "10243:318:5",
										"text": " @dev Returns the downcasted uint104 from uint256, reverting on\n overflow (when the input is greater than largest uint104).\n Counterpart to Solidity's `uint104` operator.\n Requirements:\n - input must fit into 104 bits\n _Available since v4.7._"
									},
									"id": 1222,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toUint104",
									"nameLocation": "10575:9:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1201,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1200,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "10593:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 1222,
												"src": "10585:13:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 1199,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "10585:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "10584:15:5"
									},
									"returnParameters": {
										"id": 1204,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1203,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1222,
												"src": "10623:7:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint104",
													"typeString": "uint104"
												},
												"typeName": {
													"id": 1202,
													"name": "uint104",
													"nodeType": "ElementaryTypeName",
													"src": "10623:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint104",
														"typeString": "uint104"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "10622:9:5"
									},
									"scope": 2595,
									"src": "10566:192:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1246,
										"nodeType": "Block",
										"src": "11147:123:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 1237,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 1231,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1225,
																"src": "11165:5:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<=",
															"rightExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 1234,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "11179:6:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint96_$",
																				"typeString": "type(uint96)"
																			},
																			"typeName": {
																				"id": 1233,
																				"name": "uint96",
																				"nodeType": "ElementaryTypeName",
																				"src": "11179:6:5",
																				"typeDescriptions": {}
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_type$_t_uint96_$",
																				"typeString": "type(uint96)"
																			}
																		],
																		"id": 1232,
																		"name": "type",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967269,
																		"src": "11174:4:5",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 1235,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "11174:12:5",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_meta_type_t_uint96",
																		"typeString": "type(uint96)"
																	}
																},
																"id": 1236,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "max",
																"nodeType": "MemberAccess",
																"src": "11174:16:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint96",
																	"typeString": "uint96"
																}
															},
															"src": "11165:25:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2039362062697473",
															"id": 1238,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "11192:40:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_06d20189090e973729391526269baef79c35dd621633195648e5f8309eef9e19",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 96 bits\""
															},
															"value": "SafeCast: value doesn't fit in 96 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_06d20189090e973729391526269baef79c35dd621633195648e5f8309eef9e19",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 96 bits\""
															}
														],
														"id": 1230,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "11157:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1239,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "11157:76:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1240,
												"nodeType": "ExpressionStatement",
												"src": "11157:76:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1243,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1225,
															"src": "11257:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 1242,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "11250:6:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint96_$",
															"typeString": "type(uint96)"
														},
														"typeName": {
															"id": 1241,
															"name": "uint96",
															"nodeType": "ElementaryTypeName",
															"src": "11250:6:5",
															"typeDescriptions": {}
														}
													},
													"id": 1244,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "11250:13:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint96",
														"typeString": "uint96"
													}
												},
												"functionReturnParameters": 1229,
												"id": 1245,
												"nodeType": "Return",
												"src": "11243:20:5"
											}
										]
									},
									"documentation": {
										"id": 1223,
										"nodeType": "StructuredDocumentation",
										"src": "10764:314:5",
										"text": " @dev Returns the downcasted uint96 from uint256, reverting on\n overflow (when the input is greater than largest uint96).\n Counterpart to Solidity's `uint96` operator.\n Requirements:\n - input must fit into 96 bits\n _Available since v4.2._"
									},
									"id": 1247,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toUint96",
									"nameLocation": "11092:8:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1226,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1225,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "11109:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 1247,
												"src": "11101:13:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 1224,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "11101:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "11100:15:5"
									},
									"returnParameters": {
										"id": 1229,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1228,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1247,
												"src": "11139:6:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint96",
													"typeString": "uint96"
												},
												"typeName": {
													"id": 1227,
													"name": "uint96",
													"nodeType": "ElementaryTypeName",
													"src": "11139:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint96",
														"typeString": "uint96"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "11138:8:5"
									},
									"scope": 2595,
									"src": "11083:187:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1271,
										"nodeType": "Block",
										"src": "11659:123:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 1262,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 1256,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1250,
																"src": "11677:5:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<=",
															"rightExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 1259,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "11691:6:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint88_$",
																				"typeString": "type(uint88)"
																			},
																			"typeName": {
																				"id": 1258,
																				"name": "uint88",
																				"nodeType": "ElementaryTypeName",
																				"src": "11691:6:5",
																				"typeDescriptions": {}
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_type$_t_uint88_$",
																				"typeString": "type(uint88)"
																			}
																		],
																		"id": 1257,
																		"name": "type",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967269,
																		"src": "11686:4:5",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 1260,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "11686:12:5",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_meta_type_t_uint88",
																		"typeString": "type(uint88)"
																	}
																},
																"id": 1261,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "max",
																"nodeType": "MemberAccess",
																"src": "11686:16:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint88",
																	"typeString": "uint88"
																}
															},
															"src": "11677:25:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2038382062697473",
															"id": 1263,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "11704:40:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_ae080bd7a76a46f0a0caf00941bc2cdf6002799ca2813a3af7295019576d715d",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 88 bits\""
															},
															"value": "SafeCast: value doesn't fit in 88 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_ae080bd7a76a46f0a0caf00941bc2cdf6002799ca2813a3af7295019576d715d",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 88 bits\""
															}
														],
														"id": 1255,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "11669:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1264,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "11669:76:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1265,
												"nodeType": "ExpressionStatement",
												"src": "11669:76:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1268,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1250,
															"src": "11769:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 1267,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "11762:6:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint88_$",
															"typeString": "type(uint88)"
														},
														"typeName": {
															"id": 1266,
															"name": "uint88",
															"nodeType": "ElementaryTypeName",
															"src": "11762:6:5",
															"typeDescriptions": {}
														}
													},
													"id": 1269,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "11762:13:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint88",
														"typeString": "uint88"
													}
												},
												"functionReturnParameters": 1254,
												"id": 1270,
												"nodeType": "Return",
												"src": "11755:20:5"
											}
										]
									},
									"documentation": {
										"id": 1248,
										"nodeType": "StructuredDocumentation",
										"src": "11276:314:5",
										"text": " @dev Returns the downcasted uint88 from uint256, reverting on\n overflow (when the input is greater than largest uint88).\n Counterpart to Solidity's `uint88` operator.\n Requirements:\n - input must fit into 88 bits\n _Available since v4.7._"
									},
									"id": 1272,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toUint88",
									"nameLocation": "11604:8:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1251,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1250,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "11621:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 1272,
												"src": "11613:13:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 1249,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "11613:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "11612:15:5"
									},
									"returnParameters": {
										"id": 1254,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1253,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1272,
												"src": "11651:6:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint88",
													"typeString": "uint88"
												},
												"typeName": {
													"id": 1252,
													"name": "uint88",
													"nodeType": "ElementaryTypeName",
													"src": "11651:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint88",
														"typeString": "uint88"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "11650:8:5"
									},
									"scope": 2595,
									"src": "11595:187:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1296,
										"nodeType": "Block",
										"src": "12171:123:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 1287,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 1281,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1275,
																"src": "12189:5:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<=",
															"rightExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 1284,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "12203:6:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint80_$",
																				"typeString": "type(uint80)"
																			},
																			"typeName": {
																				"id": 1283,
																				"name": "uint80",
																				"nodeType": "ElementaryTypeName",
																				"src": "12203:6:5",
																				"typeDescriptions": {}
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_type$_t_uint80_$",
																				"typeString": "type(uint80)"
																			}
																		],
																		"id": 1282,
																		"name": "type",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967269,
																		"src": "12198:4:5",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 1285,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "12198:12:5",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_meta_type_t_uint80",
																		"typeString": "type(uint80)"
																	}
																},
																"id": 1286,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "max",
																"nodeType": "MemberAccess",
																"src": "12198:16:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint80",
																	"typeString": "uint80"
																}
															},
															"src": "12189:25:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2038302062697473",
															"id": 1288,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "12216:40:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_3cba87c71fade7d3cd7b673c159aab98afc040a5369691a33559d905d20ab5d1",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 80 bits\""
															},
															"value": "SafeCast: value doesn't fit in 80 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_3cba87c71fade7d3cd7b673c159aab98afc040a5369691a33559d905d20ab5d1",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 80 bits\""
															}
														],
														"id": 1280,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "12181:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1289,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "12181:76:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1290,
												"nodeType": "ExpressionStatement",
												"src": "12181:76:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1293,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1275,
															"src": "12281:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 1292,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "12274:6:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint80_$",
															"typeString": "type(uint80)"
														},
														"typeName": {
															"id": 1291,
															"name": "uint80",
															"nodeType": "ElementaryTypeName",
															"src": "12274:6:5",
															"typeDescriptions": {}
														}
													},
													"id": 1294,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "12274:13:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint80",
														"typeString": "uint80"
													}
												},
												"functionReturnParameters": 1279,
												"id": 1295,
												"nodeType": "Return",
												"src": "12267:20:5"
											}
										]
									},
									"documentation": {
										"id": 1273,
										"nodeType": "StructuredDocumentation",
										"src": "11788:314:5",
										"text": " @dev Returns the downcasted uint80 from uint256, reverting on\n overflow (when the input is greater than largest uint80).\n Counterpart to Solidity's `uint80` operator.\n Requirements:\n - input must fit into 80 bits\n _Available since v4.7._"
									},
									"id": 1297,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toUint80",
									"nameLocation": "12116:8:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1276,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1275,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "12133:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 1297,
												"src": "12125:13:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 1274,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "12125:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "12124:15:5"
									},
									"returnParameters": {
										"id": 1279,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1278,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1297,
												"src": "12163:6:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint80",
													"typeString": "uint80"
												},
												"typeName": {
													"id": 1277,
													"name": "uint80",
													"nodeType": "ElementaryTypeName",
													"src": "12163:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint80",
														"typeString": "uint80"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "12162:8:5"
									},
									"scope": 2595,
									"src": "12107:187:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1321,
										"nodeType": "Block",
										"src": "12683:123:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 1312,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 1306,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1300,
																"src": "12701:5:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<=",
															"rightExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 1309,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "12715:6:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint72_$",
																				"typeString": "type(uint72)"
																			},
																			"typeName": {
																				"id": 1308,
																				"name": "uint72",
																				"nodeType": "ElementaryTypeName",
																				"src": "12715:6:5",
																				"typeDescriptions": {}
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_type$_t_uint72_$",
																				"typeString": "type(uint72)"
																			}
																		],
																		"id": 1307,
																		"name": "type",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967269,
																		"src": "12710:4:5",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 1310,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "12710:12:5",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_meta_type_t_uint72",
																		"typeString": "type(uint72)"
																	}
																},
																"id": 1311,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "max",
																"nodeType": "MemberAccess",
																"src": "12710:16:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint72",
																	"typeString": "uint72"
																}
															},
															"src": "12701:25:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2037322062697473",
															"id": 1313,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "12728:40:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_71584237cc5250b8f417982144a947efe8f4c76feba008ff32ac480e69d60606",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 72 bits\""
															},
															"value": "SafeCast: value doesn't fit in 72 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_71584237cc5250b8f417982144a947efe8f4c76feba008ff32ac480e69d60606",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 72 bits\""
															}
														],
														"id": 1305,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "12693:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1314,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "12693:76:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1315,
												"nodeType": "ExpressionStatement",
												"src": "12693:76:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1318,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1300,
															"src": "12793:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 1317,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "12786:6:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint72_$",
															"typeString": "type(uint72)"
														},
														"typeName": {
															"id": 1316,
															"name": "uint72",
															"nodeType": "ElementaryTypeName",
															"src": "12786:6:5",
															"typeDescriptions": {}
														}
													},
													"id": 1319,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "12786:13:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint72",
														"typeString": "uint72"
													}
												},
												"functionReturnParameters": 1304,
												"id": 1320,
												"nodeType": "Return",
												"src": "12779:20:5"
											}
										]
									},
									"documentation": {
										"id": 1298,
										"nodeType": "StructuredDocumentation",
										"src": "12300:314:5",
										"text": " @dev Returns the downcasted uint72 from uint256, reverting on\n overflow (when the input is greater than largest uint72).\n Counterpart to Solidity's `uint72` operator.\n Requirements:\n - input must fit into 72 bits\n _Available since v4.7._"
									},
									"id": 1322,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toUint72",
									"nameLocation": "12628:8:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1301,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1300,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "12645:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 1322,
												"src": "12637:13:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 1299,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "12637:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "12636:15:5"
									},
									"returnParameters": {
										"id": 1304,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1303,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1322,
												"src": "12675:6:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint72",
													"typeString": "uint72"
												},
												"typeName": {
													"id": 1302,
													"name": "uint72",
													"nodeType": "ElementaryTypeName",
													"src": "12675:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint72",
														"typeString": "uint72"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "12674:8:5"
									},
									"scope": 2595,
									"src": "12619:187:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1346,
										"nodeType": "Block",
										"src": "13195:123:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 1337,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 1331,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1325,
																"src": "13213:5:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<=",
															"rightExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 1334,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "13227:6:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint64_$",
																				"typeString": "type(uint64)"
																			},
																			"typeName": {
																				"id": 1333,
																				"name": "uint64",
																				"nodeType": "ElementaryTypeName",
																				"src": "13227:6:5",
																				"typeDescriptions": {}
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_type$_t_uint64_$",
																				"typeString": "type(uint64)"
																			}
																		],
																		"id": 1332,
																		"name": "type",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967269,
																		"src": "13222:4:5",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 1335,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "13222:12:5",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_meta_type_t_uint64",
																		"typeString": "type(uint64)"
																	}
																},
																"id": 1336,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "max",
																"nodeType": "MemberAccess",
																"src": "13222:16:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint64",
																	"typeString": "uint64"
																}
															},
															"src": "13213:25:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2036342062697473",
															"id": 1338,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "13240:40:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_93ae0c6bf6ffaece591a770b1865daa9f65157e541970aa9d8dc5f89a9490939",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 64 bits\""
															},
															"value": "SafeCast: value doesn't fit in 64 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_93ae0c6bf6ffaece591a770b1865daa9f65157e541970aa9d8dc5f89a9490939",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 64 bits\""
															}
														],
														"id": 1330,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "13205:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1339,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "13205:76:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1340,
												"nodeType": "ExpressionStatement",
												"src": "13205:76:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1343,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1325,
															"src": "13305:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 1342,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "13298:6:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint64_$",
															"typeString": "type(uint64)"
														},
														"typeName": {
															"id": 1341,
															"name": "uint64",
															"nodeType": "ElementaryTypeName",
															"src": "13298:6:5",
															"typeDescriptions": {}
														}
													},
													"id": 1344,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "13298:13:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint64",
														"typeString": "uint64"
													}
												},
												"functionReturnParameters": 1329,
												"id": 1345,
												"nodeType": "Return",
												"src": "13291:20:5"
											}
										]
									},
									"documentation": {
										"id": 1323,
										"nodeType": "StructuredDocumentation",
										"src": "12812:314:5",
										"text": " @dev Returns the downcasted uint64 from uint256, reverting on\n overflow (when the input is greater than largest uint64).\n Counterpart to Solidity's `uint64` operator.\n Requirements:\n - input must fit into 64 bits\n _Available since v2.5._"
									},
									"id": 1347,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toUint64",
									"nameLocation": "13140:8:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1326,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1325,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "13157:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 1347,
												"src": "13149:13:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 1324,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "13149:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "13148:15:5"
									},
									"returnParameters": {
										"id": 1329,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1328,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1347,
												"src": "13187:6:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint64",
													"typeString": "uint64"
												},
												"typeName": {
													"id": 1327,
													"name": "uint64",
													"nodeType": "ElementaryTypeName",
													"src": "13187:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint64",
														"typeString": "uint64"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "13186:8:5"
									},
									"scope": 2595,
									"src": "13131:187:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1371,
										"nodeType": "Block",
										"src": "13707:123:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 1362,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 1356,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1350,
																"src": "13725:5:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<=",
															"rightExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 1359,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "13739:6:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint56_$",
																				"typeString": "type(uint56)"
																			},
																			"typeName": {
																				"id": 1358,
																				"name": "uint56",
																				"nodeType": "ElementaryTypeName",
																				"src": "13739:6:5",
																				"typeDescriptions": {}
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_type$_t_uint56_$",
																				"typeString": "type(uint56)"
																			}
																		],
																		"id": 1357,
																		"name": "type",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967269,
																		"src": "13734:4:5",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 1360,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "13734:12:5",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_meta_type_t_uint56",
																		"typeString": "type(uint56)"
																	}
																},
																"id": 1361,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "max",
																"nodeType": "MemberAccess",
																"src": "13734:16:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint56",
																	"typeString": "uint56"
																}
															},
															"src": "13725:25:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2035362062697473",
															"id": 1363,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "13752:40:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_656ad93b5ff6665bfe05d97d51fad7c02ad79e6c43bef066c042a6900f450bc5",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 56 bits\""
															},
															"value": "SafeCast: value doesn't fit in 56 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_656ad93b5ff6665bfe05d97d51fad7c02ad79e6c43bef066c042a6900f450bc5",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 56 bits\""
															}
														],
														"id": 1355,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "13717:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1364,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "13717:76:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1365,
												"nodeType": "ExpressionStatement",
												"src": "13717:76:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1368,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1350,
															"src": "13817:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 1367,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "13810:6:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint56_$",
															"typeString": "type(uint56)"
														},
														"typeName": {
															"id": 1366,
															"name": "uint56",
															"nodeType": "ElementaryTypeName",
															"src": "13810:6:5",
															"typeDescriptions": {}
														}
													},
													"id": 1369,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "13810:13:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint56",
														"typeString": "uint56"
													}
												},
												"functionReturnParameters": 1354,
												"id": 1370,
												"nodeType": "Return",
												"src": "13803:20:5"
											}
										]
									},
									"documentation": {
										"id": 1348,
										"nodeType": "StructuredDocumentation",
										"src": "13324:314:5",
										"text": " @dev Returns the downcasted uint56 from uint256, reverting on\n overflow (when the input is greater than largest uint56).\n Counterpart to Solidity's `uint56` operator.\n Requirements:\n - input must fit into 56 bits\n _Available since v4.7._"
									},
									"id": 1372,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toUint56",
									"nameLocation": "13652:8:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1351,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1350,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "13669:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 1372,
												"src": "13661:13:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 1349,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "13661:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "13660:15:5"
									},
									"returnParameters": {
										"id": 1354,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1353,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1372,
												"src": "13699:6:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint56",
													"typeString": "uint56"
												},
												"typeName": {
													"id": 1352,
													"name": "uint56",
													"nodeType": "ElementaryTypeName",
													"src": "13699:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint56",
														"typeString": "uint56"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "13698:8:5"
									},
									"scope": 2595,
									"src": "13643:187:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1396,
										"nodeType": "Block",
										"src": "14219:123:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 1387,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 1381,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1375,
																"src": "14237:5:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<=",
															"rightExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 1384,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "14251:6:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint48_$",
																				"typeString": "type(uint48)"
																			},
																			"typeName": {
																				"id": 1383,
																				"name": "uint48",
																				"nodeType": "ElementaryTypeName",
																				"src": "14251:6:5",
																				"typeDescriptions": {}
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_type$_t_uint48_$",
																				"typeString": "type(uint48)"
																			}
																		],
																		"id": 1382,
																		"name": "type",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967269,
																		"src": "14246:4:5",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 1385,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "14246:12:5",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_meta_type_t_uint48",
																		"typeString": "type(uint48)"
																	}
																},
																"id": 1386,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "max",
																"nodeType": "MemberAccess",
																"src": "14246:16:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint48",
																	"typeString": "uint48"
																}
															},
															"src": "14237:25:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2034382062697473",
															"id": 1388,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "14264:40:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_599034f9324dd4e988c6cea5a00a30f53147fec1b01559682f18cd840028f495",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 48 bits\""
															},
															"value": "SafeCast: value doesn't fit in 48 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_599034f9324dd4e988c6cea5a00a30f53147fec1b01559682f18cd840028f495",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 48 bits\""
															}
														],
														"id": 1380,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "14229:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1389,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "14229:76:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1390,
												"nodeType": "ExpressionStatement",
												"src": "14229:76:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1393,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1375,
															"src": "14329:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 1392,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "14322:6:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint48_$",
															"typeString": "type(uint48)"
														},
														"typeName": {
															"id": 1391,
															"name": "uint48",
															"nodeType": "ElementaryTypeName",
															"src": "14322:6:5",
															"typeDescriptions": {}
														}
													},
													"id": 1394,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "14322:13:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint48",
														"typeString": "uint48"
													}
												},
												"functionReturnParameters": 1379,
												"id": 1395,
												"nodeType": "Return",
												"src": "14315:20:5"
											}
										]
									},
									"documentation": {
										"id": 1373,
										"nodeType": "StructuredDocumentation",
										"src": "13836:314:5",
										"text": " @dev Returns the downcasted uint48 from uint256, reverting on\n overflow (when the input is greater than largest uint48).\n Counterpart to Solidity's `uint48` operator.\n Requirements:\n - input must fit into 48 bits\n _Available since v4.7._"
									},
									"id": 1397,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toUint48",
									"nameLocation": "14164:8:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1376,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1375,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "14181:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 1397,
												"src": "14173:13:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 1374,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "14173:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "14172:15:5"
									},
									"returnParameters": {
										"id": 1379,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1378,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1397,
												"src": "14211:6:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint48",
													"typeString": "uint48"
												},
												"typeName": {
													"id": 1377,
													"name": "uint48",
													"nodeType": "ElementaryTypeName",
													"src": "14211:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint48",
														"typeString": "uint48"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "14210:8:5"
									},
									"scope": 2595,
									"src": "14155:187:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1421,
										"nodeType": "Block",
										"src": "14731:123:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 1412,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 1406,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1400,
																"src": "14749:5:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<=",
															"rightExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 1409,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "14763:6:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint40_$",
																				"typeString": "type(uint40)"
																			},
																			"typeName": {
																				"id": 1408,
																				"name": "uint40",
																				"nodeType": "ElementaryTypeName",
																				"src": "14763:6:5",
																				"typeDescriptions": {}
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_type$_t_uint40_$",
																				"typeString": "type(uint40)"
																			}
																		],
																		"id": 1407,
																		"name": "type",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967269,
																		"src": "14758:4:5",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 1410,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "14758:12:5",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_meta_type_t_uint40",
																		"typeString": "type(uint40)"
																	}
																},
																"id": 1411,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "max",
																"nodeType": "MemberAccess",
																"src": "14758:16:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint40",
																	"typeString": "uint40"
																}
															},
															"src": "14749:25:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2034302062697473",
															"id": 1413,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "14776:40:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_b23559c58b98a5d3ed7016699c7171ac8defa5a1d180f9a9ffa60468a5701d37",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 40 bits\""
															},
															"value": "SafeCast: value doesn't fit in 40 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_b23559c58b98a5d3ed7016699c7171ac8defa5a1d180f9a9ffa60468a5701d37",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 40 bits\""
															}
														],
														"id": 1405,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "14741:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1414,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "14741:76:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1415,
												"nodeType": "ExpressionStatement",
												"src": "14741:76:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1418,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1400,
															"src": "14841:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 1417,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "14834:6:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint40_$",
															"typeString": "type(uint40)"
														},
														"typeName": {
															"id": 1416,
															"name": "uint40",
															"nodeType": "ElementaryTypeName",
															"src": "14834:6:5",
															"typeDescriptions": {}
														}
													},
													"id": 1419,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "14834:13:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint40",
														"typeString": "uint40"
													}
												},
												"functionReturnParameters": 1404,
												"id": 1420,
												"nodeType": "Return",
												"src": "14827:20:5"
											}
										]
									},
									"documentation": {
										"id": 1398,
										"nodeType": "StructuredDocumentation",
										"src": "14348:314:5",
										"text": " @dev Returns the downcasted uint40 from uint256, reverting on\n overflow (when the input is greater than largest uint40).\n Counterpart to Solidity's `uint40` operator.\n Requirements:\n - input must fit into 40 bits\n _Available since v4.7._"
									},
									"id": 1422,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toUint40",
									"nameLocation": "14676:8:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1401,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1400,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "14693:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 1422,
												"src": "14685:13:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 1399,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "14685:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "14684:15:5"
									},
									"returnParameters": {
										"id": 1404,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1403,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1422,
												"src": "14723:6:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint40",
													"typeString": "uint40"
												},
												"typeName": {
													"id": 1402,
													"name": "uint40",
													"nodeType": "ElementaryTypeName",
													"src": "14723:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint40",
														"typeString": "uint40"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "14722:8:5"
									},
									"scope": 2595,
									"src": "14667:187:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1446,
										"nodeType": "Block",
										"src": "15243:123:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 1437,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 1431,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1425,
																"src": "15261:5:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<=",
															"rightExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 1434,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "15275:6:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint32_$",
																				"typeString": "type(uint32)"
																			},
																			"typeName": {
																				"id": 1433,
																				"name": "uint32",
																				"nodeType": "ElementaryTypeName",
																				"src": "15275:6:5",
																				"typeDescriptions": {}
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_type$_t_uint32_$",
																				"typeString": "type(uint32)"
																			}
																		],
																		"id": 1432,
																		"name": "type",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967269,
																		"src": "15270:4:5",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 1435,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "15270:12:5",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_meta_type_t_uint32",
																		"typeString": "type(uint32)"
																	}
																},
																"id": 1436,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "max",
																"nodeType": "MemberAccess",
																"src": "15270:16:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint32",
																	"typeString": "uint32"
																}
															},
															"src": "15261:25:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2033322062697473",
															"id": 1438,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "15288:40:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_c907489dafcfb622d3b83f2657a14d6da2f59e0de3116af0d6a80554c1a7cb19",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 32 bits\""
															},
															"value": "SafeCast: value doesn't fit in 32 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_c907489dafcfb622d3b83f2657a14d6da2f59e0de3116af0d6a80554c1a7cb19",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 32 bits\""
															}
														],
														"id": 1430,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "15253:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1439,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "15253:76:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1440,
												"nodeType": "ExpressionStatement",
												"src": "15253:76:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1443,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1425,
															"src": "15353:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 1442,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "15346:6:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint32_$",
															"typeString": "type(uint32)"
														},
														"typeName": {
															"id": 1441,
															"name": "uint32",
															"nodeType": "ElementaryTypeName",
															"src": "15346:6:5",
															"typeDescriptions": {}
														}
													},
													"id": 1444,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "15346:13:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"functionReturnParameters": 1429,
												"id": 1445,
												"nodeType": "Return",
												"src": "15339:20:5"
											}
										]
									},
									"documentation": {
										"id": 1423,
										"nodeType": "StructuredDocumentation",
										"src": "14860:314:5",
										"text": " @dev Returns the downcasted uint32 from uint256, reverting on\n overflow (when the input is greater than largest uint32).\n Counterpart to Solidity's `uint32` operator.\n Requirements:\n - input must fit into 32 bits\n _Available since v2.5._"
									},
									"id": 1447,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toUint32",
									"nameLocation": "15188:8:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1426,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1425,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "15205:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 1447,
												"src": "15197:13:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 1424,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "15197:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "15196:15:5"
									},
									"returnParameters": {
										"id": 1429,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1428,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1447,
												"src": "15235:6:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint32",
													"typeString": "uint32"
												},
												"typeName": {
													"id": 1427,
													"name": "uint32",
													"nodeType": "ElementaryTypeName",
													"src": "15235:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "15234:8:5"
									},
									"scope": 2595,
									"src": "15179:187:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1471,
										"nodeType": "Block",
										"src": "15755:123:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 1462,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 1456,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1450,
																"src": "15773:5:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<=",
															"rightExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 1459,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "15787:6:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint24_$",
																				"typeString": "type(uint24)"
																			},
																			"typeName": {
																				"id": 1458,
																				"name": "uint24",
																				"nodeType": "ElementaryTypeName",
																				"src": "15787:6:5",
																				"typeDescriptions": {}
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_type$_t_uint24_$",
																				"typeString": "type(uint24)"
																			}
																		],
																		"id": 1457,
																		"name": "type",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967269,
																		"src": "15782:4:5",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 1460,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "15782:12:5",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_meta_type_t_uint24",
																		"typeString": "type(uint24)"
																	}
																},
																"id": 1461,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "max",
																"nodeType": "MemberAccess",
																"src": "15782:16:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint24",
																	"typeString": "uint24"
																}
															},
															"src": "15773:25:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2032342062697473",
															"id": 1463,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "15800:40:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_f68b65aaf4574c34e9b9d1442d19636c6608b8c4dbd9331c7245f7915c8b2f55",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 24 bits\""
															},
															"value": "SafeCast: value doesn't fit in 24 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_f68b65aaf4574c34e9b9d1442d19636c6608b8c4dbd9331c7245f7915c8b2f55",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 24 bits\""
															}
														],
														"id": 1455,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "15765:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1464,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "15765:76:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1465,
												"nodeType": "ExpressionStatement",
												"src": "15765:76:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1468,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1450,
															"src": "15865:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 1467,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "15858:6:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint24_$",
															"typeString": "type(uint24)"
														},
														"typeName": {
															"id": 1466,
															"name": "uint24",
															"nodeType": "ElementaryTypeName",
															"src": "15858:6:5",
															"typeDescriptions": {}
														}
													},
													"id": 1469,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "15858:13:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint24",
														"typeString": "uint24"
													}
												},
												"functionReturnParameters": 1454,
												"id": 1470,
												"nodeType": "Return",
												"src": "15851:20:5"
											}
										]
									},
									"documentation": {
										"id": 1448,
										"nodeType": "StructuredDocumentation",
										"src": "15372:314:5",
										"text": " @dev Returns the downcasted uint24 from uint256, reverting on\n overflow (when the input is greater than largest uint24).\n Counterpart to Solidity's `uint24` operator.\n Requirements:\n - input must fit into 24 bits\n _Available since v4.7._"
									},
									"id": 1472,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toUint24",
									"nameLocation": "15700:8:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1451,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1450,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "15717:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 1472,
												"src": "15709:13:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 1449,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "15709:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "15708:15:5"
									},
									"returnParameters": {
										"id": 1454,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1453,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1472,
												"src": "15747:6:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint24",
													"typeString": "uint24"
												},
												"typeName": {
													"id": 1452,
													"name": "uint24",
													"nodeType": "ElementaryTypeName",
													"src": "15747:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint24",
														"typeString": "uint24"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "15746:8:5"
									},
									"scope": 2595,
									"src": "15691:187:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1496,
										"nodeType": "Block",
										"src": "16267:123:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 1487,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 1481,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1475,
																"src": "16285:5:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<=",
															"rightExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 1484,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "16299:6:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint16_$",
																				"typeString": "type(uint16)"
																			},
																			"typeName": {
																				"id": 1483,
																				"name": "uint16",
																				"nodeType": "ElementaryTypeName",
																				"src": "16299:6:5",
																				"typeDescriptions": {}
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_type$_t_uint16_$",
																				"typeString": "type(uint16)"
																			}
																		],
																		"id": 1482,
																		"name": "type",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967269,
																		"src": "16294:4:5",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 1485,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "16294:12:5",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_meta_type_t_uint16",
																		"typeString": "type(uint16)"
																	}
																},
																"id": 1486,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "max",
																"nodeType": "MemberAccess",
																"src": "16294:16:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint16",
																	"typeString": "uint16"
																}
															},
															"src": "16285:25:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2031362062697473",
															"id": 1488,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "16312:40:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_13d3a66f9e0e5c92bbe7743bcd3bdb4695009d5f3a96e5ff49718d715b484033",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 16 bits\""
															},
															"value": "SafeCast: value doesn't fit in 16 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_13d3a66f9e0e5c92bbe7743bcd3bdb4695009d5f3a96e5ff49718d715b484033",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 16 bits\""
															}
														],
														"id": 1480,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "16277:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1489,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "16277:76:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1490,
												"nodeType": "ExpressionStatement",
												"src": "16277:76:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1493,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1475,
															"src": "16377:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 1492,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "16370:6:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint16_$",
															"typeString": "type(uint16)"
														},
														"typeName": {
															"id": 1491,
															"name": "uint16",
															"nodeType": "ElementaryTypeName",
															"src": "16370:6:5",
															"typeDescriptions": {}
														}
													},
													"id": 1494,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "16370:13:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint16",
														"typeString": "uint16"
													}
												},
												"functionReturnParameters": 1479,
												"id": 1495,
												"nodeType": "Return",
												"src": "16363:20:5"
											}
										]
									},
									"documentation": {
										"id": 1473,
										"nodeType": "StructuredDocumentation",
										"src": "15884:314:5",
										"text": " @dev Returns the downcasted uint16 from uint256, reverting on\n overflow (when the input is greater than largest uint16).\n Counterpart to Solidity's `uint16` operator.\n Requirements:\n - input must fit into 16 bits\n _Available since v2.5._"
									},
									"id": 1497,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toUint16",
									"nameLocation": "16212:8:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1476,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1475,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "16229:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 1497,
												"src": "16221:13:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 1474,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "16221:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "16220:15:5"
									},
									"returnParameters": {
										"id": 1479,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1478,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1497,
												"src": "16259:6:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint16",
													"typeString": "uint16"
												},
												"typeName": {
													"id": 1477,
													"name": "uint16",
													"nodeType": "ElementaryTypeName",
													"src": "16259:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint16",
														"typeString": "uint16"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "16258:8:5"
									},
									"scope": 2595,
									"src": "16203:187:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1521,
										"nodeType": "Block",
										"src": "16773:120:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 1512,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 1506,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1500,
																"src": "16791:5:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<=",
															"rightExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 1509,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "16805:5:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint8_$",
																				"typeString": "type(uint8)"
																			},
																			"typeName": {
																				"id": 1508,
																				"name": "uint8",
																				"nodeType": "ElementaryTypeName",
																				"src": "16805:5:5",
																				"typeDescriptions": {}
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_type$_t_uint8_$",
																				"typeString": "type(uint8)"
																			}
																		],
																		"id": 1507,
																		"name": "type",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967269,
																		"src": "16800:4:5",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 1510,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "16800:11:5",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_meta_type_t_uint8",
																		"typeString": "type(uint8)"
																	}
																},
																"id": 1511,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "max",
																"nodeType": "MemberAccess",
																"src": "16800:15:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint8",
																	"typeString": "uint8"
																}
															},
															"src": "16791:24:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e20382062697473",
															"id": 1513,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "16817:39:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_2610961ba53259047cd57c60366c5ad0b8aabf5eb4132487619b736715a740d1",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 8 bits\""
															},
															"value": "SafeCast: value doesn't fit in 8 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_2610961ba53259047cd57c60366c5ad0b8aabf5eb4132487619b736715a740d1",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 8 bits\""
															}
														],
														"id": 1505,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "16783:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1514,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "16783:74:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1515,
												"nodeType": "ExpressionStatement",
												"src": "16783:74:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1518,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1500,
															"src": "16880:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 1517,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "16874:5:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint8_$",
															"typeString": "type(uint8)"
														},
														"typeName": {
															"id": 1516,
															"name": "uint8",
															"nodeType": "ElementaryTypeName",
															"src": "16874:5:5",
															"typeDescriptions": {}
														}
													},
													"id": 1519,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "16874:12:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint8",
														"typeString": "uint8"
													}
												},
												"functionReturnParameters": 1504,
												"id": 1520,
												"nodeType": "Return",
												"src": "16867:19:5"
											}
										]
									},
									"documentation": {
										"id": 1498,
										"nodeType": "StructuredDocumentation",
										"src": "16396:310:5",
										"text": " @dev Returns the downcasted uint8 from uint256, reverting on\n overflow (when the input is greater than largest uint8).\n Counterpart to Solidity's `uint8` operator.\n Requirements:\n - input must fit into 8 bits\n _Available since v2.5._"
									},
									"id": 1522,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toUint8",
									"nameLocation": "16720:7:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1501,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1500,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "16736:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 1522,
												"src": "16728:13:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 1499,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "16728:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "16727:15:5"
									},
									"returnParameters": {
										"id": 1504,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1503,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1522,
												"src": "16766:5:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint8",
													"typeString": "uint8"
												},
												"typeName": {
													"id": 1502,
													"name": "uint8",
													"nodeType": "ElementaryTypeName",
													"src": "16766:5:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint8",
														"typeString": "uint8"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "16765:7:5"
									},
									"scope": 2595,
									"src": "16711:182:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1542,
										"nodeType": "Block",
										"src": "17167:103:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															},
															"id": 1533,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 1531,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1525,
																"src": "17185:5:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": ">=",
															"rightExpression": {
																"hexValue": "30",
																"id": 1532,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "17194:1:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_rational_0_by_1",
																	"typeString": "int_const 0"
																},
																"value": "0"
															},
															"src": "17185:10:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c7565206d75737420626520706f736974697665",
															"id": 1534,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "17197:34:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_74e6d3a4204092bea305532ded31d3763fc378e46be3884a93ceff08a0761807",
																"typeString": "literal_string \"SafeCast: value must be positive\""
															},
															"value": "SafeCast: value must be positive"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_74e6d3a4204092bea305532ded31d3763fc378e46be3884a93ceff08a0761807",
																"typeString": "literal_string \"SafeCast: value must be positive\""
															}
														],
														"id": 1530,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "17177:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1535,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "17177:55:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1536,
												"nodeType": "ExpressionStatement",
												"src": "17177:55:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1539,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1525,
															"src": "17257:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														],
														"id": 1538,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "17249:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint256_$",
															"typeString": "type(uint256)"
														},
														"typeName": {
															"id": 1537,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "17249:7:5",
															"typeDescriptions": {}
														}
													},
													"id": 1540,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "17249:14:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"functionReturnParameters": 1529,
												"id": 1541,
												"nodeType": "Return",
												"src": "17242:21:5"
											}
										]
									},
									"documentation": {
										"id": 1523,
										"nodeType": "StructuredDocumentation",
										"src": "16899:198:5",
										"text": " @dev Converts a signed int256 into an unsigned uint256.\n Requirements:\n - input must be greater than or equal to 0.\n _Available since v3.0._"
									},
									"id": 1543,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toUint256",
									"nameLocation": "17111:9:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1526,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1525,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "17128:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 1543,
												"src": "17121:12:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												},
												"typeName": {
													"id": 1524,
													"name": "int256",
													"nodeType": "ElementaryTypeName",
													"src": "17121:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int256",
														"typeString": "int256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "17120:14:5"
									},
									"returnParameters": {
										"id": 1529,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1528,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1543,
												"src": "17158:7:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 1527,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "17158:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "17157:9:5"
									},
									"scope": 2595,
									"src": "17102:168:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1575,
										"nodeType": "Block",
										"src": "17694:153:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															"id": 1566,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 1558,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 1552,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1546,
																	"src": "17712:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": ">=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 1555,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "17726:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int248_$",
																					"typeString": "type(int248)"
																				},
																				"typeName": {
																					"id": 1554,
																					"name": "int248",
																					"nodeType": "ElementaryTypeName",
																					"src": "17726:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int248_$",
																					"typeString": "type(int248)"
																				}
																			],
																			"id": 1553,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "17721:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 1556,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "17721:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int248",
																			"typeString": "type(int248)"
																		}
																	},
																	"id": 1557,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "min",
																	"nodeType": "MemberAccess",
																	"src": "17721:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int248",
																		"typeString": "int248"
																	}
																},
																"src": "17712:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "&&",
															"rightExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 1565,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 1559,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1546,
																	"src": "17741:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "<=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 1562,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "17755:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int248_$",
																					"typeString": "type(int248)"
																				},
																				"typeName": {
																					"id": 1561,
																					"name": "int248",
																					"nodeType": "ElementaryTypeName",
																					"src": "17755:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int248_$",
																					"typeString": "type(int248)"
																				}
																			],
																			"id": 1560,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "17750:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 1563,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "17750:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int248",
																			"typeString": "type(int248)"
																		}
																	},
																	"id": 1564,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "max",
																	"nodeType": "MemberAccess",
																	"src": "17750:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int248",
																		"typeString": "int248"
																	}
																},
																"src": "17741:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"src": "17712:54:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203234382062697473",
															"id": 1567,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "17768:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_6ac19bba4607c9b45ff35f54fbc4ca64c29c7457109a16fa180ea77cdbda8593",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 248 bits\""
															},
															"value": "SafeCast: value doesn't fit in 248 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_6ac19bba4607c9b45ff35f54fbc4ca64c29c7457109a16fa180ea77cdbda8593",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 248 bits\""
															}
														],
														"id": 1551,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "17704:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1568,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "17704:106:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1569,
												"nodeType": "ExpressionStatement",
												"src": "17704:106:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1572,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1546,
															"src": "17834:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														],
														"id": 1571,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "17827:6:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_int248_$",
															"typeString": "type(int248)"
														},
														"typeName": {
															"id": 1570,
															"name": "int248",
															"nodeType": "ElementaryTypeName",
															"src": "17827:6:5",
															"typeDescriptions": {}
														}
													},
													"id": 1573,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "17827:13:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_int248",
														"typeString": "int248"
													}
												},
												"functionReturnParameters": 1550,
												"id": 1574,
												"nodeType": "Return",
												"src": "17820:20:5"
											}
										]
									},
									"documentation": {
										"id": 1544,
										"nodeType": "StructuredDocumentation",
										"src": "17276:350:5",
										"text": " @dev Returns the downcasted int248 from int256, reverting on\n overflow (when the input is less than smallest int248 or\n greater than largest int248).\n Counterpart to Solidity's `int248` operator.\n Requirements:\n - input must fit into 248 bits\n _Available since v4.7._"
									},
									"id": 1576,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toInt248",
									"nameLocation": "17640:8:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1547,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1546,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "17656:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 1576,
												"src": "17649:12:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												},
												"typeName": {
													"id": 1545,
													"name": "int256",
													"nodeType": "ElementaryTypeName",
													"src": "17649:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int256",
														"typeString": "int256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "17648:14:5"
									},
									"returnParameters": {
										"id": 1550,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1549,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1576,
												"src": "17686:6:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int248",
													"typeString": "int248"
												},
												"typeName": {
													"id": 1548,
													"name": "int248",
													"nodeType": "ElementaryTypeName",
													"src": "17686:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int248",
														"typeString": "int248"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "17685:8:5"
									},
									"scope": 2595,
									"src": "17631:216:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1608,
										"nodeType": "Block",
										"src": "18271:153:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															"id": 1599,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 1591,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 1585,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1579,
																	"src": "18289:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": ">=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 1588,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "18303:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int240_$",
																					"typeString": "type(int240)"
																				},
																				"typeName": {
																					"id": 1587,
																					"name": "int240",
																					"nodeType": "ElementaryTypeName",
																					"src": "18303:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int240_$",
																					"typeString": "type(int240)"
																				}
																			],
																			"id": 1586,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "18298:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 1589,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "18298:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int240",
																			"typeString": "type(int240)"
																		}
																	},
																	"id": 1590,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "min",
																	"nodeType": "MemberAccess",
																	"src": "18298:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int240",
																		"typeString": "int240"
																	}
																},
																"src": "18289:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "&&",
															"rightExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 1598,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 1592,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1579,
																	"src": "18318:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "<=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 1595,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "18332:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int240_$",
																					"typeString": "type(int240)"
																				},
																				"typeName": {
																					"id": 1594,
																					"name": "int240",
																					"nodeType": "ElementaryTypeName",
																					"src": "18332:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int240_$",
																					"typeString": "type(int240)"
																				}
																			],
																			"id": 1593,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "18327:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 1596,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "18327:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int240",
																			"typeString": "type(int240)"
																		}
																	},
																	"id": 1597,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "max",
																	"nodeType": "MemberAccess",
																	"src": "18327:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int240",
																		"typeString": "int240"
																	}
																},
																"src": "18318:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"src": "18289:54:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203234302062697473",
															"id": 1600,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "18345:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_375fa0f6cb9fb5845d214c630920cedf4424913ed6dc32c297d430efa3d61a87",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 240 bits\""
															},
															"value": "SafeCast: value doesn't fit in 240 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_375fa0f6cb9fb5845d214c630920cedf4424913ed6dc32c297d430efa3d61a87",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 240 bits\""
															}
														],
														"id": 1584,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "18281:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1601,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "18281:106:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1602,
												"nodeType": "ExpressionStatement",
												"src": "18281:106:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1605,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1579,
															"src": "18411:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														],
														"id": 1604,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "18404:6:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_int240_$",
															"typeString": "type(int240)"
														},
														"typeName": {
															"id": 1603,
															"name": "int240",
															"nodeType": "ElementaryTypeName",
															"src": "18404:6:5",
															"typeDescriptions": {}
														}
													},
													"id": 1606,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "18404:13:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_int240",
														"typeString": "int240"
													}
												},
												"functionReturnParameters": 1583,
												"id": 1607,
												"nodeType": "Return",
												"src": "18397:20:5"
											}
										]
									},
									"documentation": {
										"id": 1577,
										"nodeType": "StructuredDocumentation",
										"src": "17853:350:5",
										"text": " @dev Returns the downcasted int240 from int256, reverting on\n overflow (when the input is less than smallest int240 or\n greater than largest int240).\n Counterpart to Solidity's `int240` operator.\n Requirements:\n - input must fit into 240 bits\n _Available since v4.7._"
									},
									"id": 1609,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toInt240",
									"nameLocation": "18217:8:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1580,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1579,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "18233:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 1609,
												"src": "18226:12:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												},
												"typeName": {
													"id": 1578,
													"name": "int256",
													"nodeType": "ElementaryTypeName",
													"src": "18226:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int256",
														"typeString": "int256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "18225:14:5"
									},
									"returnParameters": {
										"id": 1583,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1582,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1609,
												"src": "18263:6:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int240",
													"typeString": "int240"
												},
												"typeName": {
													"id": 1581,
													"name": "int240",
													"nodeType": "ElementaryTypeName",
													"src": "18263:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int240",
														"typeString": "int240"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "18262:8:5"
									},
									"scope": 2595,
									"src": "18208:216:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1641,
										"nodeType": "Block",
										"src": "18848:153:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															"id": 1632,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 1624,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 1618,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1612,
																	"src": "18866:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": ">=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 1621,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "18880:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int232_$",
																					"typeString": "type(int232)"
																				},
																				"typeName": {
																					"id": 1620,
																					"name": "int232",
																					"nodeType": "ElementaryTypeName",
																					"src": "18880:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int232_$",
																					"typeString": "type(int232)"
																				}
																			],
																			"id": 1619,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "18875:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 1622,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "18875:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int232",
																			"typeString": "type(int232)"
																		}
																	},
																	"id": 1623,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "min",
																	"nodeType": "MemberAccess",
																	"src": "18875:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int232",
																		"typeString": "int232"
																	}
																},
																"src": "18866:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "&&",
															"rightExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 1631,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 1625,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1612,
																	"src": "18895:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "<=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 1628,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "18909:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int232_$",
																					"typeString": "type(int232)"
																				},
																				"typeName": {
																					"id": 1627,
																					"name": "int232",
																					"nodeType": "ElementaryTypeName",
																					"src": "18909:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int232_$",
																					"typeString": "type(int232)"
																				}
																			],
																			"id": 1626,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "18904:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 1629,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "18904:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int232",
																			"typeString": "type(int232)"
																		}
																	},
																	"id": 1630,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "max",
																	"nodeType": "MemberAccess",
																	"src": "18904:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int232",
																		"typeString": "int232"
																	}
																},
																"src": "18895:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"src": "18866:54:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203233322062697473",
															"id": 1633,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "18922:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_5797fb2c4589bd6a92752ce0eacaac67341e37ab28c96c2284ab897e7ac77957",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 232 bits\""
															},
															"value": "SafeCast: value doesn't fit in 232 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_5797fb2c4589bd6a92752ce0eacaac67341e37ab28c96c2284ab897e7ac77957",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 232 bits\""
															}
														],
														"id": 1617,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "18858:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1634,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "18858:106:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1635,
												"nodeType": "ExpressionStatement",
												"src": "18858:106:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1638,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1612,
															"src": "18988:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														],
														"id": 1637,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "18981:6:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_int232_$",
															"typeString": "type(int232)"
														},
														"typeName": {
															"id": 1636,
															"name": "int232",
															"nodeType": "ElementaryTypeName",
															"src": "18981:6:5",
															"typeDescriptions": {}
														}
													},
													"id": 1639,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "18981:13:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_int232",
														"typeString": "int232"
													}
												},
												"functionReturnParameters": 1616,
												"id": 1640,
												"nodeType": "Return",
												"src": "18974:20:5"
											}
										]
									},
									"documentation": {
										"id": 1610,
										"nodeType": "StructuredDocumentation",
										"src": "18430:350:5",
										"text": " @dev Returns the downcasted int232 from int256, reverting on\n overflow (when the input is less than smallest int232 or\n greater than largest int232).\n Counterpart to Solidity's `int232` operator.\n Requirements:\n - input must fit into 232 bits\n _Available since v4.7._"
									},
									"id": 1642,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toInt232",
									"nameLocation": "18794:8:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1613,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1612,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "18810:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 1642,
												"src": "18803:12:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												},
												"typeName": {
													"id": 1611,
													"name": "int256",
													"nodeType": "ElementaryTypeName",
													"src": "18803:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int256",
														"typeString": "int256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "18802:14:5"
									},
									"returnParameters": {
										"id": 1616,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1615,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1642,
												"src": "18840:6:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int232",
													"typeString": "int232"
												},
												"typeName": {
													"id": 1614,
													"name": "int232",
													"nodeType": "ElementaryTypeName",
													"src": "18840:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int232",
														"typeString": "int232"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "18839:8:5"
									},
									"scope": 2595,
									"src": "18785:216:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1674,
										"nodeType": "Block",
										"src": "19425:153:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															"id": 1665,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 1657,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 1651,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1645,
																	"src": "19443:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": ">=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 1654,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "19457:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int224_$",
																					"typeString": "type(int224)"
																				},
																				"typeName": {
																					"id": 1653,
																					"name": "int224",
																					"nodeType": "ElementaryTypeName",
																					"src": "19457:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int224_$",
																					"typeString": "type(int224)"
																				}
																			],
																			"id": 1652,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "19452:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 1655,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "19452:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int224",
																			"typeString": "type(int224)"
																		}
																	},
																	"id": 1656,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "min",
																	"nodeType": "MemberAccess",
																	"src": "19452:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int224",
																		"typeString": "int224"
																	}
																},
																"src": "19443:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "&&",
															"rightExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 1664,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 1658,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1645,
																	"src": "19472:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "<=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 1661,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "19486:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int224_$",
																					"typeString": "type(int224)"
																				},
																				"typeName": {
																					"id": 1660,
																					"name": "int224",
																					"nodeType": "ElementaryTypeName",
																					"src": "19486:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int224_$",
																					"typeString": "type(int224)"
																				}
																			],
																			"id": 1659,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "19481:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 1662,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "19481:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int224",
																			"typeString": "type(int224)"
																		}
																	},
																	"id": 1663,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "max",
																	"nodeType": "MemberAccess",
																	"src": "19481:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int224",
																		"typeString": "int224"
																	}
																},
																"src": "19472:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"src": "19443:54:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203232342062697473",
															"id": 1666,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "19499:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_9d2acf551b2466898443b9bc3a403a4d86037386bc5a8960c1bbb0f204e69b79",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 224 bits\""
															},
															"value": "SafeCast: value doesn't fit in 224 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_9d2acf551b2466898443b9bc3a403a4d86037386bc5a8960c1bbb0f204e69b79",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 224 bits\""
															}
														],
														"id": 1650,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "19435:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1667,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "19435:106:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1668,
												"nodeType": "ExpressionStatement",
												"src": "19435:106:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1671,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1645,
															"src": "19565:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														],
														"id": 1670,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "19558:6:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_int224_$",
															"typeString": "type(int224)"
														},
														"typeName": {
															"id": 1669,
															"name": "int224",
															"nodeType": "ElementaryTypeName",
															"src": "19558:6:5",
															"typeDescriptions": {}
														}
													},
													"id": 1672,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "19558:13:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_int224",
														"typeString": "int224"
													}
												},
												"functionReturnParameters": 1649,
												"id": 1673,
												"nodeType": "Return",
												"src": "19551:20:5"
											}
										]
									},
									"documentation": {
										"id": 1643,
										"nodeType": "StructuredDocumentation",
										"src": "19007:350:5",
										"text": " @dev Returns the downcasted int224 from int256, reverting on\n overflow (when the input is less than smallest int224 or\n greater than largest int224).\n Counterpart to Solidity's `int224` operator.\n Requirements:\n - input must fit into 224 bits\n _Available since v4.7._"
									},
									"id": 1675,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toInt224",
									"nameLocation": "19371:8:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1646,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1645,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "19387:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 1675,
												"src": "19380:12:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												},
												"typeName": {
													"id": 1644,
													"name": "int256",
													"nodeType": "ElementaryTypeName",
													"src": "19380:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int256",
														"typeString": "int256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "19379:14:5"
									},
									"returnParameters": {
										"id": 1649,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1648,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1675,
												"src": "19417:6:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int224",
													"typeString": "int224"
												},
												"typeName": {
													"id": 1647,
													"name": "int224",
													"nodeType": "ElementaryTypeName",
													"src": "19417:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int224",
														"typeString": "int224"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "19416:8:5"
									},
									"scope": 2595,
									"src": "19362:216:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1707,
										"nodeType": "Block",
										"src": "20002:153:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															"id": 1698,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 1690,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 1684,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1678,
																	"src": "20020:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": ">=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 1687,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "20034:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int216_$",
																					"typeString": "type(int216)"
																				},
																				"typeName": {
																					"id": 1686,
																					"name": "int216",
																					"nodeType": "ElementaryTypeName",
																					"src": "20034:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int216_$",
																					"typeString": "type(int216)"
																				}
																			],
																			"id": 1685,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "20029:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 1688,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "20029:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int216",
																			"typeString": "type(int216)"
																		}
																	},
																	"id": 1689,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "min",
																	"nodeType": "MemberAccess",
																	"src": "20029:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int216",
																		"typeString": "int216"
																	}
																},
																"src": "20020:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "&&",
															"rightExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 1697,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 1691,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1678,
																	"src": "20049:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "<=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 1694,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "20063:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int216_$",
																					"typeString": "type(int216)"
																				},
																				"typeName": {
																					"id": 1693,
																					"name": "int216",
																					"nodeType": "ElementaryTypeName",
																					"src": "20063:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int216_$",
																					"typeString": "type(int216)"
																				}
																			],
																			"id": 1692,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "20058:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 1695,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "20058:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int216",
																			"typeString": "type(int216)"
																		}
																	},
																	"id": 1696,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "max",
																	"nodeType": "MemberAccess",
																	"src": "20058:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int216",
																		"typeString": "int216"
																	}
																},
																"src": "20049:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"src": "20020:54:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203231362062697473",
															"id": 1699,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "20076:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_8966adc0aad8dc91b207c69c3eb4937e498af8cc706cfe7edd55f3a6ea53488d",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 216 bits\""
															},
															"value": "SafeCast: value doesn't fit in 216 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_8966adc0aad8dc91b207c69c3eb4937e498af8cc706cfe7edd55f3a6ea53488d",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 216 bits\""
															}
														],
														"id": 1683,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "20012:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1700,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "20012:106:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1701,
												"nodeType": "ExpressionStatement",
												"src": "20012:106:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1704,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1678,
															"src": "20142:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														],
														"id": 1703,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "20135:6:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_int216_$",
															"typeString": "type(int216)"
														},
														"typeName": {
															"id": 1702,
															"name": "int216",
															"nodeType": "ElementaryTypeName",
															"src": "20135:6:5",
															"typeDescriptions": {}
														}
													},
													"id": 1705,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "20135:13:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_int216",
														"typeString": "int216"
													}
												},
												"functionReturnParameters": 1682,
												"id": 1706,
												"nodeType": "Return",
												"src": "20128:20:5"
											}
										]
									},
									"documentation": {
										"id": 1676,
										"nodeType": "StructuredDocumentation",
										"src": "19584:350:5",
										"text": " @dev Returns the downcasted int216 from int256, reverting on\n overflow (when the input is less than smallest int216 or\n greater than largest int216).\n Counterpart to Solidity's `int216` operator.\n Requirements:\n - input must fit into 216 bits\n _Available since v4.7._"
									},
									"id": 1708,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toInt216",
									"nameLocation": "19948:8:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1679,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1678,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "19964:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 1708,
												"src": "19957:12:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												},
												"typeName": {
													"id": 1677,
													"name": "int256",
													"nodeType": "ElementaryTypeName",
													"src": "19957:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int256",
														"typeString": "int256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "19956:14:5"
									},
									"returnParameters": {
										"id": 1682,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1681,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1708,
												"src": "19994:6:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int216",
													"typeString": "int216"
												},
												"typeName": {
													"id": 1680,
													"name": "int216",
													"nodeType": "ElementaryTypeName",
													"src": "19994:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int216",
														"typeString": "int216"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "19993:8:5"
									},
									"scope": 2595,
									"src": "19939:216:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1740,
										"nodeType": "Block",
										"src": "20579:153:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															"id": 1731,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 1723,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 1717,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1711,
																	"src": "20597:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": ">=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 1720,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "20611:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int208_$",
																					"typeString": "type(int208)"
																				},
																				"typeName": {
																					"id": 1719,
																					"name": "int208",
																					"nodeType": "ElementaryTypeName",
																					"src": "20611:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int208_$",
																					"typeString": "type(int208)"
																				}
																			],
																			"id": 1718,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "20606:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 1721,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "20606:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int208",
																			"typeString": "type(int208)"
																		}
																	},
																	"id": 1722,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "min",
																	"nodeType": "MemberAccess",
																	"src": "20606:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int208",
																		"typeString": "int208"
																	}
																},
																"src": "20597:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "&&",
															"rightExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 1730,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 1724,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1711,
																	"src": "20626:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "<=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 1727,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "20640:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int208_$",
																					"typeString": "type(int208)"
																				},
																				"typeName": {
																					"id": 1726,
																					"name": "int208",
																					"nodeType": "ElementaryTypeName",
																					"src": "20640:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int208_$",
																					"typeString": "type(int208)"
																				}
																			],
																			"id": 1725,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "20635:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 1728,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "20635:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int208",
																			"typeString": "type(int208)"
																		}
																	},
																	"id": 1729,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "max",
																	"nodeType": "MemberAccess",
																	"src": "20635:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int208",
																		"typeString": "int208"
																	}
																},
																"src": "20626:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"src": "20597:54:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203230382062697473",
															"id": 1732,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "20653:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_43d81217fa633fa1c6e88855de94fb990f5831ac266b0a90afa660e986ab5e23",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 208 bits\""
															},
															"value": "SafeCast: value doesn't fit in 208 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_43d81217fa633fa1c6e88855de94fb990f5831ac266b0a90afa660e986ab5e23",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 208 bits\""
															}
														],
														"id": 1716,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "20589:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1733,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "20589:106:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1734,
												"nodeType": "ExpressionStatement",
												"src": "20589:106:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1737,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1711,
															"src": "20719:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														],
														"id": 1736,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "20712:6:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_int208_$",
															"typeString": "type(int208)"
														},
														"typeName": {
															"id": 1735,
															"name": "int208",
															"nodeType": "ElementaryTypeName",
															"src": "20712:6:5",
															"typeDescriptions": {}
														}
													},
													"id": 1738,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "20712:13:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_int208",
														"typeString": "int208"
													}
												},
												"functionReturnParameters": 1715,
												"id": 1739,
												"nodeType": "Return",
												"src": "20705:20:5"
											}
										]
									},
									"documentation": {
										"id": 1709,
										"nodeType": "StructuredDocumentation",
										"src": "20161:350:5",
										"text": " @dev Returns the downcasted int208 from int256, reverting on\n overflow (when the input is less than smallest int208 or\n greater than largest int208).\n Counterpart to Solidity's `int208` operator.\n Requirements:\n - input must fit into 208 bits\n _Available since v4.7._"
									},
									"id": 1741,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toInt208",
									"nameLocation": "20525:8:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1712,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1711,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "20541:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 1741,
												"src": "20534:12:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												},
												"typeName": {
													"id": 1710,
													"name": "int256",
													"nodeType": "ElementaryTypeName",
													"src": "20534:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int256",
														"typeString": "int256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "20533:14:5"
									},
									"returnParameters": {
										"id": 1715,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1714,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1741,
												"src": "20571:6:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int208",
													"typeString": "int208"
												},
												"typeName": {
													"id": 1713,
													"name": "int208",
													"nodeType": "ElementaryTypeName",
													"src": "20571:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int208",
														"typeString": "int208"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "20570:8:5"
									},
									"scope": 2595,
									"src": "20516:216:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1773,
										"nodeType": "Block",
										"src": "21156:153:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															"id": 1764,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 1756,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 1750,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1744,
																	"src": "21174:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": ">=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 1753,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "21188:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int200_$",
																					"typeString": "type(int200)"
																				},
																				"typeName": {
																					"id": 1752,
																					"name": "int200",
																					"nodeType": "ElementaryTypeName",
																					"src": "21188:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int200_$",
																					"typeString": "type(int200)"
																				}
																			],
																			"id": 1751,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "21183:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 1754,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "21183:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int200",
																			"typeString": "type(int200)"
																		}
																	},
																	"id": 1755,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "min",
																	"nodeType": "MemberAccess",
																	"src": "21183:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int200",
																		"typeString": "int200"
																	}
																},
																"src": "21174:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "&&",
															"rightExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 1763,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 1757,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1744,
																	"src": "21203:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "<=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 1760,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "21217:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int200_$",
																					"typeString": "type(int200)"
																				},
																				"typeName": {
																					"id": 1759,
																					"name": "int200",
																					"nodeType": "ElementaryTypeName",
																					"src": "21217:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int200_$",
																					"typeString": "type(int200)"
																				}
																			],
																			"id": 1758,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "21212:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 1761,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "21212:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int200",
																			"typeString": "type(int200)"
																		}
																	},
																	"id": 1762,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "max",
																	"nodeType": "MemberAccess",
																	"src": "21212:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int200",
																		"typeString": "int200"
																	}
																},
																"src": "21203:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"src": "21174:54:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203230302062697473",
															"id": 1765,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "21230:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_df8130f294fe2698967ea9ead82c4da9454490567d976d00551e0174e655314c",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 200 bits\""
															},
															"value": "SafeCast: value doesn't fit in 200 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_df8130f294fe2698967ea9ead82c4da9454490567d976d00551e0174e655314c",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 200 bits\""
															}
														],
														"id": 1749,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "21166:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1766,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "21166:106:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1767,
												"nodeType": "ExpressionStatement",
												"src": "21166:106:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1770,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1744,
															"src": "21296:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														],
														"id": 1769,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "21289:6:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_int200_$",
															"typeString": "type(int200)"
														},
														"typeName": {
															"id": 1768,
															"name": "int200",
															"nodeType": "ElementaryTypeName",
															"src": "21289:6:5",
															"typeDescriptions": {}
														}
													},
													"id": 1771,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "21289:13:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_int200",
														"typeString": "int200"
													}
												},
												"functionReturnParameters": 1748,
												"id": 1772,
												"nodeType": "Return",
												"src": "21282:20:5"
											}
										]
									},
									"documentation": {
										"id": 1742,
										"nodeType": "StructuredDocumentation",
										"src": "20738:350:5",
										"text": " @dev Returns the downcasted int200 from int256, reverting on\n overflow (when the input is less than smallest int200 or\n greater than largest int200).\n Counterpart to Solidity's `int200` operator.\n Requirements:\n - input must fit into 200 bits\n _Available since v4.7._"
									},
									"id": 1774,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toInt200",
									"nameLocation": "21102:8:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1745,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1744,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "21118:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 1774,
												"src": "21111:12:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												},
												"typeName": {
													"id": 1743,
													"name": "int256",
													"nodeType": "ElementaryTypeName",
													"src": "21111:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int256",
														"typeString": "int256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "21110:14:5"
									},
									"returnParameters": {
										"id": 1748,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1747,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1774,
												"src": "21148:6:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int200",
													"typeString": "int200"
												},
												"typeName": {
													"id": 1746,
													"name": "int200",
													"nodeType": "ElementaryTypeName",
													"src": "21148:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int200",
														"typeString": "int200"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "21147:8:5"
									},
									"scope": 2595,
									"src": "21093:216:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1806,
										"nodeType": "Block",
										"src": "21733:153:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															"id": 1797,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 1789,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 1783,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1777,
																	"src": "21751:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": ">=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 1786,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "21765:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int192_$",
																					"typeString": "type(int192)"
																				},
																				"typeName": {
																					"id": 1785,
																					"name": "int192",
																					"nodeType": "ElementaryTypeName",
																					"src": "21765:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int192_$",
																					"typeString": "type(int192)"
																				}
																			],
																			"id": 1784,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "21760:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 1787,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "21760:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int192",
																			"typeString": "type(int192)"
																		}
																	},
																	"id": 1788,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "min",
																	"nodeType": "MemberAccess",
																	"src": "21760:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int192",
																		"typeString": "int192"
																	}
																},
																"src": "21751:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "&&",
															"rightExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 1796,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 1790,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1777,
																	"src": "21780:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "<=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 1793,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "21794:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int192_$",
																					"typeString": "type(int192)"
																				},
																				"typeName": {
																					"id": 1792,
																					"name": "int192",
																					"nodeType": "ElementaryTypeName",
																					"src": "21794:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int192_$",
																					"typeString": "type(int192)"
																				}
																			],
																			"id": 1791,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "21789:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 1794,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "21789:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int192",
																			"typeString": "type(int192)"
																		}
																	},
																	"id": 1795,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "max",
																	"nodeType": "MemberAccess",
																	"src": "21789:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int192",
																		"typeString": "int192"
																	}
																},
																"src": "21780:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"src": "21751:54:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203139322062697473",
															"id": 1798,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "21807:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_112978800f12a1c4f1eab82789f7b6defd49dc1c17ba270a84ffc28392fb05ae",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 192 bits\""
															},
															"value": "SafeCast: value doesn't fit in 192 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_112978800f12a1c4f1eab82789f7b6defd49dc1c17ba270a84ffc28392fb05ae",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 192 bits\""
															}
														],
														"id": 1782,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "21743:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1799,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "21743:106:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1800,
												"nodeType": "ExpressionStatement",
												"src": "21743:106:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1803,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1777,
															"src": "21873:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														],
														"id": 1802,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "21866:6:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_int192_$",
															"typeString": "type(int192)"
														},
														"typeName": {
															"id": 1801,
															"name": "int192",
															"nodeType": "ElementaryTypeName",
															"src": "21866:6:5",
															"typeDescriptions": {}
														}
													},
													"id": 1804,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "21866:13:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_int192",
														"typeString": "int192"
													}
												},
												"functionReturnParameters": 1781,
												"id": 1805,
												"nodeType": "Return",
												"src": "21859:20:5"
											}
										]
									},
									"documentation": {
										"id": 1775,
										"nodeType": "StructuredDocumentation",
										"src": "21315:350:5",
										"text": " @dev Returns the downcasted int192 from int256, reverting on\n overflow (when the input is less than smallest int192 or\n greater than largest int192).\n Counterpart to Solidity's `int192` operator.\n Requirements:\n - input must fit into 192 bits\n _Available since v4.7._"
									},
									"id": 1807,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toInt192",
									"nameLocation": "21679:8:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1778,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1777,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "21695:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 1807,
												"src": "21688:12:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												},
												"typeName": {
													"id": 1776,
													"name": "int256",
													"nodeType": "ElementaryTypeName",
													"src": "21688:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int256",
														"typeString": "int256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "21687:14:5"
									},
									"returnParameters": {
										"id": 1781,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1780,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1807,
												"src": "21725:6:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int192",
													"typeString": "int192"
												},
												"typeName": {
													"id": 1779,
													"name": "int192",
													"nodeType": "ElementaryTypeName",
													"src": "21725:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int192",
														"typeString": "int192"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "21724:8:5"
									},
									"scope": 2595,
									"src": "21670:216:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1839,
										"nodeType": "Block",
										"src": "22310:153:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															"id": 1830,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 1822,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 1816,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1810,
																	"src": "22328:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": ">=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 1819,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "22342:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int184_$",
																					"typeString": "type(int184)"
																				},
																				"typeName": {
																					"id": 1818,
																					"name": "int184",
																					"nodeType": "ElementaryTypeName",
																					"src": "22342:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int184_$",
																					"typeString": "type(int184)"
																				}
																			],
																			"id": 1817,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "22337:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 1820,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "22337:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int184",
																			"typeString": "type(int184)"
																		}
																	},
																	"id": 1821,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "min",
																	"nodeType": "MemberAccess",
																	"src": "22337:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int184",
																		"typeString": "int184"
																	}
																},
																"src": "22328:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "&&",
															"rightExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 1829,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 1823,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1810,
																	"src": "22357:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "<=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 1826,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "22371:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int184_$",
																					"typeString": "type(int184)"
																				},
																				"typeName": {
																					"id": 1825,
																					"name": "int184",
																					"nodeType": "ElementaryTypeName",
																					"src": "22371:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int184_$",
																					"typeString": "type(int184)"
																				}
																			],
																			"id": 1824,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "22366:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 1827,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "22366:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int184",
																			"typeString": "type(int184)"
																		}
																	},
																	"id": 1828,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "max",
																	"nodeType": "MemberAccess",
																	"src": "22366:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int184",
																		"typeString": "int184"
																	}
																},
																"src": "22357:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"src": "22328:54:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203138342062697473",
															"id": 1831,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "22384:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_86c53d89b1944d561ecfa42e859033241d1df6ea8d42a57ae02f79d45de4aa75",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 184 bits\""
															},
															"value": "SafeCast: value doesn't fit in 184 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_86c53d89b1944d561ecfa42e859033241d1df6ea8d42a57ae02f79d45de4aa75",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 184 bits\""
															}
														],
														"id": 1815,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "22320:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1832,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "22320:106:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1833,
												"nodeType": "ExpressionStatement",
												"src": "22320:106:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1836,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1810,
															"src": "22450:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														],
														"id": 1835,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "22443:6:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_int184_$",
															"typeString": "type(int184)"
														},
														"typeName": {
															"id": 1834,
															"name": "int184",
															"nodeType": "ElementaryTypeName",
															"src": "22443:6:5",
															"typeDescriptions": {}
														}
													},
													"id": 1837,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "22443:13:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_int184",
														"typeString": "int184"
													}
												},
												"functionReturnParameters": 1814,
												"id": 1838,
												"nodeType": "Return",
												"src": "22436:20:5"
											}
										]
									},
									"documentation": {
										"id": 1808,
										"nodeType": "StructuredDocumentation",
										"src": "21892:350:5",
										"text": " @dev Returns the downcasted int184 from int256, reverting on\n overflow (when the input is less than smallest int184 or\n greater than largest int184).\n Counterpart to Solidity's `int184` operator.\n Requirements:\n - input must fit into 184 bits\n _Available since v4.7._"
									},
									"id": 1840,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toInt184",
									"nameLocation": "22256:8:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1811,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1810,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "22272:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 1840,
												"src": "22265:12:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												},
												"typeName": {
													"id": 1809,
													"name": "int256",
													"nodeType": "ElementaryTypeName",
													"src": "22265:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int256",
														"typeString": "int256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "22264:14:5"
									},
									"returnParameters": {
										"id": 1814,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1813,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1840,
												"src": "22302:6:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int184",
													"typeString": "int184"
												},
												"typeName": {
													"id": 1812,
													"name": "int184",
													"nodeType": "ElementaryTypeName",
													"src": "22302:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int184",
														"typeString": "int184"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "22301:8:5"
									},
									"scope": 2595,
									"src": "22247:216:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1872,
										"nodeType": "Block",
										"src": "22887:153:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															"id": 1863,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 1855,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 1849,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1843,
																	"src": "22905:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": ">=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 1852,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "22919:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int176_$",
																					"typeString": "type(int176)"
																				},
																				"typeName": {
																					"id": 1851,
																					"name": "int176",
																					"nodeType": "ElementaryTypeName",
																					"src": "22919:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int176_$",
																					"typeString": "type(int176)"
																				}
																			],
																			"id": 1850,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "22914:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 1853,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "22914:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int176",
																			"typeString": "type(int176)"
																		}
																	},
																	"id": 1854,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "min",
																	"nodeType": "MemberAccess",
																	"src": "22914:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int176",
																		"typeString": "int176"
																	}
																},
																"src": "22905:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "&&",
															"rightExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 1862,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 1856,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1843,
																	"src": "22934:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "<=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 1859,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "22948:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int176_$",
																					"typeString": "type(int176)"
																				},
																				"typeName": {
																					"id": 1858,
																					"name": "int176",
																					"nodeType": "ElementaryTypeName",
																					"src": "22948:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int176_$",
																					"typeString": "type(int176)"
																				}
																			],
																			"id": 1857,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "22943:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 1860,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "22943:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int176",
																			"typeString": "type(int176)"
																		}
																	},
																	"id": 1861,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "max",
																	"nodeType": "MemberAccess",
																	"src": "22943:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int176",
																		"typeString": "int176"
																	}
																},
																"src": "22934:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"src": "22905:54:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203137362062697473",
															"id": 1864,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "22961:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_4069e970f734339c7841e84a1b26f503bff22b76884c1168dc24e2e6af9b1e30",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 176 bits\""
															},
															"value": "SafeCast: value doesn't fit in 176 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_4069e970f734339c7841e84a1b26f503bff22b76884c1168dc24e2e6af9b1e30",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 176 bits\""
															}
														],
														"id": 1848,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "22897:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1865,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "22897:106:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1866,
												"nodeType": "ExpressionStatement",
												"src": "22897:106:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1869,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1843,
															"src": "23027:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														],
														"id": 1868,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "23020:6:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_int176_$",
															"typeString": "type(int176)"
														},
														"typeName": {
															"id": 1867,
															"name": "int176",
															"nodeType": "ElementaryTypeName",
															"src": "23020:6:5",
															"typeDescriptions": {}
														}
													},
													"id": 1870,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "23020:13:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_int176",
														"typeString": "int176"
													}
												},
												"functionReturnParameters": 1847,
												"id": 1871,
												"nodeType": "Return",
												"src": "23013:20:5"
											}
										]
									},
									"documentation": {
										"id": 1841,
										"nodeType": "StructuredDocumentation",
										"src": "22469:350:5",
										"text": " @dev Returns the downcasted int176 from int256, reverting on\n overflow (when the input is less than smallest int176 or\n greater than largest int176).\n Counterpart to Solidity's `int176` operator.\n Requirements:\n - input must fit into 176 bits\n _Available since v4.7._"
									},
									"id": 1873,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toInt176",
									"nameLocation": "22833:8:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1844,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1843,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "22849:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 1873,
												"src": "22842:12:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												},
												"typeName": {
													"id": 1842,
													"name": "int256",
													"nodeType": "ElementaryTypeName",
													"src": "22842:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int256",
														"typeString": "int256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "22841:14:5"
									},
									"returnParameters": {
										"id": 1847,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1846,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1873,
												"src": "22879:6:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int176",
													"typeString": "int176"
												},
												"typeName": {
													"id": 1845,
													"name": "int176",
													"nodeType": "ElementaryTypeName",
													"src": "22879:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int176",
														"typeString": "int176"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "22878:8:5"
									},
									"scope": 2595,
									"src": "22824:216:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1905,
										"nodeType": "Block",
										"src": "23464:153:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															"id": 1896,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 1888,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 1882,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1876,
																	"src": "23482:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": ">=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 1885,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "23496:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int168_$",
																					"typeString": "type(int168)"
																				},
																				"typeName": {
																					"id": 1884,
																					"name": "int168",
																					"nodeType": "ElementaryTypeName",
																					"src": "23496:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int168_$",
																					"typeString": "type(int168)"
																				}
																			],
																			"id": 1883,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "23491:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 1886,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "23491:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int168",
																			"typeString": "type(int168)"
																		}
																	},
																	"id": 1887,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "min",
																	"nodeType": "MemberAccess",
																	"src": "23491:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int168",
																		"typeString": "int168"
																	}
																},
																"src": "23482:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "&&",
															"rightExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 1895,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 1889,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1876,
																	"src": "23511:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "<=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 1892,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "23525:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int168_$",
																					"typeString": "type(int168)"
																				},
																				"typeName": {
																					"id": 1891,
																					"name": "int168",
																					"nodeType": "ElementaryTypeName",
																					"src": "23525:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int168_$",
																					"typeString": "type(int168)"
																				}
																			],
																			"id": 1890,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "23520:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 1893,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "23520:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int168",
																			"typeString": "type(int168)"
																		}
																	},
																	"id": 1894,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "max",
																	"nodeType": "MemberAccess",
																	"src": "23520:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int168",
																		"typeString": "int168"
																	}
																},
																"src": "23511:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"src": "23482:54:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203136382062697473",
															"id": 1897,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "23538:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_67ef32a3cbe7b34392347d335b0a7ae95c74a34ca40e4efb58f6c9a3154e85a1",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 168 bits\""
															},
															"value": "SafeCast: value doesn't fit in 168 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_67ef32a3cbe7b34392347d335b0a7ae95c74a34ca40e4efb58f6c9a3154e85a1",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 168 bits\""
															}
														],
														"id": 1881,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "23474:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1898,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "23474:106:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1899,
												"nodeType": "ExpressionStatement",
												"src": "23474:106:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1902,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1876,
															"src": "23604:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														],
														"id": 1901,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "23597:6:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_int168_$",
															"typeString": "type(int168)"
														},
														"typeName": {
															"id": 1900,
															"name": "int168",
															"nodeType": "ElementaryTypeName",
															"src": "23597:6:5",
															"typeDescriptions": {}
														}
													},
													"id": 1903,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "23597:13:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_int168",
														"typeString": "int168"
													}
												},
												"functionReturnParameters": 1880,
												"id": 1904,
												"nodeType": "Return",
												"src": "23590:20:5"
											}
										]
									},
									"documentation": {
										"id": 1874,
										"nodeType": "StructuredDocumentation",
										"src": "23046:350:5",
										"text": " @dev Returns the downcasted int168 from int256, reverting on\n overflow (when the input is less than smallest int168 or\n greater than largest int168).\n Counterpart to Solidity's `int168` operator.\n Requirements:\n - input must fit into 168 bits\n _Available since v4.7._"
									},
									"id": 1906,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toInt168",
									"nameLocation": "23410:8:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1877,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1876,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "23426:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 1906,
												"src": "23419:12:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												},
												"typeName": {
													"id": 1875,
													"name": "int256",
													"nodeType": "ElementaryTypeName",
													"src": "23419:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int256",
														"typeString": "int256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "23418:14:5"
									},
									"returnParameters": {
										"id": 1880,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1879,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1906,
												"src": "23456:6:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int168",
													"typeString": "int168"
												},
												"typeName": {
													"id": 1878,
													"name": "int168",
													"nodeType": "ElementaryTypeName",
													"src": "23456:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int168",
														"typeString": "int168"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "23455:8:5"
									},
									"scope": 2595,
									"src": "23401:216:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1938,
										"nodeType": "Block",
										"src": "24041:153:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															"id": 1929,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 1921,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 1915,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1909,
																	"src": "24059:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": ">=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 1918,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "24073:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int160_$",
																					"typeString": "type(int160)"
																				},
																				"typeName": {
																					"id": 1917,
																					"name": "int160",
																					"nodeType": "ElementaryTypeName",
																					"src": "24073:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int160_$",
																					"typeString": "type(int160)"
																				}
																			],
																			"id": 1916,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "24068:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 1919,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "24068:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int160",
																			"typeString": "type(int160)"
																		}
																	},
																	"id": 1920,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "min",
																	"nodeType": "MemberAccess",
																	"src": "24068:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int160",
																		"typeString": "int160"
																	}
																},
																"src": "24059:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "&&",
															"rightExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 1928,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 1922,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1909,
																	"src": "24088:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "<=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 1925,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "24102:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int160_$",
																					"typeString": "type(int160)"
																				},
																				"typeName": {
																					"id": 1924,
																					"name": "int160",
																					"nodeType": "ElementaryTypeName",
																					"src": "24102:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int160_$",
																					"typeString": "type(int160)"
																				}
																			],
																			"id": 1923,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "24097:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 1926,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "24097:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int160",
																			"typeString": "type(int160)"
																		}
																	},
																	"id": 1927,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "max",
																	"nodeType": "MemberAccess",
																	"src": "24097:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int160",
																		"typeString": "int160"
																	}
																},
																"src": "24088:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"src": "24059:54:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203136302062697473",
															"id": 1930,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "24115:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_976ecce9083debfe29d3a99b955facf24b8725f1b964d1a5bb4197ffcd60ab9d",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 160 bits\""
															},
															"value": "SafeCast: value doesn't fit in 160 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_976ecce9083debfe29d3a99b955facf24b8725f1b964d1a5bb4197ffcd60ab9d",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 160 bits\""
															}
														],
														"id": 1914,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "24051:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1931,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "24051:106:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1932,
												"nodeType": "ExpressionStatement",
												"src": "24051:106:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1935,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1909,
															"src": "24181:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														],
														"id": 1934,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "24174:6:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_int160_$",
															"typeString": "type(int160)"
														},
														"typeName": {
															"id": 1933,
															"name": "int160",
															"nodeType": "ElementaryTypeName",
															"src": "24174:6:5",
															"typeDescriptions": {}
														}
													},
													"id": 1936,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "24174:13:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_int160",
														"typeString": "int160"
													}
												},
												"functionReturnParameters": 1913,
												"id": 1937,
												"nodeType": "Return",
												"src": "24167:20:5"
											}
										]
									},
									"documentation": {
										"id": 1907,
										"nodeType": "StructuredDocumentation",
										"src": "23623:350:5",
										"text": " @dev Returns the downcasted int160 from int256, reverting on\n overflow (when the input is less than smallest int160 or\n greater than largest int160).\n Counterpart to Solidity's `int160` operator.\n Requirements:\n - input must fit into 160 bits\n _Available since v4.7._"
									},
									"id": 1939,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toInt160",
									"nameLocation": "23987:8:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1910,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1909,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "24003:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 1939,
												"src": "23996:12:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												},
												"typeName": {
													"id": 1908,
													"name": "int256",
													"nodeType": "ElementaryTypeName",
													"src": "23996:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int256",
														"typeString": "int256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "23995:14:5"
									},
									"returnParameters": {
										"id": 1913,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1912,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1939,
												"src": "24033:6:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int160",
													"typeString": "int160"
												},
												"typeName": {
													"id": 1911,
													"name": "int160",
													"nodeType": "ElementaryTypeName",
													"src": "24033:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int160",
														"typeString": "int160"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "24032:8:5"
									},
									"scope": 2595,
									"src": "23978:216:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1971,
										"nodeType": "Block",
										"src": "24618:153:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															"id": 1962,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 1954,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 1948,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1942,
																	"src": "24636:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": ">=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 1951,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "24650:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int152_$",
																					"typeString": "type(int152)"
																				},
																				"typeName": {
																					"id": 1950,
																					"name": "int152",
																					"nodeType": "ElementaryTypeName",
																					"src": "24650:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int152_$",
																					"typeString": "type(int152)"
																				}
																			],
																			"id": 1949,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "24645:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 1952,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "24645:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int152",
																			"typeString": "type(int152)"
																		}
																	},
																	"id": 1953,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "min",
																	"nodeType": "MemberAccess",
																	"src": "24645:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int152",
																		"typeString": "int152"
																	}
																},
																"src": "24636:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "&&",
															"rightExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 1961,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 1955,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1942,
																	"src": "24665:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "<=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 1958,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "24679:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int152_$",
																					"typeString": "type(int152)"
																				},
																				"typeName": {
																					"id": 1957,
																					"name": "int152",
																					"nodeType": "ElementaryTypeName",
																					"src": "24679:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int152_$",
																					"typeString": "type(int152)"
																				}
																			],
																			"id": 1956,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "24674:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 1959,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "24674:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int152",
																			"typeString": "type(int152)"
																		}
																	},
																	"id": 1960,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "max",
																	"nodeType": "MemberAccess",
																	"src": "24674:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int152",
																		"typeString": "int152"
																	}
																},
																"src": "24665:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"src": "24636:54:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203135322062697473",
															"id": 1963,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "24692:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_211cad43a2caf5f01e34af51190b8a7b6f3d9c195bd25586ea12242191b97831",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 152 bits\""
															},
															"value": "SafeCast: value doesn't fit in 152 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_211cad43a2caf5f01e34af51190b8a7b6f3d9c195bd25586ea12242191b97831",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 152 bits\""
															}
														],
														"id": 1947,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "24628:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1964,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "24628:106:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1965,
												"nodeType": "ExpressionStatement",
												"src": "24628:106:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1968,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1942,
															"src": "24758:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														],
														"id": 1967,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "24751:6:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_int152_$",
															"typeString": "type(int152)"
														},
														"typeName": {
															"id": 1966,
															"name": "int152",
															"nodeType": "ElementaryTypeName",
															"src": "24751:6:5",
															"typeDescriptions": {}
														}
													},
													"id": 1969,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "24751:13:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_int152",
														"typeString": "int152"
													}
												},
												"functionReturnParameters": 1946,
												"id": 1970,
												"nodeType": "Return",
												"src": "24744:20:5"
											}
										]
									},
									"documentation": {
										"id": 1940,
										"nodeType": "StructuredDocumentation",
										"src": "24200:350:5",
										"text": " @dev Returns the downcasted int152 from int256, reverting on\n overflow (when the input is less than smallest int152 or\n greater than largest int152).\n Counterpart to Solidity's `int152` operator.\n Requirements:\n - input must fit into 152 bits\n _Available since v4.7._"
									},
									"id": 1972,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toInt152",
									"nameLocation": "24564:8:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1943,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1942,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "24580:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 1972,
												"src": "24573:12:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												},
												"typeName": {
													"id": 1941,
													"name": "int256",
													"nodeType": "ElementaryTypeName",
													"src": "24573:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int256",
														"typeString": "int256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "24572:14:5"
									},
									"returnParameters": {
										"id": 1946,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1945,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1972,
												"src": "24610:6:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int152",
													"typeString": "int152"
												},
												"typeName": {
													"id": 1944,
													"name": "int152",
													"nodeType": "ElementaryTypeName",
													"src": "24610:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int152",
														"typeString": "int152"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "24609:8:5"
									},
									"scope": 2595,
									"src": "24555:216:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 2004,
										"nodeType": "Block",
										"src": "25195:153:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															"id": 1995,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 1987,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 1981,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1975,
																	"src": "25213:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": ">=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 1984,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "25227:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int144_$",
																					"typeString": "type(int144)"
																				},
																				"typeName": {
																					"id": 1983,
																					"name": "int144",
																					"nodeType": "ElementaryTypeName",
																					"src": "25227:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int144_$",
																					"typeString": "type(int144)"
																				}
																			],
																			"id": 1982,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "25222:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 1985,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "25222:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int144",
																			"typeString": "type(int144)"
																		}
																	},
																	"id": 1986,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "min",
																	"nodeType": "MemberAccess",
																	"src": "25222:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int144",
																		"typeString": "int144"
																	}
																},
																"src": "25213:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "&&",
															"rightExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 1994,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 1988,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1975,
																	"src": "25242:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "<=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 1991,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "25256:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int144_$",
																					"typeString": "type(int144)"
																				},
																				"typeName": {
																					"id": 1990,
																					"name": "int144",
																					"nodeType": "ElementaryTypeName",
																					"src": "25256:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int144_$",
																					"typeString": "type(int144)"
																				}
																			],
																			"id": 1989,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "25251:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 1992,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "25251:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int144",
																			"typeString": "type(int144)"
																		}
																	},
																	"id": 1993,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "max",
																	"nodeType": "MemberAccess",
																	"src": "25251:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int144",
																		"typeString": "int144"
																	}
																},
																"src": "25242:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"src": "25213:54:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203134342062697473",
															"id": 1996,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "25269:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_17d8c5a6d3b2fd2517ba2e4a2ac70a3367cd362448f8338aaa6edf8bfd812bab",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 144 bits\""
															},
															"value": "SafeCast: value doesn't fit in 144 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_17d8c5a6d3b2fd2517ba2e4a2ac70a3367cd362448f8338aaa6edf8bfd812bab",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 144 bits\""
															}
														],
														"id": 1980,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "25205:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1997,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "25205:106:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1998,
												"nodeType": "ExpressionStatement",
												"src": "25205:106:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 2001,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1975,
															"src": "25335:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														],
														"id": 2000,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "25328:6:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_int144_$",
															"typeString": "type(int144)"
														},
														"typeName": {
															"id": 1999,
															"name": "int144",
															"nodeType": "ElementaryTypeName",
															"src": "25328:6:5",
															"typeDescriptions": {}
														}
													},
													"id": 2002,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "25328:13:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_int144",
														"typeString": "int144"
													}
												},
												"functionReturnParameters": 1979,
												"id": 2003,
												"nodeType": "Return",
												"src": "25321:20:5"
											}
										]
									},
									"documentation": {
										"id": 1973,
										"nodeType": "StructuredDocumentation",
										"src": "24777:350:5",
										"text": " @dev Returns the downcasted int144 from int256, reverting on\n overflow (when the input is less than smallest int144 or\n greater than largest int144).\n Counterpart to Solidity's `int144` operator.\n Requirements:\n - input must fit into 144 bits\n _Available since v4.7._"
									},
									"id": 2005,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toInt144",
									"nameLocation": "25141:8:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1976,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1975,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "25157:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 2005,
												"src": "25150:12:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												},
												"typeName": {
													"id": 1974,
													"name": "int256",
													"nodeType": "ElementaryTypeName",
													"src": "25150:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int256",
														"typeString": "int256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "25149:14:5"
									},
									"returnParameters": {
										"id": 1979,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1978,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 2005,
												"src": "25187:6:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int144",
													"typeString": "int144"
												},
												"typeName": {
													"id": 1977,
													"name": "int144",
													"nodeType": "ElementaryTypeName",
													"src": "25187:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int144",
														"typeString": "int144"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "25186:8:5"
									},
									"scope": 2595,
									"src": "25132:216:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 2037,
										"nodeType": "Block",
										"src": "25772:153:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															"id": 2028,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 2020,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2014,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2008,
																	"src": "25790:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": ">=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 2017,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "25804:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int136_$",
																					"typeString": "type(int136)"
																				},
																				"typeName": {
																					"id": 2016,
																					"name": "int136",
																					"nodeType": "ElementaryTypeName",
																					"src": "25804:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int136_$",
																					"typeString": "type(int136)"
																				}
																			],
																			"id": 2015,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "25799:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 2018,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "25799:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int136",
																			"typeString": "type(int136)"
																		}
																	},
																	"id": 2019,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "min",
																	"nodeType": "MemberAccess",
																	"src": "25799:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int136",
																		"typeString": "int136"
																	}
																},
																"src": "25790:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "&&",
															"rightExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 2027,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2021,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2008,
																	"src": "25819:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "<=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 2024,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "25833:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int136_$",
																					"typeString": "type(int136)"
																				},
																				"typeName": {
																					"id": 2023,
																					"name": "int136",
																					"nodeType": "ElementaryTypeName",
																					"src": "25833:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int136_$",
																					"typeString": "type(int136)"
																				}
																			],
																			"id": 2022,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "25828:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 2025,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "25828:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int136",
																			"typeString": "type(int136)"
																		}
																	},
																	"id": 2026,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "max",
																	"nodeType": "MemberAccess",
																	"src": "25828:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int136",
																		"typeString": "int136"
																	}
																},
																"src": "25819:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"src": "25790:54:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203133362062697473",
															"id": 2029,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "25846:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_8b1f81e2e2913e1cee9dba7bcd9837bbf8a8122edaac4afc578271db3c25a56a",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 136 bits\""
															},
															"value": "SafeCast: value doesn't fit in 136 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_8b1f81e2e2913e1cee9dba7bcd9837bbf8a8122edaac4afc578271db3c25a56a",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 136 bits\""
															}
														],
														"id": 2013,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "25782:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 2030,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "25782:106:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 2031,
												"nodeType": "ExpressionStatement",
												"src": "25782:106:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 2034,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2008,
															"src": "25912:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														],
														"id": 2033,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "25905:6:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_int136_$",
															"typeString": "type(int136)"
														},
														"typeName": {
															"id": 2032,
															"name": "int136",
															"nodeType": "ElementaryTypeName",
															"src": "25905:6:5",
															"typeDescriptions": {}
														}
													},
													"id": 2035,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "25905:13:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_int136",
														"typeString": "int136"
													}
												},
												"functionReturnParameters": 2012,
												"id": 2036,
												"nodeType": "Return",
												"src": "25898:20:5"
											}
										]
									},
									"documentation": {
										"id": 2006,
										"nodeType": "StructuredDocumentation",
										"src": "25354:350:5",
										"text": " @dev Returns the downcasted int136 from int256, reverting on\n overflow (when the input is less than smallest int136 or\n greater than largest int136).\n Counterpart to Solidity's `int136` operator.\n Requirements:\n - input must fit into 136 bits\n _Available since v4.7._"
									},
									"id": 2038,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toInt136",
									"nameLocation": "25718:8:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 2009,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2008,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "25734:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 2038,
												"src": "25727:12:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												},
												"typeName": {
													"id": 2007,
													"name": "int256",
													"nodeType": "ElementaryTypeName",
													"src": "25727:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int256",
														"typeString": "int256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "25726:14:5"
									},
									"returnParameters": {
										"id": 2012,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2011,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 2038,
												"src": "25764:6:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int136",
													"typeString": "int136"
												},
												"typeName": {
													"id": 2010,
													"name": "int136",
													"nodeType": "ElementaryTypeName",
													"src": "25764:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int136",
														"typeString": "int136"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "25763:8:5"
									},
									"scope": 2595,
									"src": "25709:216:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 2070,
										"nodeType": "Block",
										"src": "26349:153:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															"id": 2061,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 2053,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2047,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2041,
																	"src": "26367:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": ">=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 2050,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "26381:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int128_$",
																					"typeString": "type(int128)"
																				},
																				"typeName": {
																					"id": 2049,
																					"name": "int128",
																					"nodeType": "ElementaryTypeName",
																					"src": "26381:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int128_$",
																					"typeString": "type(int128)"
																				}
																			],
																			"id": 2048,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "26376:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 2051,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "26376:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int128",
																			"typeString": "type(int128)"
																		}
																	},
																	"id": 2052,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "min",
																	"nodeType": "MemberAccess",
																	"src": "26376:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int128",
																		"typeString": "int128"
																	}
																},
																"src": "26367:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "&&",
															"rightExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 2060,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2054,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2041,
																	"src": "26396:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "<=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 2057,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "26410:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int128_$",
																					"typeString": "type(int128)"
																				},
																				"typeName": {
																					"id": 2056,
																					"name": "int128",
																					"nodeType": "ElementaryTypeName",
																					"src": "26410:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int128_$",
																					"typeString": "type(int128)"
																				}
																			],
																			"id": 2055,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "26405:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 2058,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "26405:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int128",
																			"typeString": "type(int128)"
																		}
																	},
																	"id": 2059,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "max",
																	"nodeType": "MemberAccess",
																	"src": "26405:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int128",
																		"typeString": "int128"
																	}
																},
																"src": "26396:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"src": "26367:54:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203132382062697473",
															"id": 2062,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "26423:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 128 bits\""
															},
															"value": "SafeCast: value doesn't fit in 128 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 128 bits\""
															}
														],
														"id": 2046,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "26359:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 2063,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "26359:106:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 2064,
												"nodeType": "ExpressionStatement",
												"src": "26359:106:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 2067,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2041,
															"src": "26489:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														],
														"id": 2066,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "26482:6:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_int128_$",
															"typeString": "type(int128)"
														},
														"typeName": {
															"id": 2065,
															"name": "int128",
															"nodeType": "ElementaryTypeName",
															"src": "26482:6:5",
															"typeDescriptions": {}
														}
													},
													"id": 2068,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "26482:13:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_int128",
														"typeString": "int128"
													}
												},
												"functionReturnParameters": 2045,
												"id": 2069,
												"nodeType": "Return",
												"src": "26475:20:5"
											}
										]
									},
									"documentation": {
										"id": 2039,
										"nodeType": "StructuredDocumentation",
										"src": "25931:350:5",
										"text": " @dev Returns the downcasted int128 from int256, reverting on\n overflow (when the input is less than smallest int128 or\n greater than largest int128).\n Counterpart to Solidity's `int128` operator.\n Requirements:\n - input must fit into 128 bits\n _Available since v3.1._"
									},
									"id": 2071,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toInt128",
									"nameLocation": "26295:8:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 2042,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2041,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "26311:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 2071,
												"src": "26304:12:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												},
												"typeName": {
													"id": 2040,
													"name": "int256",
													"nodeType": "ElementaryTypeName",
													"src": "26304:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int256",
														"typeString": "int256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "26303:14:5"
									},
									"returnParameters": {
										"id": 2045,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2044,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 2071,
												"src": "26341:6:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int128",
													"typeString": "int128"
												},
												"typeName": {
													"id": 2043,
													"name": "int128",
													"nodeType": "ElementaryTypeName",
													"src": "26341:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int128",
														"typeString": "int128"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "26340:8:5"
									},
									"scope": 2595,
									"src": "26286:216:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 2103,
										"nodeType": "Block",
										"src": "26926:153:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															"id": 2094,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 2086,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2080,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2074,
																	"src": "26944:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": ">=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 2083,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "26958:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int120_$",
																					"typeString": "type(int120)"
																				},
																				"typeName": {
																					"id": 2082,
																					"name": "int120",
																					"nodeType": "ElementaryTypeName",
																					"src": "26958:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int120_$",
																					"typeString": "type(int120)"
																				}
																			],
																			"id": 2081,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "26953:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 2084,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "26953:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int120",
																			"typeString": "type(int120)"
																		}
																	},
																	"id": 2085,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "min",
																	"nodeType": "MemberAccess",
																	"src": "26953:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int120",
																		"typeString": "int120"
																	}
																},
																"src": "26944:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "&&",
															"rightExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 2093,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2087,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2074,
																	"src": "26973:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "<=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 2090,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "26987:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int120_$",
																					"typeString": "type(int120)"
																				},
																				"typeName": {
																					"id": 2089,
																					"name": "int120",
																					"nodeType": "ElementaryTypeName",
																					"src": "26987:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int120_$",
																					"typeString": "type(int120)"
																				}
																			],
																			"id": 2088,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "26982:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 2091,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "26982:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int120",
																			"typeString": "type(int120)"
																		}
																	},
																	"id": 2092,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "max",
																	"nodeType": "MemberAccess",
																	"src": "26982:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int120",
																		"typeString": "int120"
																	}
																},
																"src": "26973:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"src": "26944:54:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203132302062697473",
															"id": 2095,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "27000:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_3c40c26bb27060cce77002ca0c426dcc1bef2d367c195ca2eb24bd8b2cc1bb09",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 120 bits\""
															},
															"value": "SafeCast: value doesn't fit in 120 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_3c40c26bb27060cce77002ca0c426dcc1bef2d367c195ca2eb24bd8b2cc1bb09",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 120 bits\""
															}
														],
														"id": 2079,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "26936:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 2096,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "26936:106:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 2097,
												"nodeType": "ExpressionStatement",
												"src": "26936:106:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 2100,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2074,
															"src": "27066:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														],
														"id": 2099,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "27059:6:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_int120_$",
															"typeString": "type(int120)"
														},
														"typeName": {
															"id": 2098,
															"name": "int120",
															"nodeType": "ElementaryTypeName",
															"src": "27059:6:5",
															"typeDescriptions": {}
														}
													},
													"id": 2101,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "27059:13:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_int120",
														"typeString": "int120"
													}
												},
												"functionReturnParameters": 2078,
												"id": 2102,
												"nodeType": "Return",
												"src": "27052:20:5"
											}
										]
									},
									"documentation": {
										"id": 2072,
										"nodeType": "StructuredDocumentation",
										"src": "26508:350:5",
										"text": " @dev Returns the downcasted int120 from int256, reverting on\n overflow (when the input is less than smallest int120 or\n greater than largest int120).\n Counterpart to Solidity's `int120` operator.\n Requirements:\n - input must fit into 120 bits\n _Available since v4.7._"
									},
									"id": 2104,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toInt120",
									"nameLocation": "26872:8:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 2075,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2074,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "26888:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 2104,
												"src": "26881:12:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												},
												"typeName": {
													"id": 2073,
													"name": "int256",
													"nodeType": "ElementaryTypeName",
													"src": "26881:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int256",
														"typeString": "int256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "26880:14:5"
									},
									"returnParameters": {
										"id": 2078,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2077,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 2104,
												"src": "26918:6:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int120",
													"typeString": "int120"
												},
												"typeName": {
													"id": 2076,
													"name": "int120",
													"nodeType": "ElementaryTypeName",
													"src": "26918:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int120",
														"typeString": "int120"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "26917:8:5"
									},
									"scope": 2595,
									"src": "26863:216:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 2136,
										"nodeType": "Block",
										"src": "27503:153:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															"id": 2127,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 2119,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2113,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2107,
																	"src": "27521:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": ">=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 2116,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "27535:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int112_$",
																					"typeString": "type(int112)"
																				},
																				"typeName": {
																					"id": 2115,
																					"name": "int112",
																					"nodeType": "ElementaryTypeName",
																					"src": "27535:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int112_$",
																					"typeString": "type(int112)"
																				}
																			],
																			"id": 2114,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "27530:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 2117,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "27530:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int112",
																			"typeString": "type(int112)"
																		}
																	},
																	"id": 2118,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "min",
																	"nodeType": "MemberAccess",
																	"src": "27530:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int112",
																		"typeString": "int112"
																	}
																},
																"src": "27521:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "&&",
															"rightExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 2126,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2120,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2107,
																	"src": "27550:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "<=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 2123,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "27564:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int112_$",
																					"typeString": "type(int112)"
																				},
																				"typeName": {
																					"id": 2122,
																					"name": "int112",
																					"nodeType": "ElementaryTypeName",
																					"src": "27564:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int112_$",
																					"typeString": "type(int112)"
																				}
																			],
																			"id": 2121,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "27559:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 2124,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "27559:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int112",
																			"typeString": "type(int112)"
																		}
																	},
																	"id": 2125,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "max",
																	"nodeType": "MemberAccess",
																	"src": "27559:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int112",
																		"typeString": "int112"
																	}
																},
																"src": "27550:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"src": "27521:54:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203131322062697473",
															"id": 2128,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "27577:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_45659ae152ef697531e1c1115de07c87af91ac22466c3e76b808821799776efd",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 112 bits\""
															},
															"value": "SafeCast: value doesn't fit in 112 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_45659ae152ef697531e1c1115de07c87af91ac22466c3e76b808821799776efd",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 112 bits\""
															}
														],
														"id": 2112,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "27513:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 2129,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "27513:106:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 2130,
												"nodeType": "ExpressionStatement",
												"src": "27513:106:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 2133,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2107,
															"src": "27643:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														],
														"id": 2132,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "27636:6:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_int112_$",
															"typeString": "type(int112)"
														},
														"typeName": {
															"id": 2131,
															"name": "int112",
															"nodeType": "ElementaryTypeName",
															"src": "27636:6:5",
															"typeDescriptions": {}
														}
													},
													"id": 2134,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "27636:13:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_int112",
														"typeString": "int112"
													}
												},
												"functionReturnParameters": 2111,
												"id": 2135,
												"nodeType": "Return",
												"src": "27629:20:5"
											}
										]
									},
									"documentation": {
										"id": 2105,
										"nodeType": "StructuredDocumentation",
										"src": "27085:350:5",
										"text": " @dev Returns the downcasted int112 from int256, reverting on\n overflow (when the input is less than smallest int112 or\n greater than largest int112).\n Counterpart to Solidity's `int112` operator.\n Requirements:\n - input must fit into 112 bits\n _Available since v4.7._"
									},
									"id": 2137,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toInt112",
									"nameLocation": "27449:8:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 2108,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2107,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "27465:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 2137,
												"src": "27458:12:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												},
												"typeName": {
													"id": 2106,
													"name": "int256",
													"nodeType": "ElementaryTypeName",
													"src": "27458:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int256",
														"typeString": "int256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "27457:14:5"
									},
									"returnParameters": {
										"id": 2111,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2110,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 2137,
												"src": "27495:6:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int112",
													"typeString": "int112"
												},
												"typeName": {
													"id": 2109,
													"name": "int112",
													"nodeType": "ElementaryTypeName",
													"src": "27495:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int112",
														"typeString": "int112"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "27494:8:5"
									},
									"scope": 2595,
									"src": "27440:216:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 2169,
										"nodeType": "Block",
										"src": "28080:153:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															"id": 2160,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 2152,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2146,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2140,
																	"src": "28098:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": ">=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 2149,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "28112:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int104_$",
																					"typeString": "type(int104)"
																				},
																				"typeName": {
																					"id": 2148,
																					"name": "int104",
																					"nodeType": "ElementaryTypeName",
																					"src": "28112:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int104_$",
																					"typeString": "type(int104)"
																				}
																			],
																			"id": 2147,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "28107:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 2150,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "28107:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int104",
																			"typeString": "type(int104)"
																		}
																	},
																	"id": 2151,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "min",
																	"nodeType": "MemberAccess",
																	"src": "28107:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int104",
																		"typeString": "int104"
																	}
																},
																"src": "28098:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "&&",
															"rightExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 2159,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2153,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2140,
																	"src": "28127:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "<=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 2156,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "28141:6:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int104_$",
																					"typeString": "type(int104)"
																				},
																				"typeName": {
																					"id": 2155,
																					"name": "int104",
																					"nodeType": "ElementaryTypeName",
																					"src": "28141:6:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int104_$",
																					"typeString": "type(int104)"
																				}
																			],
																			"id": 2154,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "28136:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 2157,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "28136:12:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int104",
																			"typeString": "type(int104)"
																		}
																	},
																	"id": 2158,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "max",
																	"nodeType": "MemberAccess",
																	"src": "28136:16:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int104",
																		"typeString": "int104"
																	}
																},
																"src": "28127:25:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"src": "28098:54:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203130342062697473",
															"id": 2161,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "28154:41:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_5d7f3e1b7e9f9a06fded6b093c6fd1473ca0a14cc4bb683db904e803e2482981",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 104 bits\""
															},
															"value": "SafeCast: value doesn't fit in 104 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_5d7f3e1b7e9f9a06fded6b093c6fd1473ca0a14cc4bb683db904e803e2482981",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 104 bits\""
															}
														],
														"id": 2145,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "28090:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 2162,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "28090:106:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 2163,
												"nodeType": "ExpressionStatement",
												"src": "28090:106:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 2166,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2140,
															"src": "28220:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														],
														"id": 2165,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "28213:6:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_int104_$",
															"typeString": "type(int104)"
														},
														"typeName": {
															"id": 2164,
															"name": "int104",
															"nodeType": "ElementaryTypeName",
															"src": "28213:6:5",
															"typeDescriptions": {}
														}
													},
													"id": 2167,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "28213:13:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_int104",
														"typeString": "int104"
													}
												},
												"functionReturnParameters": 2144,
												"id": 2168,
												"nodeType": "Return",
												"src": "28206:20:5"
											}
										]
									},
									"documentation": {
										"id": 2138,
										"nodeType": "StructuredDocumentation",
										"src": "27662:350:5",
										"text": " @dev Returns the downcasted int104 from int256, reverting on\n overflow (when the input is less than smallest int104 or\n greater than largest int104).\n Counterpart to Solidity's `int104` operator.\n Requirements:\n - input must fit into 104 bits\n _Available since v4.7._"
									},
									"id": 2170,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toInt104",
									"nameLocation": "28026:8:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 2141,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2140,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "28042:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 2170,
												"src": "28035:12:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												},
												"typeName": {
													"id": 2139,
													"name": "int256",
													"nodeType": "ElementaryTypeName",
													"src": "28035:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int256",
														"typeString": "int256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "28034:14:5"
									},
									"returnParameters": {
										"id": 2144,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2143,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 2170,
												"src": "28072:6:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int104",
													"typeString": "int104"
												},
												"typeName": {
													"id": 2142,
													"name": "int104",
													"nodeType": "ElementaryTypeName",
													"src": "28072:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int104",
														"typeString": "int104"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "28071:8:5"
									},
									"scope": 2595,
									"src": "28017:216:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 2202,
										"nodeType": "Block",
										"src": "28650:149:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															"id": 2193,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 2185,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2179,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2173,
																	"src": "28668:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": ">=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 2182,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "28682:5:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int96_$",
																					"typeString": "type(int96)"
																				},
																				"typeName": {
																					"id": 2181,
																					"name": "int96",
																					"nodeType": "ElementaryTypeName",
																					"src": "28682:5:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int96_$",
																					"typeString": "type(int96)"
																				}
																			],
																			"id": 2180,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "28677:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 2183,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "28677:11:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int96",
																			"typeString": "type(int96)"
																		}
																	},
																	"id": 2184,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "min",
																	"nodeType": "MemberAccess",
																	"src": "28677:15:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int96",
																		"typeString": "int96"
																	}
																},
																"src": "28668:24:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "&&",
															"rightExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 2192,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2186,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2173,
																	"src": "28696:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "<=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 2189,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "28710:5:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int96_$",
																					"typeString": "type(int96)"
																				},
																				"typeName": {
																					"id": 2188,
																					"name": "int96",
																					"nodeType": "ElementaryTypeName",
																					"src": "28710:5:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int96_$",
																					"typeString": "type(int96)"
																				}
																			],
																			"id": 2187,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "28705:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 2190,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "28705:11:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int96",
																			"typeString": "type(int96)"
																		}
																	},
																	"id": 2191,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "max",
																	"nodeType": "MemberAccess",
																	"src": "28705:15:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int96",
																		"typeString": "int96"
																	}
																},
																"src": "28696:24:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"src": "28668:52:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2039362062697473",
															"id": 2194,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "28722:40:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_06d20189090e973729391526269baef79c35dd621633195648e5f8309eef9e19",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 96 bits\""
															},
															"value": "SafeCast: value doesn't fit in 96 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_06d20189090e973729391526269baef79c35dd621633195648e5f8309eef9e19",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 96 bits\""
															}
														],
														"id": 2178,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "28660:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 2195,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "28660:103:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 2196,
												"nodeType": "ExpressionStatement",
												"src": "28660:103:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 2199,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2173,
															"src": "28786:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														],
														"id": 2198,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "28780:5:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_int96_$",
															"typeString": "type(int96)"
														},
														"typeName": {
															"id": 2197,
															"name": "int96",
															"nodeType": "ElementaryTypeName",
															"src": "28780:5:5",
															"typeDescriptions": {}
														}
													},
													"id": 2200,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "28780:12:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_int96",
														"typeString": "int96"
													}
												},
												"functionReturnParameters": 2177,
												"id": 2201,
												"nodeType": "Return",
												"src": "28773:19:5"
											}
										]
									},
									"documentation": {
										"id": 2171,
										"nodeType": "StructuredDocumentation",
										"src": "28239:345:5",
										"text": " @dev Returns the downcasted int96 from int256, reverting on\n overflow (when the input is less than smallest int96 or\n greater than largest int96).\n Counterpart to Solidity's `int96` operator.\n Requirements:\n - input must fit into 96 bits\n _Available since v4.7._"
									},
									"id": 2203,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toInt96",
									"nameLocation": "28598:7:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 2174,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2173,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "28613:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 2203,
												"src": "28606:12:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												},
												"typeName": {
													"id": 2172,
													"name": "int256",
													"nodeType": "ElementaryTypeName",
													"src": "28606:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int256",
														"typeString": "int256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "28605:14:5"
									},
									"returnParameters": {
										"id": 2177,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2176,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 2203,
												"src": "28643:5:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int96",
													"typeString": "int96"
												},
												"typeName": {
													"id": 2175,
													"name": "int96",
													"nodeType": "ElementaryTypeName",
													"src": "28643:5:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int96",
														"typeString": "int96"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "28642:7:5"
									},
									"scope": 2595,
									"src": "28589:210:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 2235,
										"nodeType": "Block",
										"src": "29216:149:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															"id": 2226,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 2218,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2212,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2206,
																	"src": "29234:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": ">=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 2215,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "29248:5:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int88_$",
																					"typeString": "type(int88)"
																				},
																				"typeName": {
																					"id": 2214,
																					"name": "int88",
																					"nodeType": "ElementaryTypeName",
																					"src": "29248:5:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int88_$",
																					"typeString": "type(int88)"
																				}
																			],
																			"id": 2213,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "29243:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 2216,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "29243:11:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int88",
																			"typeString": "type(int88)"
																		}
																	},
																	"id": 2217,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "min",
																	"nodeType": "MemberAccess",
																	"src": "29243:15:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int88",
																		"typeString": "int88"
																	}
																},
																"src": "29234:24:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "&&",
															"rightExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 2225,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2219,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2206,
																	"src": "29262:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "<=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 2222,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "29276:5:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int88_$",
																					"typeString": "type(int88)"
																				},
																				"typeName": {
																					"id": 2221,
																					"name": "int88",
																					"nodeType": "ElementaryTypeName",
																					"src": "29276:5:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int88_$",
																					"typeString": "type(int88)"
																				}
																			],
																			"id": 2220,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "29271:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 2223,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "29271:11:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int88",
																			"typeString": "type(int88)"
																		}
																	},
																	"id": 2224,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "max",
																	"nodeType": "MemberAccess",
																	"src": "29271:15:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int88",
																		"typeString": "int88"
																	}
																},
																"src": "29262:24:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"src": "29234:52:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2038382062697473",
															"id": 2227,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "29288:40:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_ae080bd7a76a46f0a0caf00941bc2cdf6002799ca2813a3af7295019576d715d",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 88 bits\""
															},
															"value": "SafeCast: value doesn't fit in 88 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_ae080bd7a76a46f0a0caf00941bc2cdf6002799ca2813a3af7295019576d715d",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 88 bits\""
															}
														],
														"id": 2211,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "29226:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 2228,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "29226:103:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 2229,
												"nodeType": "ExpressionStatement",
												"src": "29226:103:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 2232,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2206,
															"src": "29352:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														],
														"id": 2231,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "29346:5:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_int88_$",
															"typeString": "type(int88)"
														},
														"typeName": {
															"id": 2230,
															"name": "int88",
															"nodeType": "ElementaryTypeName",
															"src": "29346:5:5",
															"typeDescriptions": {}
														}
													},
													"id": 2233,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "29346:12:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_int88",
														"typeString": "int88"
													}
												},
												"functionReturnParameters": 2210,
												"id": 2234,
												"nodeType": "Return",
												"src": "29339:19:5"
											}
										]
									},
									"documentation": {
										"id": 2204,
										"nodeType": "StructuredDocumentation",
										"src": "28805:345:5",
										"text": " @dev Returns the downcasted int88 from int256, reverting on\n overflow (when the input is less than smallest int88 or\n greater than largest int88).\n Counterpart to Solidity's `int88` operator.\n Requirements:\n - input must fit into 88 bits\n _Available since v4.7._"
									},
									"id": 2236,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toInt88",
									"nameLocation": "29164:7:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 2207,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2206,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "29179:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 2236,
												"src": "29172:12:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												},
												"typeName": {
													"id": 2205,
													"name": "int256",
													"nodeType": "ElementaryTypeName",
													"src": "29172:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int256",
														"typeString": "int256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "29171:14:5"
									},
									"returnParameters": {
										"id": 2210,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2209,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 2236,
												"src": "29209:5:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int88",
													"typeString": "int88"
												},
												"typeName": {
													"id": 2208,
													"name": "int88",
													"nodeType": "ElementaryTypeName",
													"src": "29209:5:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int88",
														"typeString": "int88"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "29208:7:5"
									},
									"scope": 2595,
									"src": "29155:210:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 2268,
										"nodeType": "Block",
										"src": "29782:149:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															"id": 2259,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 2251,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2245,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2239,
																	"src": "29800:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": ">=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 2248,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "29814:5:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int80_$",
																					"typeString": "type(int80)"
																				},
																				"typeName": {
																					"id": 2247,
																					"name": "int80",
																					"nodeType": "ElementaryTypeName",
																					"src": "29814:5:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int80_$",
																					"typeString": "type(int80)"
																				}
																			],
																			"id": 2246,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "29809:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 2249,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "29809:11:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int80",
																			"typeString": "type(int80)"
																		}
																	},
																	"id": 2250,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "min",
																	"nodeType": "MemberAccess",
																	"src": "29809:15:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int80",
																		"typeString": "int80"
																	}
																},
																"src": "29800:24:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "&&",
															"rightExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 2258,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2252,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2239,
																	"src": "29828:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "<=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 2255,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "29842:5:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int80_$",
																					"typeString": "type(int80)"
																				},
																				"typeName": {
																					"id": 2254,
																					"name": "int80",
																					"nodeType": "ElementaryTypeName",
																					"src": "29842:5:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int80_$",
																					"typeString": "type(int80)"
																				}
																			],
																			"id": 2253,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "29837:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 2256,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "29837:11:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int80",
																			"typeString": "type(int80)"
																		}
																	},
																	"id": 2257,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "max",
																	"nodeType": "MemberAccess",
																	"src": "29837:15:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int80",
																		"typeString": "int80"
																	}
																},
																"src": "29828:24:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"src": "29800:52:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2038302062697473",
															"id": 2260,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "29854:40:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_3cba87c71fade7d3cd7b673c159aab98afc040a5369691a33559d905d20ab5d1",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 80 bits\""
															},
															"value": "SafeCast: value doesn't fit in 80 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_3cba87c71fade7d3cd7b673c159aab98afc040a5369691a33559d905d20ab5d1",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 80 bits\""
															}
														],
														"id": 2244,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "29792:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 2261,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "29792:103:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 2262,
												"nodeType": "ExpressionStatement",
												"src": "29792:103:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 2265,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2239,
															"src": "29918:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														],
														"id": 2264,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "29912:5:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_int80_$",
															"typeString": "type(int80)"
														},
														"typeName": {
															"id": 2263,
															"name": "int80",
															"nodeType": "ElementaryTypeName",
															"src": "29912:5:5",
															"typeDescriptions": {}
														}
													},
													"id": 2266,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "29912:12:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_int80",
														"typeString": "int80"
													}
												},
												"functionReturnParameters": 2243,
												"id": 2267,
												"nodeType": "Return",
												"src": "29905:19:5"
											}
										]
									},
									"documentation": {
										"id": 2237,
										"nodeType": "StructuredDocumentation",
										"src": "29371:345:5",
										"text": " @dev Returns the downcasted int80 from int256, reverting on\n overflow (when the input is less than smallest int80 or\n greater than largest int80).\n Counterpart to Solidity's `int80` operator.\n Requirements:\n - input must fit into 80 bits\n _Available since v4.7._"
									},
									"id": 2269,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toInt80",
									"nameLocation": "29730:7:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 2240,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2239,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "29745:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 2269,
												"src": "29738:12:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												},
												"typeName": {
													"id": 2238,
													"name": "int256",
													"nodeType": "ElementaryTypeName",
													"src": "29738:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int256",
														"typeString": "int256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "29737:14:5"
									},
									"returnParameters": {
										"id": 2243,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2242,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 2269,
												"src": "29775:5:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int80",
													"typeString": "int80"
												},
												"typeName": {
													"id": 2241,
													"name": "int80",
													"nodeType": "ElementaryTypeName",
													"src": "29775:5:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int80",
														"typeString": "int80"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "29774:7:5"
									},
									"scope": 2595,
									"src": "29721:210:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 2301,
										"nodeType": "Block",
										"src": "30348:149:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															"id": 2292,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 2284,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2278,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2272,
																	"src": "30366:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": ">=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 2281,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "30380:5:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int72_$",
																					"typeString": "type(int72)"
																				},
																				"typeName": {
																					"id": 2280,
																					"name": "int72",
																					"nodeType": "ElementaryTypeName",
																					"src": "30380:5:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int72_$",
																					"typeString": "type(int72)"
																				}
																			],
																			"id": 2279,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "30375:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 2282,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "30375:11:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int72",
																			"typeString": "type(int72)"
																		}
																	},
																	"id": 2283,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "min",
																	"nodeType": "MemberAccess",
																	"src": "30375:15:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int72",
																		"typeString": "int72"
																	}
																},
																"src": "30366:24:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "&&",
															"rightExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 2291,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2285,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2272,
																	"src": "30394:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "<=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 2288,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "30408:5:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int72_$",
																					"typeString": "type(int72)"
																				},
																				"typeName": {
																					"id": 2287,
																					"name": "int72",
																					"nodeType": "ElementaryTypeName",
																					"src": "30408:5:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int72_$",
																					"typeString": "type(int72)"
																				}
																			],
																			"id": 2286,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "30403:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 2289,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "30403:11:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int72",
																			"typeString": "type(int72)"
																		}
																	},
																	"id": 2290,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "max",
																	"nodeType": "MemberAccess",
																	"src": "30403:15:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int72",
																		"typeString": "int72"
																	}
																},
																"src": "30394:24:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"src": "30366:52:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2037322062697473",
															"id": 2293,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "30420:40:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_71584237cc5250b8f417982144a947efe8f4c76feba008ff32ac480e69d60606",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 72 bits\""
															},
															"value": "SafeCast: value doesn't fit in 72 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_71584237cc5250b8f417982144a947efe8f4c76feba008ff32ac480e69d60606",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 72 bits\""
															}
														],
														"id": 2277,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "30358:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 2294,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "30358:103:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 2295,
												"nodeType": "ExpressionStatement",
												"src": "30358:103:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 2298,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2272,
															"src": "30484:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														],
														"id": 2297,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "30478:5:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_int72_$",
															"typeString": "type(int72)"
														},
														"typeName": {
															"id": 2296,
															"name": "int72",
															"nodeType": "ElementaryTypeName",
															"src": "30478:5:5",
															"typeDescriptions": {}
														}
													},
													"id": 2299,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "30478:12:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_int72",
														"typeString": "int72"
													}
												},
												"functionReturnParameters": 2276,
												"id": 2300,
												"nodeType": "Return",
												"src": "30471:19:5"
											}
										]
									},
									"documentation": {
										"id": 2270,
										"nodeType": "StructuredDocumentation",
										"src": "29937:345:5",
										"text": " @dev Returns the downcasted int72 from int256, reverting on\n overflow (when the input is less than smallest int72 or\n greater than largest int72).\n Counterpart to Solidity's `int72` operator.\n Requirements:\n - input must fit into 72 bits\n _Available since v4.7._"
									},
									"id": 2302,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toInt72",
									"nameLocation": "30296:7:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 2273,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2272,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "30311:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 2302,
												"src": "30304:12:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												},
												"typeName": {
													"id": 2271,
													"name": "int256",
													"nodeType": "ElementaryTypeName",
													"src": "30304:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int256",
														"typeString": "int256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "30303:14:5"
									},
									"returnParameters": {
										"id": 2276,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2275,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 2302,
												"src": "30341:5:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int72",
													"typeString": "int72"
												},
												"typeName": {
													"id": 2274,
													"name": "int72",
													"nodeType": "ElementaryTypeName",
													"src": "30341:5:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int72",
														"typeString": "int72"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "30340:7:5"
									},
									"scope": 2595,
									"src": "30287:210:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 2334,
										"nodeType": "Block",
										"src": "30914:149:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															"id": 2325,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 2317,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2311,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2305,
																	"src": "30932:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": ">=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 2314,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "30946:5:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int64_$",
																					"typeString": "type(int64)"
																				},
																				"typeName": {
																					"id": 2313,
																					"name": "int64",
																					"nodeType": "ElementaryTypeName",
																					"src": "30946:5:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int64_$",
																					"typeString": "type(int64)"
																				}
																			],
																			"id": 2312,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "30941:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 2315,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "30941:11:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int64",
																			"typeString": "type(int64)"
																		}
																	},
																	"id": 2316,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "min",
																	"nodeType": "MemberAccess",
																	"src": "30941:15:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int64",
																		"typeString": "int64"
																	}
																},
																"src": "30932:24:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "&&",
															"rightExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 2324,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2318,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2305,
																	"src": "30960:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "<=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 2321,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "30974:5:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int64_$",
																					"typeString": "type(int64)"
																				},
																				"typeName": {
																					"id": 2320,
																					"name": "int64",
																					"nodeType": "ElementaryTypeName",
																					"src": "30974:5:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int64_$",
																					"typeString": "type(int64)"
																				}
																			],
																			"id": 2319,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "30969:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 2322,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "30969:11:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int64",
																			"typeString": "type(int64)"
																		}
																	},
																	"id": 2323,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "max",
																	"nodeType": "MemberAccess",
																	"src": "30969:15:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int64",
																		"typeString": "int64"
																	}
																},
																"src": "30960:24:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"src": "30932:52:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2036342062697473",
															"id": 2326,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "30986:40:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_93ae0c6bf6ffaece591a770b1865daa9f65157e541970aa9d8dc5f89a9490939",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 64 bits\""
															},
															"value": "SafeCast: value doesn't fit in 64 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_93ae0c6bf6ffaece591a770b1865daa9f65157e541970aa9d8dc5f89a9490939",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 64 bits\""
															}
														],
														"id": 2310,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "30924:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 2327,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "30924:103:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 2328,
												"nodeType": "ExpressionStatement",
												"src": "30924:103:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 2331,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2305,
															"src": "31050:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														],
														"id": 2330,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "31044:5:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_int64_$",
															"typeString": "type(int64)"
														},
														"typeName": {
															"id": 2329,
															"name": "int64",
															"nodeType": "ElementaryTypeName",
															"src": "31044:5:5",
															"typeDescriptions": {}
														}
													},
													"id": 2332,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "31044:12:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_int64",
														"typeString": "int64"
													}
												},
												"functionReturnParameters": 2309,
												"id": 2333,
												"nodeType": "Return",
												"src": "31037:19:5"
											}
										]
									},
									"documentation": {
										"id": 2303,
										"nodeType": "StructuredDocumentation",
										"src": "30503:345:5",
										"text": " @dev Returns the downcasted int64 from int256, reverting on\n overflow (when the input is less than smallest int64 or\n greater than largest int64).\n Counterpart to Solidity's `int64` operator.\n Requirements:\n - input must fit into 64 bits\n _Available since v3.1._"
									},
									"id": 2335,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toInt64",
									"nameLocation": "30862:7:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 2306,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2305,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "30877:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 2335,
												"src": "30870:12:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												},
												"typeName": {
													"id": 2304,
													"name": "int256",
													"nodeType": "ElementaryTypeName",
													"src": "30870:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int256",
														"typeString": "int256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "30869:14:5"
									},
									"returnParameters": {
										"id": 2309,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2308,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 2335,
												"src": "30907:5:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int64",
													"typeString": "int64"
												},
												"typeName": {
													"id": 2307,
													"name": "int64",
													"nodeType": "ElementaryTypeName",
													"src": "30907:5:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int64",
														"typeString": "int64"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "30906:7:5"
									},
									"scope": 2595,
									"src": "30853:210:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 2367,
										"nodeType": "Block",
										"src": "31480:149:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															"id": 2358,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 2350,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2344,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2338,
																	"src": "31498:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": ">=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 2347,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "31512:5:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int56_$",
																					"typeString": "type(int56)"
																				},
																				"typeName": {
																					"id": 2346,
																					"name": "int56",
																					"nodeType": "ElementaryTypeName",
																					"src": "31512:5:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int56_$",
																					"typeString": "type(int56)"
																				}
																			],
																			"id": 2345,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "31507:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 2348,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "31507:11:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int56",
																			"typeString": "type(int56)"
																		}
																	},
																	"id": 2349,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "min",
																	"nodeType": "MemberAccess",
																	"src": "31507:15:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int56",
																		"typeString": "int56"
																	}
																},
																"src": "31498:24:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "&&",
															"rightExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 2357,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2351,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2338,
																	"src": "31526:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "<=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 2354,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "31540:5:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int56_$",
																					"typeString": "type(int56)"
																				},
																				"typeName": {
																					"id": 2353,
																					"name": "int56",
																					"nodeType": "ElementaryTypeName",
																					"src": "31540:5:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int56_$",
																					"typeString": "type(int56)"
																				}
																			],
																			"id": 2352,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "31535:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 2355,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "31535:11:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int56",
																			"typeString": "type(int56)"
																		}
																	},
																	"id": 2356,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "max",
																	"nodeType": "MemberAccess",
																	"src": "31535:15:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int56",
																		"typeString": "int56"
																	}
																},
																"src": "31526:24:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"src": "31498:52:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2035362062697473",
															"id": 2359,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "31552:40:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_656ad93b5ff6665bfe05d97d51fad7c02ad79e6c43bef066c042a6900f450bc5",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 56 bits\""
															},
															"value": "SafeCast: value doesn't fit in 56 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_656ad93b5ff6665bfe05d97d51fad7c02ad79e6c43bef066c042a6900f450bc5",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 56 bits\""
															}
														],
														"id": 2343,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "31490:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 2360,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "31490:103:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 2361,
												"nodeType": "ExpressionStatement",
												"src": "31490:103:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 2364,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2338,
															"src": "31616:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														],
														"id": 2363,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "31610:5:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_int56_$",
															"typeString": "type(int56)"
														},
														"typeName": {
															"id": 2362,
															"name": "int56",
															"nodeType": "ElementaryTypeName",
															"src": "31610:5:5",
															"typeDescriptions": {}
														}
													},
													"id": 2365,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "31610:12:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_int56",
														"typeString": "int56"
													}
												},
												"functionReturnParameters": 2342,
												"id": 2366,
												"nodeType": "Return",
												"src": "31603:19:5"
											}
										]
									},
									"documentation": {
										"id": 2336,
										"nodeType": "StructuredDocumentation",
										"src": "31069:345:5",
										"text": " @dev Returns the downcasted int56 from int256, reverting on\n overflow (when the input is less than smallest int56 or\n greater than largest int56).\n Counterpart to Solidity's `int56` operator.\n Requirements:\n - input must fit into 56 bits\n _Available since v4.7._"
									},
									"id": 2368,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toInt56",
									"nameLocation": "31428:7:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 2339,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2338,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "31443:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 2368,
												"src": "31436:12:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												},
												"typeName": {
													"id": 2337,
													"name": "int256",
													"nodeType": "ElementaryTypeName",
													"src": "31436:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int256",
														"typeString": "int256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "31435:14:5"
									},
									"returnParameters": {
										"id": 2342,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2341,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 2368,
												"src": "31473:5:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int56",
													"typeString": "int56"
												},
												"typeName": {
													"id": 2340,
													"name": "int56",
													"nodeType": "ElementaryTypeName",
													"src": "31473:5:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int56",
														"typeString": "int56"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "31472:7:5"
									},
									"scope": 2595,
									"src": "31419:210:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 2400,
										"nodeType": "Block",
										"src": "32046:149:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															"id": 2391,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 2383,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2377,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2371,
																	"src": "32064:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": ">=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 2380,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "32078:5:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int48_$",
																					"typeString": "type(int48)"
																				},
																				"typeName": {
																					"id": 2379,
																					"name": "int48",
																					"nodeType": "ElementaryTypeName",
																					"src": "32078:5:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int48_$",
																					"typeString": "type(int48)"
																				}
																			],
																			"id": 2378,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "32073:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 2381,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "32073:11:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int48",
																			"typeString": "type(int48)"
																		}
																	},
																	"id": 2382,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "min",
																	"nodeType": "MemberAccess",
																	"src": "32073:15:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int48",
																		"typeString": "int48"
																	}
																},
																"src": "32064:24:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "&&",
															"rightExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 2390,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2384,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2371,
																	"src": "32092:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "<=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 2387,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "32106:5:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int48_$",
																					"typeString": "type(int48)"
																				},
																				"typeName": {
																					"id": 2386,
																					"name": "int48",
																					"nodeType": "ElementaryTypeName",
																					"src": "32106:5:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int48_$",
																					"typeString": "type(int48)"
																				}
																			],
																			"id": 2385,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "32101:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 2388,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "32101:11:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int48",
																			"typeString": "type(int48)"
																		}
																	},
																	"id": 2389,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "max",
																	"nodeType": "MemberAccess",
																	"src": "32101:15:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int48",
																		"typeString": "int48"
																	}
																},
																"src": "32092:24:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"src": "32064:52:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2034382062697473",
															"id": 2392,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "32118:40:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_599034f9324dd4e988c6cea5a00a30f53147fec1b01559682f18cd840028f495",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 48 bits\""
															},
															"value": "SafeCast: value doesn't fit in 48 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_599034f9324dd4e988c6cea5a00a30f53147fec1b01559682f18cd840028f495",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 48 bits\""
															}
														],
														"id": 2376,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "32056:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 2393,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "32056:103:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 2394,
												"nodeType": "ExpressionStatement",
												"src": "32056:103:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 2397,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2371,
															"src": "32182:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														],
														"id": 2396,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "32176:5:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_int48_$",
															"typeString": "type(int48)"
														},
														"typeName": {
															"id": 2395,
															"name": "int48",
															"nodeType": "ElementaryTypeName",
															"src": "32176:5:5",
															"typeDescriptions": {}
														}
													},
													"id": 2398,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "32176:12:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_int48",
														"typeString": "int48"
													}
												},
												"functionReturnParameters": 2375,
												"id": 2399,
												"nodeType": "Return",
												"src": "32169:19:5"
											}
										]
									},
									"documentation": {
										"id": 2369,
										"nodeType": "StructuredDocumentation",
										"src": "31635:345:5",
										"text": " @dev Returns the downcasted int48 from int256, reverting on\n overflow (when the input is less than smallest int48 or\n greater than largest int48).\n Counterpart to Solidity's `int48` operator.\n Requirements:\n - input must fit into 48 bits\n _Available since v4.7._"
									},
									"id": 2401,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toInt48",
									"nameLocation": "31994:7:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 2372,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2371,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "32009:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 2401,
												"src": "32002:12:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												},
												"typeName": {
													"id": 2370,
													"name": "int256",
													"nodeType": "ElementaryTypeName",
													"src": "32002:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int256",
														"typeString": "int256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "32001:14:5"
									},
									"returnParameters": {
										"id": 2375,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2374,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 2401,
												"src": "32039:5:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int48",
													"typeString": "int48"
												},
												"typeName": {
													"id": 2373,
													"name": "int48",
													"nodeType": "ElementaryTypeName",
													"src": "32039:5:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int48",
														"typeString": "int48"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "32038:7:5"
									},
									"scope": 2595,
									"src": "31985:210:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 2433,
										"nodeType": "Block",
										"src": "32612:149:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															"id": 2424,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 2416,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2410,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2404,
																	"src": "32630:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": ">=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 2413,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "32644:5:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int40_$",
																					"typeString": "type(int40)"
																				},
																				"typeName": {
																					"id": 2412,
																					"name": "int40",
																					"nodeType": "ElementaryTypeName",
																					"src": "32644:5:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int40_$",
																					"typeString": "type(int40)"
																				}
																			],
																			"id": 2411,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "32639:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 2414,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "32639:11:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int40",
																			"typeString": "type(int40)"
																		}
																	},
																	"id": 2415,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "min",
																	"nodeType": "MemberAccess",
																	"src": "32639:15:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int40",
																		"typeString": "int40"
																	}
																},
																"src": "32630:24:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "&&",
															"rightExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 2423,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2417,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2404,
																	"src": "32658:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "<=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 2420,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "32672:5:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int40_$",
																					"typeString": "type(int40)"
																				},
																				"typeName": {
																					"id": 2419,
																					"name": "int40",
																					"nodeType": "ElementaryTypeName",
																					"src": "32672:5:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int40_$",
																					"typeString": "type(int40)"
																				}
																			],
																			"id": 2418,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "32667:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 2421,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "32667:11:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int40",
																			"typeString": "type(int40)"
																		}
																	},
																	"id": 2422,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "max",
																	"nodeType": "MemberAccess",
																	"src": "32667:15:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int40",
																		"typeString": "int40"
																	}
																},
																"src": "32658:24:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"src": "32630:52:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2034302062697473",
															"id": 2425,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "32684:40:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_b23559c58b98a5d3ed7016699c7171ac8defa5a1d180f9a9ffa60468a5701d37",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 40 bits\""
															},
															"value": "SafeCast: value doesn't fit in 40 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_b23559c58b98a5d3ed7016699c7171ac8defa5a1d180f9a9ffa60468a5701d37",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 40 bits\""
															}
														],
														"id": 2409,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "32622:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 2426,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "32622:103:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 2427,
												"nodeType": "ExpressionStatement",
												"src": "32622:103:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 2430,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2404,
															"src": "32748:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														],
														"id": 2429,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "32742:5:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_int40_$",
															"typeString": "type(int40)"
														},
														"typeName": {
															"id": 2428,
															"name": "int40",
															"nodeType": "ElementaryTypeName",
															"src": "32742:5:5",
															"typeDescriptions": {}
														}
													},
													"id": 2431,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "32742:12:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_int40",
														"typeString": "int40"
													}
												},
												"functionReturnParameters": 2408,
												"id": 2432,
												"nodeType": "Return",
												"src": "32735:19:5"
											}
										]
									},
									"documentation": {
										"id": 2402,
										"nodeType": "StructuredDocumentation",
										"src": "32201:345:5",
										"text": " @dev Returns the downcasted int40 from int256, reverting on\n overflow (when the input is less than smallest int40 or\n greater than largest int40).\n Counterpart to Solidity's `int40` operator.\n Requirements:\n - input must fit into 40 bits\n _Available since v4.7._"
									},
									"id": 2434,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toInt40",
									"nameLocation": "32560:7:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 2405,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2404,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "32575:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 2434,
												"src": "32568:12:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												},
												"typeName": {
													"id": 2403,
													"name": "int256",
													"nodeType": "ElementaryTypeName",
													"src": "32568:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int256",
														"typeString": "int256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "32567:14:5"
									},
									"returnParameters": {
										"id": 2408,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2407,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 2434,
												"src": "32605:5:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int40",
													"typeString": "int40"
												},
												"typeName": {
													"id": 2406,
													"name": "int40",
													"nodeType": "ElementaryTypeName",
													"src": "32605:5:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int40",
														"typeString": "int40"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "32604:7:5"
									},
									"scope": 2595,
									"src": "32551:210:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 2466,
										"nodeType": "Block",
										"src": "33178:149:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															"id": 2457,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 2449,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2443,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2437,
																	"src": "33196:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": ">=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 2446,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "33210:5:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int32_$",
																					"typeString": "type(int32)"
																				},
																				"typeName": {
																					"id": 2445,
																					"name": "int32",
																					"nodeType": "ElementaryTypeName",
																					"src": "33210:5:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int32_$",
																					"typeString": "type(int32)"
																				}
																			],
																			"id": 2444,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "33205:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 2447,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "33205:11:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int32",
																			"typeString": "type(int32)"
																		}
																	},
																	"id": 2448,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "min",
																	"nodeType": "MemberAccess",
																	"src": "33205:15:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int32",
																		"typeString": "int32"
																	}
																},
																"src": "33196:24:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "&&",
															"rightExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 2456,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2450,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2437,
																	"src": "33224:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "<=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 2453,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "33238:5:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int32_$",
																					"typeString": "type(int32)"
																				},
																				"typeName": {
																					"id": 2452,
																					"name": "int32",
																					"nodeType": "ElementaryTypeName",
																					"src": "33238:5:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int32_$",
																					"typeString": "type(int32)"
																				}
																			],
																			"id": 2451,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "33233:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 2454,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "33233:11:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int32",
																			"typeString": "type(int32)"
																		}
																	},
																	"id": 2455,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "max",
																	"nodeType": "MemberAccess",
																	"src": "33233:15:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int32",
																		"typeString": "int32"
																	}
																},
																"src": "33224:24:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"src": "33196:52:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2033322062697473",
															"id": 2458,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "33250:40:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_c907489dafcfb622d3b83f2657a14d6da2f59e0de3116af0d6a80554c1a7cb19",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 32 bits\""
															},
															"value": "SafeCast: value doesn't fit in 32 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_c907489dafcfb622d3b83f2657a14d6da2f59e0de3116af0d6a80554c1a7cb19",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 32 bits\""
															}
														],
														"id": 2442,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "33188:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 2459,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "33188:103:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 2460,
												"nodeType": "ExpressionStatement",
												"src": "33188:103:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 2463,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2437,
															"src": "33314:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														],
														"id": 2462,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "33308:5:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_int32_$",
															"typeString": "type(int32)"
														},
														"typeName": {
															"id": 2461,
															"name": "int32",
															"nodeType": "ElementaryTypeName",
															"src": "33308:5:5",
															"typeDescriptions": {}
														}
													},
													"id": 2464,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "33308:12:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_int32",
														"typeString": "int32"
													}
												},
												"functionReturnParameters": 2441,
												"id": 2465,
												"nodeType": "Return",
												"src": "33301:19:5"
											}
										]
									},
									"documentation": {
										"id": 2435,
										"nodeType": "StructuredDocumentation",
										"src": "32767:345:5",
										"text": " @dev Returns the downcasted int32 from int256, reverting on\n overflow (when the input is less than smallest int32 or\n greater than largest int32).\n Counterpart to Solidity's `int32` operator.\n Requirements:\n - input must fit into 32 bits\n _Available since v3.1._"
									},
									"id": 2467,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toInt32",
									"nameLocation": "33126:7:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 2438,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2437,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "33141:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 2467,
												"src": "33134:12:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												},
												"typeName": {
													"id": 2436,
													"name": "int256",
													"nodeType": "ElementaryTypeName",
													"src": "33134:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int256",
														"typeString": "int256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "33133:14:5"
									},
									"returnParameters": {
										"id": 2441,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2440,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 2467,
												"src": "33171:5:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int32",
													"typeString": "int32"
												},
												"typeName": {
													"id": 2439,
													"name": "int32",
													"nodeType": "ElementaryTypeName",
													"src": "33171:5:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int32",
														"typeString": "int32"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "33170:7:5"
									},
									"scope": 2595,
									"src": "33117:210:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 2499,
										"nodeType": "Block",
										"src": "33744:149:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															"id": 2490,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 2482,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2476,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2470,
																	"src": "33762:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": ">=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 2479,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "33776:5:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int24_$",
																					"typeString": "type(int24)"
																				},
																				"typeName": {
																					"id": 2478,
																					"name": "int24",
																					"nodeType": "ElementaryTypeName",
																					"src": "33776:5:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int24_$",
																					"typeString": "type(int24)"
																				}
																			],
																			"id": 2477,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "33771:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 2480,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "33771:11:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int24",
																			"typeString": "type(int24)"
																		}
																	},
																	"id": 2481,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "min",
																	"nodeType": "MemberAccess",
																	"src": "33771:15:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int24",
																		"typeString": "int24"
																	}
																},
																"src": "33762:24:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "&&",
															"rightExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 2489,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2483,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2470,
																	"src": "33790:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "<=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 2486,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "33804:5:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int24_$",
																					"typeString": "type(int24)"
																				},
																				"typeName": {
																					"id": 2485,
																					"name": "int24",
																					"nodeType": "ElementaryTypeName",
																					"src": "33804:5:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int24_$",
																					"typeString": "type(int24)"
																				}
																			],
																			"id": 2484,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "33799:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 2487,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "33799:11:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int24",
																			"typeString": "type(int24)"
																		}
																	},
																	"id": 2488,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "max",
																	"nodeType": "MemberAccess",
																	"src": "33799:15:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int24",
																		"typeString": "int24"
																	}
																},
																"src": "33790:24:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"src": "33762:52:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2032342062697473",
															"id": 2491,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "33816:40:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_f68b65aaf4574c34e9b9d1442d19636c6608b8c4dbd9331c7245f7915c8b2f55",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 24 bits\""
															},
															"value": "SafeCast: value doesn't fit in 24 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_f68b65aaf4574c34e9b9d1442d19636c6608b8c4dbd9331c7245f7915c8b2f55",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 24 bits\""
															}
														],
														"id": 2475,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "33754:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 2492,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "33754:103:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 2493,
												"nodeType": "ExpressionStatement",
												"src": "33754:103:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 2496,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2470,
															"src": "33880:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														],
														"id": 2495,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "33874:5:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_int24_$",
															"typeString": "type(int24)"
														},
														"typeName": {
															"id": 2494,
															"name": "int24",
															"nodeType": "ElementaryTypeName",
															"src": "33874:5:5",
															"typeDescriptions": {}
														}
													},
													"id": 2497,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "33874:12:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_int24",
														"typeString": "int24"
													}
												},
												"functionReturnParameters": 2474,
												"id": 2498,
												"nodeType": "Return",
												"src": "33867:19:5"
											}
										]
									},
									"documentation": {
										"id": 2468,
										"nodeType": "StructuredDocumentation",
										"src": "33333:345:5",
										"text": " @dev Returns the downcasted int24 from int256, reverting on\n overflow (when the input is less than smallest int24 or\n greater than largest int24).\n Counterpart to Solidity's `int24` operator.\n Requirements:\n - input must fit into 24 bits\n _Available since v4.7._"
									},
									"id": 2500,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toInt24",
									"nameLocation": "33692:7:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 2471,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2470,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "33707:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 2500,
												"src": "33700:12:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												},
												"typeName": {
													"id": 2469,
													"name": "int256",
													"nodeType": "ElementaryTypeName",
													"src": "33700:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int256",
														"typeString": "int256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "33699:14:5"
									},
									"returnParameters": {
										"id": 2474,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2473,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 2500,
												"src": "33737:5:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int24",
													"typeString": "int24"
												},
												"typeName": {
													"id": 2472,
													"name": "int24",
													"nodeType": "ElementaryTypeName",
													"src": "33737:5:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int24",
														"typeString": "int24"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "33736:7:5"
									},
									"scope": 2595,
									"src": "33683:210:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 2532,
										"nodeType": "Block",
										"src": "34310:149:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															"id": 2523,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 2515,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2509,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2503,
																	"src": "34328:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": ">=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 2512,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "34342:5:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int16_$",
																					"typeString": "type(int16)"
																				},
																				"typeName": {
																					"id": 2511,
																					"name": "int16",
																					"nodeType": "ElementaryTypeName",
																					"src": "34342:5:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int16_$",
																					"typeString": "type(int16)"
																				}
																			],
																			"id": 2510,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "34337:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 2513,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "34337:11:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int16",
																			"typeString": "type(int16)"
																		}
																	},
																	"id": 2514,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "min",
																	"nodeType": "MemberAccess",
																	"src": "34337:15:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int16",
																		"typeString": "int16"
																	}
																},
																"src": "34328:24:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "&&",
															"rightExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 2522,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2516,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2503,
																	"src": "34356:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "<=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 2519,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "34370:5:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int16_$",
																					"typeString": "type(int16)"
																				},
																				"typeName": {
																					"id": 2518,
																					"name": "int16",
																					"nodeType": "ElementaryTypeName",
																					"src": "34370:5:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int16_$",
																					"typeString": "type(int16)"
																				}
																			],
																			"id": 2517,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "34365:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 2520,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "34365:11:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int16",
																			"typeString": "type(int16)"
																		}
																	},
																	"id": 2521,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "max",
																	"nodeType": "MemberAccess",
																	"src": "34365:15:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int16",
																		"typeString": "int16"
																	}
																},
																"src": "34356:24:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"src": "34328:52:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2031362062697473",
															"id": 2524,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "34382:40:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_13d3a66f9e0e5c92bbe7743bcd3bdb4695009d5f3a96e5ff49718d715b484033",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 16 bits\""
															},
															"value": "SafeCast: value doesn't fit in 16 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_13d3a66f9e0e5c92bbe7743bcd3bdb4695009d5f3a96e5ff49718d715b484033",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 16 bits\""
															}
														],
														"id": 2508,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "34320:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 2525,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "34320:103:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 2526,
												"nodeType": "ExpressionStatement",
												"src": "34320:103:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 2529,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2503,
															"src": "34446:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														],
														"id": 2528,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "34440:5:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_int16_$",
															"typeString": "type(int16)"
														},
														"typeName": {
															"id": 2527,
															"name": "int16",
															"nodeType": "ElementaryTypeName",
															"src": "34440:5:5",
															"typeDescriptions": {}
														}
													},
													"id": 2530,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "34440:12:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_int16",
														"typeString": "int16"
													}
												},
												"functionReturnParameters": 2507,
												"id": 2531,
												"nodeType": "Return",
												"src": "34433:19:5"
											}
										]
									},
									"documentation": {
										"id": 2501,
										"nodeType": "StructuredDocumentation",
										"src": "33899:345:5",
										"text": " @dev Returns the downcasted int16 from int256, reverting on\n overflow (when the input is less than smallest int16 or\n greater than largest int16).\n Counterpart to Solidity's `int16` operator.\n Requirements:\n - input must fit into 16 bits\n _Available since v3.1._"
									},
									"id": 2533,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toInt16",
									"nameLocation": "34258:7:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 2504,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2503,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "34273:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 2533,
												"src": "34266:12:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												},
												"typeName": {
													"id": 2502,
													"name": "int256",
													"nodeType": "ElementaryTypeName",
													"src": "34266:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int256",
														"typeString": "int256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "34265:14:5"
									},
									"returnParameters": {
										"id": 2507,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2506,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 2533,
												"src": "34303:5:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int16",
													"typeString": "int16"
												},
												"typeName": {
													"id": 2505,
													"name": "int16",
													"nodeType": "ElementaryTypeName",
													"src": "34303:5:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int16",
														"typeString": "int16"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "34302:7:5"
									},
									"scope": 2595,
									"src": "34249:210:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 2565,
										"nodeType": "Block",
										"src": "34869:145:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															"id": 2556,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 2548,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2542,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2536,
																	"src": "34887:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": ">=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 2545,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "34901:4:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int8_$",
																					"typeString": "type(int8)"
																				},
																				"typeName": {
																					"id": 2544,
																					"name": "int8",
																					"nodeType": "ElementaryTypeName",
																					"src": "34901:4:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int8_$",
																					"typeString": "type(int8)"
																				}
																			],
																			"id": 2543,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "34896:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 2546,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "34896:10:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int8",
																			"typeString": "type(int8)"
																		}
																	},
																	"id": 2547,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "min",
																	"nodeType": "MemberAccess",
																	"src": "34896:14:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int8",
																		"typeString": "int8"
																	}
																},
																"src": "34887:23:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "&&",
															"rightExpression": {
																"commonType": {
																	"typeIdentifier": "t_int256",
																	"typeString": "int256"
																},
																"id": 2555,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2549,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2536,
																	"src": "34914:5:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int256",
																		"typeString": "int256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "<=",
																"rightExpression": {
																	"expression": {
																		"arguments": [
																			{
																				"id": 2552,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "34928:4:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_int8_$",
																					"typeString": "type(int8)"
																				},
																				"typeName": {
																					"id": 2551,
																					"name": "int8",
																					"nodeType": "ElementaryTypeName",
																					"src": "34928:4:5",
																					"typeDescriptions": {}
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_type$_t_int8_$",
																					"typeString": "type(int8)"
																				}
																			],
																			"id": 2550,
																			"name": "type",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967269,
																			"src": "34923:4:5",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 2553,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "34923:10:5",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_meta_type_t_int8",
																			"typeString": "type(int8)"
																		}
																	},
																	"id": 2554,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "max",
																	"nodeType": "MemberAccess",
																	"src": "34923:14:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_int8",
																		"typeString": "int8"
																	}
																},
																"src": "34914:23:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"src": "34887:50:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e20382062697473",
															"id": 2557,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "34939:39:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_2610961ba53259047cd57c60366c5ad0b8aabf5eb4132487619b736715a740d1",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 8 bits\""
															},
															"value": "SafeCast: value doesn't fit in 8 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_2610961ba53259047cd57c60366c5ad0b8aabf5eb4132487619b736715a740d1",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 8 bits\""
															}
														],
														"id": 2541,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "34879:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 2558,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "34879:100:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 2559,
												"nodeType": "ExpressionStatement",
												"src": "34879:100:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 2562,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2536,
															"src": "35001:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_int256",
																"typeString": "int256"
															}
														],
														"id": 2561,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "34996:4:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_int8_$",
															"typeString": "type(int8)"
														},
														"typeName": {
															"id": 2560,
															"name": "int8",
															"nodeType": "ElementaryTypeName",
															"src": "34996:4:5",
															"typeDescriptions": {}
														}
													},
													"id": 2563,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "34996:11:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_int8",
														"typeString": "int8"
													}
												},
												"functionReturnParameters": 2540,
												"id": 2564,
												"nodeType": "Return",
												"src": "34989:18:5"
											}
										]
									},
									"documentation": {
										"id": 2534,
										"nodeType": "StructuredDocumentation",
										"src": "34465:340:5",
										"text": " @dev Returns the downcasted int8 from int256, reverting on\n overflow (when the input is less than smallest int8 or\n greater than largest int8).\n Counterpart to Solidity's `int8` operator.\n Requirements:\n - input must fit into 8 bits\n _Available since v3.1._"
									},
									"id": 2566,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toInt8",
									"nameLocation": "34819:6:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 2537,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2536,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "34833:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 2566,
												"src": "34826:12:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												},
												"typeName": {
													"id": 2535,
													"name": "int256",
													"nodeType": "ElementaryTypeName",
													"src": "34826:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int256",
														"typeString": "int256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "34825:14:5"
									},
									"returnParameters": {
										"id": 2540,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2539,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 2566,
												"src": "34863:4:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int8",
													"typeString": "int8"
												},
												"typeName": {
													"id": 2538,
													"name": "int8",
													"nodeType": "ElementaryTypeName",
													"src": "34863:4:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int8",
														"typeString": "int8"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "34862:6:5"
									},
									"scope": 2595,
									"src": "34810:204:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 2593,
										"nodeType": "Block",
										"src": "35292:233:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 2584,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 2575,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 2569,
																"src": "35409:5:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<=",
															"rightExpression": {
																"arguments": [
																	{
																		"expression": {
																			"arguments": [
																				{
																					"id": 2580,
																					"isConstant": false,
																					"isLValue": false,
																					"isPure": true,
																					"lValueRequested": false,
																					"nodeType": "ElementaryTypeNameExpression",
																					"src": "35431:6:5",
																					"typeDescriptions": {
																						"typeIdentifier": "t_type$_t_int256_$",
																						"typeString": "type(int256)"
																					},
																					"typeName": {
																						"id": 2579,
																						"name": "int256",
																						"nodeType": "ElementaryTypeName",
																						"src": "35431:6:5",
																						"typeDescriptions": {}
																					}
																				}
																			],
																			"expression": {
																				"argumentTypes": [
																					{
																						"typeIdentifier": "t_type$_t_int256_$",
																						"typeString": "type(int256)"
																					}
																				],
																				"id": 2578,
																				"name": "type",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 4294967269,
																				"src": "35426:4:5",
																				"typeDescriptions": {
																					"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																					"typeString": "function () pure"
																				}
																			},
																			"id": 2581,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"kind": "functionCall",
																			"lValueRequested": false,
																			"names": [],
																			"nodeType": "FunctionCall",
																			"src": "35426:12:5",
																			"tryCall": false,
																			"typeDescriptions": {
																				"typeIdentifier": "t_magic_meta_type_t_int256",
																				"typeString": "type(int256)"
																			}
																		},
																		"id": 2582,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"lValueRequested": false,
																		"memberName": "max",
																		"nodeType": "MemberAccess",
																		"src": "35426:16:5",
																		"typeDescriptions": {
																			"typeIdentifier": "t_int256",
																			"typeString": "int256"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_int256",
																			"typeString": "int256"
																		}
																	],
																	"id": 2577,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"nodeType": "ElementaryTypeNameExpression",
																	"src": "35418:7:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_type$_t_uint256_$",
																		"typeString": "type(uint256)"
																	},
																	"typeName": {
																		"id": 2576,
																		"name": "uint256",
																		"nodeType": "ElementaryTypeName",
																		"src": "35418:7:5",
																		"typeDescriptions": {}
																	}
																},
																"id": 2583,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "typeConversion",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "35418:25:5",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"src": "35409:34:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e20616e20696e74323536",
															"id": 2585,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "35445:42:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_d70dcf21692b3c91b4c5fbb89ed57f464aa42efbe5b0ea96c4acb7c080144227",
																"typeString": "literal_string \"SafeCast: value doesn't fit in an int256\""
															},
															"value": "SafeCast: value doesn't fit in an int256"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_d70dcf21692b3c91b4c5fbb89ed57f464aa42efbe5b0ea96c4acb7c080144227",
																"typeString": "literal_string \"SafeCast: value doesn't fit in an int256\""
															}
														],
														"id": 2574,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "35401:7:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 2586,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "35401:87:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 2587,
												"nodeType": "ExpressionStatement",
												"src": "35401:87:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 2590,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2569,
															"src": "35512:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 2589,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "35505:6:5",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_int256_$",
															"typeString": "type(int256)"
														},
														"typeName": {
															"id": 2588,
															"name": "int256",
															"nodeType": "ElementaryTypeName",
															"src": "35505:6:5",
															"typeDescriptions": {}
														}
													},
													"id": 2591,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "35505:13:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_int256",
														"typeString": "int256"
													}
												},
												"functionReturnParameters": 2573,
												"id": 2592,
												"nodeType": "Return",
												"src": "35498:20:5"
											}
										]
									},
									"documentation": {
										"id": 2567,
										"nodeType": "StructuredDocumentation",
										"src": "35020:203:5",
										"text": " @dev Converts an unsigned uint256 into a signed int256.\n Requirements:\n - input must be less than or equal to maxInt256.\n _Available since v3.0._"
									},
									"id": 2594,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toInt256",
									"nameLocation": "35237:8:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 2570,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2569,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "35254:5:5",
												"nodeType": "VariableDeclaration",
												"scope": 2594,
												"src": "35246:13:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 2568,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "35246:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "35245:15:5"
									},
									"returnParameters": {
										"id": 2573,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2572,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 2594,
												"src": "35284:6:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_int256",
													"typeString": "int256"
												},
												"typeName": {
													"id": 2571,
													"name": "int256",
													"nodeType": "ElementaryTypeName",
													"src": "35284:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_int256",
														"typeString": "int256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "35283:8:5"
									},
									"scope": 2595,
									"src": "35228:297:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								}
							],
							"scope": 2596,
							"src": "842:34685:5",
							"usedErrors": []
						}
					],
					"src": "107:35421:5"
				},
				"id": 5
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol": {
				"ast": {
					"absolutePath": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/GaugeReward.sol",
					"exportedSymbols": {
						"Address": [
							689
						],
						"ExtendedSafeCastLib": [
							4290
						],
						"GaugeReward": [
							3566
						],
						"ICompLike": [
							3584
						],
						"IControlledToken": [
							3623
						],
						"IERC20": [
							77
						],
						"IERC20Permit": [
							113
						],
						"IGaugeController": [
							3664
						],
						"IGaugeReward": [
							3688
						],
						"IPrizePool": [
							3970
						],
						"IPrizePoolLiquidatorListener": [
							3993
						],
						"ITicket": [
							4186
						],
						"Multicall": [
							744
						],
						"ObservationLib": [
							4449
						],
						"OverflowSafeComparatorLib": [
							4621
						],
						"RingBufferLib": [
							4706
						],
						"SafeCast": [
							2595
						],
						"SafeERC20": [
							394
						],
						"TwabLib": [
							5456
						]
					},
					"id": 3567,
					"license": "GPL-3.0",
					"nodeType": "SourceUnit",
					"nodes": [
						{
							"id": 2597,
							"literals": [
								"solidity",
								"0.8",
								".6"
							],
							"nodeType": "PragmaDirective",
							"src": "37:22:6"
						},
						{
							"absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
							"file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
							"id": 2598,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 3567,
							"sourceUnit": 78,
							"src": "61:56:6",
							"symbolAliases": [],
							"unitAlias": ""
						},
						{
							"absolutePath": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol",
							"file": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol",
							"id": 2599,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 3567,
							"sourceUnit": 395,
							"src": "118:65:6",
							"symbolAliases": [],
							"unitAlias": ""
						},
						{
							"absolutePath": "@openzeppelin/contracts/utils/Multicall.sol",
							"file": "@openzeppelin/contracts/utils/Multicall.sol",
							"id": 2600,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 3567,
							"sourceUnit": 745,
							"src": "184:53:6",
							"symbolAliases": [],
							"unitAlias": ""
						},
						{
							"absolutePath": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IGaugeReward.sol",
							"file": "./interfaces/IGaugeReward.sol",
							"id": 2601,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 3567,
							"sourceUnit": 3689,
							"src": "239:39:6",
							"symbolAliases": [],
							"unitAlias": ""
						},
						{
							"absolutePath": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IGaugeController.sol",
							"file": "./interfaces/IGaugeController.sol",
							"id": 2602,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 3567,
							"sourceUnit": 3665,
							"src": "279:43:6",
							"symbolAliases": [],
							"unitAlias": ""
						},
						{
							"absolutePath": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IPrizePoolLiquidatorListener.sol",
							"file": "./interfaces/IPrizePoolLiquidatorListener.sol",
							"id": 2603,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 3567,
							"sourceUnit": 3994,
							"src": "323:55:6",
							"symbolAliases": [],
							"unitAlias": ""
						},
						{
							"abstract": false,
							"baseContracts": [
								{
									"baseName": {
										"id": 2605,
										"name": "IGaugeReward",
										"nodeType": "IdentifierPath",
										"referencedDeclaration": 3688,
										"src": "767:12:6"
									},
									"id": 2606,
									"nodeType": "InheritanceSpecifier",
									"src": "767:12:6"
								},
								{
									"baseName": {
										"id": 2607,
										"name": "IPrizePoolLiquidatorListener",
										"nodeType": "IdentifierPath",
										"referencedDeclaration": 3993,
										"src": "781:28:6"
									},
									"id": 2608,
									"nodeType": "InheritanceSpecifier",
									"src": "781:28:6"
								},
								{
									"baseName": {
										"id": 2609,
										"name": "Multicall",
										"nodeType": "IdentifierPath",
										"referencedDeclaration": 744,
										"src": "811:9:6"
									},
									"id": 2610,
									"nodeType": "InheritanceSpecifier",
									"src": "811:9:6"
								}
							],
							"contractDependencies": [],
							"contractKind": "contract",
							"documentation": {
								"id": 2604,
								"nodeType": "StructuredDocumentation",
								"src": "380:362:6",
								"text": " @title  PoolTogether V4 GaugeReward\n @author PoolTogether Inc Team\n @notice The GaugeReward contract handles rewards for users\nwho staked in one or several gauges on the GaugeController contract.\n @dev    This contract is only keeping track of the rewards.\nReward tokens are actually stored in the TokenVault contract."
							},
							"fullyImplemented": true,
							"id": 3566,
							"linearizedBaseContracts": [
								3566,
								744,
								3993,
								3688
							],
							"name": "GaugeReward",
							"nameLocation": "752:11:6",
							"nodeType": "ContractDefinition",
							"nodes": [
								{
									"id": 2614,
									"libraryName": {
										"id": 2611,
										"name": "SafeERC20",
										"nodeType": "IdentifierPath",
										"referencedDeclaration": 394,
										"src": "833:9:6"
									},
									"nodeType": "UsingForDirective",
									"src": "827:27:6",
									"typeName": {
										"id": 2613,
										"nodeType": "UserDefinedTypeName",
										"pathNode": {
											"id": 2612,
											"name": "IERC20",
											"nodeType": "IdentifierPath",
											"referencedDeclaration": 77,
											"src": "847:6:6"
										},
										"referencedDeclaration": 77,
										"src": "847:6:6",
										"typeDescriptions": {
											"typeIdentifier": "t_contract$_IERC20_$77",
											"typeString": "contract IERC20"
										}
									}
								},
								{
									"constant": false,
									"documentation": {
										"id": 2615,
										"nodeType": "StructuredDocumentation",
										"src": "907:112:6",
										"text": " @notice Tracks user token reward balances\n @dev user => reward token address => balance"
									},
									"functionSelector": "06302ef1",
									"id": 2622,
									"mutability": "mutable",
									"name": "userRewardTokenBalances",
									"nameLocation": "1078:23:6",
									"nodeType": "VariableDeclaration",
									"scope": 3566,
									"src": "1024:77:6",
									"stateVariable": true,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$77_$_t_uint256_$_$",
										"typeString": "mapping(address => mapping(contract IERC20 => uint256))"
									},
									"typeName": {
										"id": 2621,
										"keyType": {
											"id": 2616,
											"name": "address",
											"nodeType": "ElementaryTypeName",
											"src": "1032:7:6",
											"typeDescriptions": {
												"typeIdentifier": "t_address",
												"typeString": "address"
											}
										},
										"nodeType": "Mapping",
										"src": "1024:46:6",
										"typeDescriptions": {
											"typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$77_$_t_uint256_$_$",
											"typeString": "mapping(address => mapping(contract IERC20 => uint256))"
										},
										"valueType": {
											"id": 2620,
											"keyType": {
												"id": 2618,
												"nodeType": "UserDefinedTypeName",
												"pathNode": {
													"id": 2617,
													"name": "IERC20",
													"nodeType": "IdentifierPath",
													"referencedDeclaration": 77,
													"src": "1051:6:6"
												},
												"referencedDeclaration": 77,
												"src": "1051:6:6",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_IERC20_$77",
													"typeString": "contract IERC20"
												}
											},
											"nodeType": "Mapping",
											"src": "1043:26:6",
											"typeDescriptions": {
												"typeIdentifier": "t_mapping$_t_contract$_IERC20_$77_$_t_uint256_$",
												"typeString": "mapping(contract IERC20 => uint256)"
											},
											"valueType": {
												"id": 2619,
												"name": "uint256",
												"nodeType": "ElementaryTypeName",
												"src": "1061:7:6",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												}
											}
										}
									},
									"visibility": "public"
								},
								{
									"constant": false,
									"documentation": {
										"id": 2623,
										"nodeType": "StructuredDocumentation",
										"src": "1108:172:6",
										"text": " @notice Tracks reward token exchange rate per user and gauge\n @dev user => gauge => reward token address => reward token timestamp => exchange rate"
									},
									"functionSelector": "e5f744b8",
									"id": 2634,
									"mutability": "mutable",
									"name": "userGaugeRewardTokenExchangeRates",
									"nameLocation": "1386:33:6",
									"nodeType": "VariableDeclaration",
									"scope": 3566,
									"src": "1285:134:6",
									"stateVariable": true,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$77_$_t_mapping$_t_uint64_$_t_uint256_$_$_$_$",
										"typeString": "mapping(address => mapping(address => mapping(contract IERC20 => mapping(uint64 => uint256))))"
									},
									"typeName": {
										"id": 2633,
										"keyType": {
											"id": 2624,
											"name": "address",
											"nodeType": "ElementaryTypeName",
											"src": "1293:7:6",
											"typeDescriptions": {
												"typeIdentifier": "t_address",
												"typeString": "address"
											}
										},
										"nodeType": "Mapping",
										"src": "1285:85:6",
										"typeDescriptions": {
											"typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$77_$_t_mapping$_t_uint64_$_t_uint256_$_$_$_$",
											"typeString": "mapping(address => mapping(address => mapping(contract IERC20 => mapping(uint64 => uint256))))"
										},
										"valueType": {
											"id": 2632,
											"keyType": {
												"id": 2625,
												"name": "address",
												"nodeType": "ElementaryTypeName",
												"src": "1312:7:6",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											"nodeType": "Mapping",
											"src": "1304:65:6",
											"typeDescriptions": {
												"typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$77_$_t_mapping$_t_uint64_$_t_uint256_$_$_$",
												"typeString": "mapping(address => mapping(contract IERC20 => mapping(uint64 => uint256)))"
											},
											"valueType": {
												"id": 2631,
												"keyType": {
													"id": 2627,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 2626,
														"name": "IERC20",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 77,
														"src": "1331:6:6"
													},
													"referencedDeclaration": 77,
													"src": "1331:6:6",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_IERC20_$77",
														"typeString": "contract IERC20"
													}
												},
												"nodeType": "Mapping",
												"src": "1323:45:6",
												"typeDescriptions": {
													"typeIdentifier": "t_mapping$_t_contract$_IERC20_$77_$_t_mapping$_t_uint64_$_t_uint256_$_$",
													"typeString": "mapping(contract IERC20 => mapping(uint64 => uint256))"
												},
												"valueType": {
													"id": 2630,
													"keyType": {
														"id": 2628,
														"name": "uint64",
														"nodeType": "ElementaryTypeName",
														"src": "1349:6:6",
														"typeDescriptions": {
															"typeIdentifier": "t_uint64",
															"typeString": "uint64"
														}
													},
													"nodeType": "Mapping",
													"src": "1341:26:6",
													"typeDescriptions": {
														"typeIdentifier": "t_mapping$_t_uint64_$_t_uint256_$",
														"typeString": "mapping(uint64 => uint256)"
													},
													"valueType": {
														"id": 2629,
														"name": "uint256",
														"nodeType": "ElementaryTypeName",
														"src": "1359:7:6",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													}
												}
											}
										}
									},
									"visibility": "public"
								},
								{
									"constant": false,
									"documentation": {
										"id": 2635,
										"nodeType": "StructuredDocumentation",
										"src": "1426:151:6",
										"text": " @notice Tracks user last claimed timestamp per gauge and reward token\n @dev user => gauge => reward token address => timestamp"
									},
									"functionSelector": "81d7af2e",
									"id": 2643,
									"mutability": "mutable",
									"name": "userGaugeRewardTokenLastClaimedTimestamp",
									"nameLocation": "1665:40:6",
									"nodeType": "VariableDeclaration",
									"scope": 3566,
									"src": "1582:123:6",
									"stateVariable": true,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$",
										"typeString": "mapping(address => mapping(address => mapping(address => uint256)))"
									},
									"typeName": {
										"id": 2642,
										"keyType": {
											"id": 2636,
											"name": "address",
											"nodeType": "ElementaryTypeName",
											"src": "1590:7:6",
											"typeDescriptions": {
												"typeIdentifier": "t_address",
												"typeString": "address"
											}
										},
										"nodeType": "Mapping",
										"src": "1582:67:6",
										"typeDescriptions": {
											"typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$",
											"typeString": "mapping(address => mapping(address => mapping(address => uint256)))"
										},
										"valueType": {
											"id": 2641,
											"keyType": {
												"id": 2637,
												"name": "address",
												"nodeType": "ElementaryTypeName",
												"src": "1609:7:6",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											"nodeType": "Mapping",
											"src": "1601:47:6",
											"typeDescriptions": {
												"typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
												"typeString": "mapping(address => mapping(address => uint256))"
											},
											"valueType": {
												"id": 2640,
												"keyType": {
													"id": 2638,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1628:7:6",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"nodeType": "Mapping",
												"src": "1620:27:6",
												"typeDescriptions": {
													"typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
													"typeString": "mapping(address => uint256)"
												},
												"valueType": {
													"id": 2639,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1639:7:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												}
											}
										}
									},
									"visibility": "public"
								},
								{
									"constant": false,
									"documentation": {
										"id": 2644,
										"nodeType": "StructuredDocumentation",
										"src": "1712:156:6",
										"text": " @notice Tracks reward token exchange rates per gauge\n @dev gauge => reward token address => reward token timestamp => exchange rate"
									},
									"functionSelector": "f1883e5d",
									"id": 2653,
									"mutability": "mutable",
									"name": "gaugeRewardTokenExchangeRates",
									"nameLocation": "1954:29:6",
									"nodeType": "VariableDeclaration",
									"scope": 3566,
									"src": "1873:110:6",
									"stateVariable": true,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$77_$_t_mapping$_t_uint64_$_t_uint256_$_$_$",
										"typeString": "mapping(address => mapping(contract IERC20 => mapping(uint64 => uint256)))"
									},
									"typeName": {
										"id": 2652,
										"keyType": {
											"id": 2645,
											"name": "address",
											"nodeType": "ElementaryTypeName",
											"src": "1881:7:6",
											"typeDescriptions": {
												"typeIdentifier": "t_address",
												"typeString": "address"
											}
										},
										"nodeType": "Mapping",
										"src": "1873:65:6",
										"typeDescriptions": {
											"typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$77_$_t_mapping$_t_uint64_$_t_uint256_$_$_$",
											"typeString": "mapping(address => mapping(contract IERC20 => mapping(uint64 => uint256)))"
										},
										"valueType": {
											"id": 2651,
											"keyType": {
												"id": 2647,
												"nodeType": "UserDefinedTypeName",
												"pathNode": {
													"id": 2646,
													"name": "IERC20",
													"nodeType": "IdentifierPath",
													"referencedDeclaration": 77,
													"src": "1900:6:6"
												},
												"referencedDeclaration": 77,
												"src": "1900:6:6",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_IERC20_$77",
													"typeString": "contract IERC20"
												}
											},
											"nodeType": "Mapping",
											"src": "1892:45:6",
											"typeDescriptions": {
												"typeIdentifier": "t_mapping$_t_contract$_IERC20_$77_$_t_mapping$_t_uint64_$_t_uint256_$_$",
												"typeString": "mapping(contract IERC20 => mapping(uint64 => uint256))"
											},
											"valueType": {
												"id": 2650,
												"keyType": {
													"id": 2648,
													"name": "uint64",
													"nodeType": "ElementaryTypeName",
													"src": "1918:6:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint64",
														"typeString": "uint64"
													}
												},
												"nodeType": "Mapping",
												"src": "1910:26:6",
												"typeDescriptions": {
													"typeIdentifier": "t_mapping$_t_uint64_$_t_uint256_$",
													"typeString": "mapping(uint64 => uint256)"
												},
												"valueType": {
													"id": 2649,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1928:7:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												}
											}
										}
									},
									"visibility": "public"
								},
								{
									"canonicalName": "GaugeReward.RewardToken",
									"id": 2659,
									"members": [
										{
											"constant": false,
											"id": 2656,
											"mutability": "mutable",
											"name": "token",
											"nameLocation": "2194:5:6",
											"nodeType": "VariableDeclaration",
											"scope": 2659,
											"src": "2187:12:6",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_contract$_IERC20_$77",
												"typeString": "contract IERC20"
											},
											"typeName": {
												"id": 2655,
												"nodeType": "UserDefinedTypeName",
												"pathNode": {
													"id": 2654,
													"name": "IERC20",
													"nodeType": "IdentifierPath",
													"referencedDeclaration": 77,
													"src": "2187:6:6"
												},
												"referencedDeclaration": 77,
												"src": "2187:6:6",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_IERC20_$77",
													"typeString": "contract IERC20"
												}
											},
											"visibility": "internal"
										},
										{
											"constant": false,
											"id": 2658,
											"mutability": "mutable",
											"name": "timestamp",
											"nameLocation": "2216:9:6",
											"nodeType": "VariableDeclaration",
											"scope": 2659,
											"src": "2209:16:6",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_uint64",
												"typeString": "uint64"
											},
											"typeName": {
												"id": 2657,
												"name": "uint64",
												"nodeType": "ElementaryTypeName",
												"src": "2209:6:6",
												"typeDescriptions": {
													"typeIdentifier": "t_uint64",
													"typeString": "uint64"
												}
											},
											"visibility": "internal"
										}
									],
									"name": "RewardToken",
									"nameLocation": "2165:11:6",
									"nodeType": "StructDefinition",
									"scope": 3566,
									"src": "2158:74:6",
									"visibility": "public"
								},
								{
									"constant": false,
									"documentation": {
										"id": 2660,
										"nodeType": "StructuredDocumentation",
										"src": "2238:98:6",
										"text": " @notice Tracks reward tokens per gauge\n @dev gauge => reward tokens array"
									},
									"functionSelector": "5902fc3b",
									"id": 2666,
									"mutability": "mutable",
									"name": "gaugeRewardTokens",
									"nameLocation": "2382:17:6",
									"nodeType": "VariableDeclaration",
									"scope": 3566,
									"src": "2341:58:6",
									"stateVariable": true,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_RewardToken_$2659_storage_$dyn_storage_$",
										"typeString": "mapping(address => struct GaugeReward.RewardToken[])"
									},
									"typeName": {
										"id": 2665,
										"keyType": {
											"id": 2661,
											"name": "address",
											"nodeType": "ElementaryTypeName",
											"src": "2349:7:6",
											"typeDescriptions": {
												"typeIdentifier": "t_address",
												"typeString": "address"
											}
										},
										"nodeType": "Mapping",
										"src": "2341:33:6",
										"typeDescriptions": {
											"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_RewardToken_$2659_storage_$dyn_storage_$",
											"typeString": "mapping(address => struct GaugeReward.RewardToken[])"
										},
										"valueType": {
											"baseType": {
												"id": 2663,
												"nodeType": "UserDefinedTypeName",
												"pathNode": {
													"id": 2662,
													"name": "RewardToken",
													"nodeType": "IdentifierPath",
													"referencedDeclaration": 2659,
													"src": "2360:11:6"
												},
												"referencedDeclaration": 2659,
												"src": "2360:11:6",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_RewardToken_$2659_storage_ptr",
													"typeString": "struct GaugeReward.RewardToken"
												}
											},
											"id": 2664,
											"nodeType": "ArrayTypeName",
											"src": "2360:13:6",
											"typeDescriptions": {
												"typeIdentifier": "t_array$_t_struct$_RewardToken_$2659_storage_$dyn_storage_ptr",
												"typeString": "struct GaugeReward.RewardToken[]"
											}
										}
									},
									"visibility": "public"
								},
								{
									"constant": false,
									"documentation": {
										"id": 2667,
										"nodeType": "StructuredDocumentation",
										"src": "2406:44:6",
										"text": "@notice GaugeController contract address"
									},
									"functionSelector": "99eecb3b",
									"id": 2670,
									"mutability": "mutable",
									"name": "gaugeController",
									"nameLocation": "2479:15:6",
									"nodeType": "VariableDeclaration",
									"scope": 3566,
									"src": "2455:39:6",
									"stateVariable": true,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_contract$_IGaugeController_$3664",
										"typeString": "contract IGaugeController"
									},
									"typeName": {
										"id": 2669,
										"nodeType": "UserDefinedTypeName",
										"pathNode": {
											"id": 2668,
											"name": "IGaugeController",
											"nodeType": "IdentifierPath",
											"referencedDeclaration": 3664,
											"src": "2455:16:6"
										},
										"referencedDeclaration": 3664,
										"src": "2455:16:6",
										"typeDescriptions": {
											"typeIdentifier": "t_contract$_IGaugeController_$3664",
											"typeString": "contract IGaugeController"
										}
									},
									"visibility": "public"
								},
								{
									"constant": false,
									"documentation": {
										"id": 2671,
										"nodeType": "StructuredDocumentation",
										"src": "2501:34:6",
										"text": "@notice Vault contract address"
									},
									"functionSelector": "fbfa77cf",
									"id": 2673,
									"mutability": "mutable",
									"name": "vault",
									"nameLocation": "2555:5:6",
									"nodeType": "VariableDeclaration",
									"scope": 3566,
									"src": "2540:20:6",
									"stateVariable": true,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 2672,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "2540:7:6",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"visibility": "public"
								},
								{
									"constant": false,
									"documentation": {
										"id": 2674,
										"nodeType": "StructuredDocumentation",
										"src": "2567:72:6",
										"text": "@notice Address of the liquidator that this contract is listening to"
									},
									"functionSelector": "4046ebae",
									"id": 2676,
									"mutability": "mutable",
									"name": "liquidator",
									"nameLocation": "2659:10:6",
									"nodeType": "VariableDeclaration",
									"scope": 3566,
									"src": "2644:25:6",
									"stateVariable": true,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 2675,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "2644:7:6",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"visibility": "public"
								},
								{
									"constant": false,
									"documentation": {
										"id": 2677,
										"nodeType": "StructuredDocumentation",
										"src": "2676:97:6",
										"text": "@notice Percentage of rewards that goes to stakers. Fixed point 9 number that is less than 1."
									},
									"functionSelector": "ac9fb71d",
									"id": 2679,
									"mutability": "mutable",
									"name": "stakerCut",
									"nameLocation": "2792:9:6",
									"nodeType": "VariableDeclaration",
									"scope": 3566,
									"src": "2778:23:6",
									"stateVariable": true,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_uint32",
										"typeString": "uint32"
									},
									"typeName": {
										"id": 2678,
										"name": "uint32",
										"nodeType": "ElementaryTypeName",
										"src": "2778:6:6",
										"typeDescriptions": {
											"typeIdentifier": "t_uint32",
											"typeString": "uint32"
										}
									},
									"visibility": "public"
								},
								{
									"anonymous": false,
									"documentation": {
										"id": 2680,
										"nodeType": "StructuredDocumentation",
										"src": "2852:284:6",
										"text": " @notice Emitted when the contract is deployed\n @param gaugeController Address of the GaugeController\n @param vault Address of the Vault\n @param liquidator Address of the Liquidator\n @param stakerCut Percentage of rewards that goes to stakers"
									},
									"id": 2691,
									"name": "Deployed",
									"nameLocation": "3147:8:6",
									"nodeType": "EventDefinition",
									"parameters": {
										"id": 2690,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2683,
												"indexed": true,
												"mutability": "mutable",
												"name": "gaugeController",
												"nameLocation": "3190:15:6",
												"nodeType": "VariableDeclaration",
												"scope": 2691,
												"src": "3165:40:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_IGaugeController_$3664",
													"typeString": "contract IGaugeController"
												},
												"typeName": {
													"id": 2682,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 2681,
														"name": "IGaugeController",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 3664,
														"src": "3165:16:6"
													},
													"referencedDeclaration": 3664,
													"src": "3165:16:6",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_IGaugeController_$3664",
														"typeString": "contract IGaugeController"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 2685,
												"indexed": true,
												"mutability": "mutable",
												"name": "vault",
												"nameLocation": "3231:5:6",
												"nodeType": "VariableDeclaration",
												"scope": 2691,
												"src": "3215:21:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 2684,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "3215:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 2687,
												"indexed": true,
												"mutability": "mutable",
												"name": "liquidator",
												"nameLocation": "3262:10:6",
												"nodeType": "VariableDeclaration",
												"scope": 2691,
												"src": "3246:26:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 2686,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "3246:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 2689,
												"indexed": false,
												"mutability": "mutable",
												"name": "stakerCut",
												"nameLocation": "3289:9:6",
												"nodeType": "VariableDeclaration",
												"scope": 2691,
												"src": "3282:16:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint32",
													"typeString": "uint32"
												},
												"typeName": {
													"id": 2688,
													"name": "uint32",
													"nodeType": "ElementaryTypeName",
													"src": "3282:6:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "3155:149:6"
									},
									"src": "3141:164:6"
								},
								{
									"anonymous": false,
									"documentation": {
										"id": 2692,
										"nodeType": "StructuredDocumentation",
										"src": "3311:399:6",
										"text": " @notice Emitted when tickets are swapped for tokens\n @param gauge Address of the gauge for which tokens were added\n @param token Address of the token sent to the vault\n @param amount Amount of tokens sent to the vault\n @param stakerRewards Amount of rewards allocated to stakers\n @param exchangeRate New exchange rate for this `token` in this `gauge`"
									},
									"id": 2705,
									"name": "RewardsAdded",
									"nameLocation": "3721:12:6",
									"nodeType": "EventDefinition",
									"parameters": {
										"id": 2704,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2694,
												"indexed": true,
												"mutability": "mutable",
												"name": "gauge",
												"nameLocation": "3759:5:6",
												"nodeType": "VariableDeclaration",
												"scope": 2705,
												"src": "3743:21:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 2693,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "3743:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 2697,
												"indexed": true,
												"mutability": "mutable",
												"name": "token",
												"nameLocation": "3789:5:6",
												"nodeType": "VariableDeclaration",
												"scope": 2705,
												"src": "3774:20:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_IERC20_$77",
													"typeString": "contract IERC20"
												},
												"typeName": {
													"id": 2696,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 2695,
														"name": "IERC20",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 77,
														"src": "3774:6:6"
													},
													"referencedDeclaration": 77,
													"src": "3774:6:6",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_IERC20_$77",
														"typeString": "contract IERC20"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 2699,
												"indexed": false,
												"mutability": "mutable",
												"name": "amount",
												"nameLocation": "3812:6:6",
												"nodeType": "VariableDeclaration",
												"scope": 2705,
												"src": "3804:14:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 2698,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "3804:7:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 2701,
												"indexed": false,
												"mutability": "mutable",
												"name": "stakerRewards",
												"nameLocation": "3836:13:6",
												"nodeType": "VariableDeclaration",
												"scope": 2705,
												"src": "3828:21:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 2700,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "3828:7:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 2703,
												"indexed": false,
												"mutability": "mutable",
												"name": "exchangeRate",
												"nameLocation": "3867:12:6",
												"nodeType": "VariableDeclaration",
												"scope": 2705,
												"src": "3859:20:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 2702,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "3859:7:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "3733:152:6"
									},
									"src": "3715:171:6"
								},
								{
									"anonymous": false,
									"documentation": {
										"id": 2706,
										"nodeType": "StructuredDocumentation",
										"src": "3892:450:6",
										"text": " @notice Emitted when a user claimed their rewards for a given gauge and token\n @param gauge Address of the gauge for which the user claimed rewards\n @param token Address of the token for which the user claimed rewards\n @param user Address of the user for which the rewards were claimed\n @param amount Total amount of rewards claimed\n @param exchangeRate Exchange rate at which the rewards were claimed"
									},
									"id": 2719,
									"name": "RewardsClaimed",
									"nameLocation": "4353:14:6",
									"nodeType": "EventDefinition",
									"parameters": {
										"id": 2718,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2708,
												"indexed": true,
												"mutability": "mutable",
												"name": "gauge",
												"nameLocation": "4393:5:6",
												"nodeType": "VariableDeclaration",
												"scope": 2719,
												"src": "4377:21:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 2707,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "4377:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 2711,
												"indexed": true,
												"mutability": "mutable",
												"name": "token",
												"nameLocation": "4423:5:6",
												"nodeType": "VariableDeclaration",
												"scope": 2719,
												"src": "4408:20:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_IERC20_$77",
													"typeString": "contract IERC20"
												},
												"typeName": {
													"id": 2710,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 2709,
														"name": "IERC20",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 77,
														"src": "4408:6:6"
													},
													"referencedDeclaration": 77,
													"src": "4408:6:6",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_IERC20_$77",
														"typeString": "contract IERC20"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 2713,
												"indexed": true,
												"mutability": "mutable",
												"name": "user",
												"nameLocation": "4454:4:6",
												"nodeType": "VariableDeclaration",
												"scope": 2719,
												"src": "4438:20:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 2712,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "4438:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 2715,
												"indexed": false,
												"mutability": "mutable",
												"name": "amount",
												"nameLocation": "4476:6:6",
												"nodeType": "VariableDeclaration",
												"scope": 2719,
												"src": "4468:14:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 2714,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "4468:7:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 2717,
												"indexed": false,
												"mutability": "mutable",
												"name": "exchangeRate",
												"nameLocation": "4500:12:6",
												"nodeType": "VariableDeclaration",
												"scope": 2719,
												"src": "4492:20:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 2716,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "4492:7:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "4367:151:6"
									},
									"src": "4347:172:6"
								},
								{
									"anonymous": false,
									"documentation": {
										"id": 2720,
										"nodeType": "StructuredDocumentation",
										"src": "4525:353:6",
										"text": " @notice Emitted when a user redeemed their rewards for a given token\n @param caller Address who called the redeem function\n @param user Address of the user for which the rewards were redeemed\n @param token Address of the token for which the user redeemed rewards\n @param amount Total amount of rewards redeemed"
									},
									"id": 2731,
									"name": "RewardsRedeemed",
									"nameLocation": "4889:15:6",
									"nodeType": "EventDefinition",
									"parameters": {
										"id": 2730,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2722,
												"indexed": true,
												"mutability": "mutable",
												"name": "caller",
												"nameLocation": "4930:6:6",
												"nodeType": "VariableDeclaration",
												"scope": 2731,
												"src": "4914:22:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 2721,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "4914:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 2724,
												"indexed": true,
												"mutability": "mutable",
												"name": "user",
												"nameLocation": "4962:4:6",
												"nodeType": "VariableDeclaration",
												"scope": 2731,
												"src": "4946:20:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 2723,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "4946:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 2727,
												"indexed": true,
												"mutability": "mutable",
												"name": "token",
												"nameLocation": "4991:5:6",
												"nodeType": "VariableDeclaration",
												"scope": 2731,
												"src": "4976:20:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_IERC20_$77",
													"typeString": "contract IERC20"
												},
												"typeName": {
													"id": 2726,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 2725,
														"name": "IERC20",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 77,
														"src": "4976:6:6"
													},
													"referencedDeclaration": 77,
													"src": "4976:6:6",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_IERC20_$77",
														"typeString": "contract IERC20"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 2729,
												"indexed": false,
												"mutability": "mutable",
												"name": "amount",
												"nameLocation": "5014:6:6",
												"nodeType": "VariableDeclaration",
												"scope": 2731,
												"src": "5006:14:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 2728,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "5006:7:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "4904:122:6"
									},
									"src": "4883:144:6"
								},
								{
									"anonymous": false,
									"documentation": {
										"id": 2732,
										"nodeType": "StructuredDocumentation",
										"src": "5033:307:6",
										"text": " @notice Emitted when a new reward token is pushed onto the `gaugeRewardTokens` mapping\n @param gauge Address of the gauge for which the reward token is added\n @param token Address of the token being pushed\n @param timestamp Timestamp at which the reward token was pushed"
									},
									"id": 2741,
									"name": "RewardTokenPushed",
									"nameLocation": "5351:17:6",
									"nodeType": "EventDefinition",
									"parameters": {
										"id": 2740,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2734,
												"indexed": true,
												"mutability": "mutable",
												"name": "gauge",
												"nameLocation": "5385:5:6",
												"nodeType": "VariableDeclaration",
												"scope": 2741,
												"src": "5369:21:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 2733,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "5369:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 2737,
												"indexed": true,
												"mutability": "mutable",
												"name": "token",
												"nameLocation": "5407:5:6",
												"nodeType": "VariableDeclaration",
												"scope": 2741,
												"src": "5392:20:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_IERC20_$77",
													"typeString": "contract IERC20"
												},
												"typeName": {
													"id": 2736,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 2735,
														"name": "IERC20",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 77,
														"src": "5392:6:6"
													},
													"referencedDeclaration": 77,
													"src": "5392:6:6",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_IERC20_$77",
														"typeString": "contract IERC20"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 2739,
												"indexed": false,
												"mutability": "mutable",
												"name": "timestamp",
												"nameLocation": "5422:9:6",
												"nodeType": "VariableDeclaration",
												"scope": 2741,
												"src": "5414:17:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 2738,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "5414:7:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "5368:64:6"
									},
									"src": "5345:88:6"
								},
								{
									"body": {
										"id": 2817,
										"nodeType": "Block",
										"src": "5908:519:6",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															"id": 2763,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"arguments": [
																	{
																		"id": 2757,
																		"name": "_gaugeController",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 2745,
																		"src": "5934:16:6",
																		"typeDescriptions": {
																			"typeIdentifier": "t_contract$_IGaugeController_$3664",
																			"typeString": "contract IGaugeController"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_contract$_IGaugeController_$3664",
																			"typeString": "contract IGaugeController"
																		}
																	],
																	"id": 2756,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"nodeType": "ElementaryTypeNameExpression",
																	"src": "5926:7:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_type$_t_address_$",
																		"typeString": "type(address)"
																	},
																	"typeName": {
																		"id": 2755,
																		"name": "address",
																		"nodeType": "ElementaryTypeName",
																		"src": "5926:7:6",
																		"typeDescriptions": {}
																	}
																},
																"id": 2758,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "typeConversion",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "5926:25:6",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "!=",
															"rightExpression": {
																"arguments": [
																	{
																		"hexValue": "30",
																		"id": 2761,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "number",
																		"lValueRequested": false,
																		"nodeType": "Literal",
																		"src": "5963:1:6",
																		"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": 2760,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"nodeType": "ElementaryTypeNameExpression",
																	"src": "5955:7:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_type$_t_address_$",
																		"typeString": "type(address)"
																	},
																	"typeName": {
																		"id": 2759,
																		"name": "address",
																		"nodeType": "ElementaryTypeName",
																		"src": "5955:7:6",
																		"typeDescriptions": {}
																	}
																},
																"id": 2762,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "typeConversion",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "5955:10:6",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"src": "5926:39:6",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "475265776172642f47432d6e6f742d7a65726f2d61646472657373",
															"id": 2764,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "5967:29:6",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_c7c89e3ef195bcf9c7214d2cf1982f4ddcc33654f1b227948ef554d91b6d845a",
																"typeString": "literal_string \"GReward/GC-not-zero-address\""
															},
															"value": "GReward/GC-not-zero-address"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_c7c89e3ef195bcf9c7214d2cf1982f4ddcc33654f1b227948ef554d91b6d845a",
																"typeString": "literal_string \"GReward/GC-not-zero-address\""
															}
														],
														"id": 2754,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "5918:7:6",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 2765,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "5918:79:6",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 2766,
												"nodeType": "ExpressionStatement",
												"src": "5918:79:6"
											},
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															"id": 2773,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 2768,
																"name": "_vault",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 2747,
																"src": "6015:6:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "!=",
															"rightExpression": {
																"arguments": [
																	{
																		"hexValue": "30",
																		"id": 2771,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "number",
																		"lValueRequested": false,
																		"nodeType": "Literal",
																		"src": "6033:1:6",
																		"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": 2770,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"nodeType": "ElementaryTypeNameExpression",
																	"src": "6025:7:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_type$_t_address_$",
																		"typeString": "type(address)"
																	},
																	"typeName": {
																		"id": 2769,
																		"name": "address",
																		"nodeType": "ElementaryTypeName",
																		"src": "6025:7:6",
																		"typeDescriptions": {}
																	}
																},
																"id": 2772,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "typeConversion",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "6025:10:6",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"src": "6015:20:6",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "475265776172642f5661756c742d6e6f742d7a65726f2d61646472657373",
															"id": 2774,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "6037:32:6",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_5225e90de2c6cdb9aee253903744f5bfd74033238d73353981e8ce88b4886b47",
																"typeString": "literal_string \"GReward/Vault-not-zero-address\""
															},
															"value": "GReward/Vault-not-zero-address"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_5225e90de2c6cdb9aee253903744f5bfd74033238d73353981e8ce88b4886b47",
																"typeString": "literal_string \"GReward/Vault-not-zero-address\""
															}
														],
														"id": 2767,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "6007:7:6",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 2775,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "6007:63:6",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 2776,
												"nodeType": "ExpressionStatement",
												"src": "6007:63:6"
											},
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															"id": 2783,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 2778,
																"name": "_liquidator",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 2749,
																"src": "6088:11:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "!=",
															"rightExpression": {
																"arguments": [
																	{
																		"hexValue": "30",
																		"id": 2781,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "number",
																		"lValueRequested": false,
																		"nodeType": "Literal",
																		"src": "6111:1:6",
																		"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": 2780,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"nodeType": "ElementaryTypeNameExpression",
																	"src": "6103:7:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_type$_t_address_$",
																		"typeString": "type(address)"
																	},
																	"typeName": {
																		"id": 2779,
																		"name": "address",
																		"nodeType": "ElementaryTypeName",
																		"src": "6103:7:6",
																		"typeDescriptions": {}
																	}
																},
																"id": 2782,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "typeConversion",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "6103:10:6",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"src": "6088:25:6",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "475265776172642f4c69712d6e6f742d7a65726f2d61646472657373",
															"id": 2784,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "6115:30:6",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_ae480372304f7d92cbbcc16f212a02764cecc12e33534033370603eb0f021ea1",
																"typeString": "literal_string \"GReward/Liq-not-zero-address\""
															},
															"value": "GReward/Liq-not-zero-address"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_ae480372304f7d92cbbcc16f212a02764cecc12e33534033370603eb0f021ea1",
																"typeString": "literal_string \"GReward/Liq-not-zero-address\""
															}
														],
														"id": 2777,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "6080:7:6",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 2785,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "6080:66:6",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 2786,
												"nodeType": "ExpressionStatement",
												"src": "6080:66:6"
											},
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															},
															"id": 2790,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 2788,
																"name": "_stakerCut",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 2751,
																"src": "6164:10:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint32",
																	"typeString": "uint32"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<",
															"rightExpression": {
																"hexValue": "316539",
																"id": 2789,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "6177:3:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_rational_1000000000_by_1",
																	"typeString": "int_const 1000000000"
																},
																"value": "1e9"
															},
															"src": "6164:16:6",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "475265776172642f7374616b65722d6375742d6c742d316539",
															"id": 2791,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "6182:27:6",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_394005220321e659269243041427a45eb2132368ecbd8e8d5f4ba72a303f8784",
																"typeString": "literal_string \"GReward/staker-cut-lt-1e9\""
															},
															"value": "GReward/staker-cut-lt-1e9"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_394005220321e659269243041427a45eb2132368ecbd8e8d5f4ba72a303f8784",
																"typeString": "literal_string \"GReward/staker-cut-lt-1e9\""
															}
														],
														"id": 2787,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "6156:7:6",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 2792,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "6156:54:6",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 2793,
												"nodeType": "ExpressionStatement",
												"src": "6156:54:6"
											},
											{
												"expression": {
													"id": 2796,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"id": 2794,
														"name": "gaugeController",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 2670,
														"src": "6221:15:6",
														"typeDescriptions": {
															"typeIdentifier": "t_contract$_IGaugeController_$3664",
															"typeString": "contract IGaugeController"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"id": 2795,
														"name": "_gaugeController",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 2745,
														"src": "6239:16:6",
														"typeDescriptions": {
															"typeIdentifier": "t_contract$_IGaugeController_$3664",
															"typeString": "contract IGaugeController"
														}
													},
													"src": "6221:34:6",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_IGaugeController_$3664",
														"typeString": "contract IGaugeController"
													}
												},
												"id": 2797,
												"nodeType": "ExpressionStatement",
												"src": "6221:34:6"
											},
											{
												"expression": {
													"id": 2800,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"id": 2798,
														"name": "vault",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 2673,
														"src": "6265:5:6",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"id": 2799,
														"name": "_vault",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 2747,
														"src": "6273:6:6",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"src": "6265:14:6",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"id": 2801,
												"nodeType": "ExpressionStatement",
												"src": "6265:14:6"
											},
											{
												"expression": {
													"id": 2804,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"id": 2802,
														"name": "stakerCut",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 2679,
														"src": "6289:9:6",
														"typeDescriptions": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"id": 2803,
														"name": "_stakerCut",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 2751,
														"src": "6301:10:6",
														"typeDescriptions": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														}
													},
													"src": "6289:22:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"id": 2805,
												"nodeType": "ExpressionStatement",
												"src": "6289:22:6"
											},
											{
												"expression": {
													"id": 2808,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"id": 2806,
														"name": "liquidator",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 2676,
														"src": "6321:10:6",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"id": 2807,
														"name": "_liquidator",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 2749,
														"src": "6334:11:6",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"src": "6321:24:6",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"id": 2809,
												"nodeType": "ExpressionStatement",
												"src": "6321:24:6"
											},
											{
												"eventCall": {
													"arguments": [
														{
															"id": 2811,
															"name": "_gaugeController",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2745,
															"src": "6370:16:6",
															"typeDescriptions": {
																"typeIdentifier": "t_contract$_IGaugeController_$3664",
																"typeString": "contract IGaugeController"
															}
														},
														{
															"id": 2812,
															"name": "_vault",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2747,
															"src": "6388:6:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 2813,
															"name": "_liquidator",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2749,
															"src": "6396:11:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 2814,
															"name": "_stakerCut",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2751,
															"src": "6409:10:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_contract$_IGaugeController_$3664",
																"typeString": "contract IGaugeController"
															},
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														],
														"id": 2810,
														"name": "Deployed",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 2691,
														"src": "6361:8:6",
														"typeDescriptions": {
															"typeIdentifier": "t_function_event_nonpayable$_t_contract$_IGaugeController_$3664_$_t_address_$_t_address_$_t_uint32_$returns$__$",
															"typeString": "function (contract IGaugeController,address,address,uint32)"
														}
													},
													"id": 2815,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "6361:59:6",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 2816,
												"nodeType": "EmitStatement",
												"src": "6356:64:6"
											}
										]
									},
									"documentation": {
										"id": 2742,
										"nodeType": "StructuredDocumentation",
										"src": "5488:274:6",
										"text": " @notice GaugeReward constructor\n @param _gaugeController Address of the GaugeController\n @param _vault Address of the Vault\n @param _liquidator Address of the Liquidator\n @param _stakerCut Percentage of rewards that goes to stakers"
									},
									"id": 2818,
									"implemented": true,
									"kind": "constructor",
									"modifiers": [],
									"name": "",
									"nameLocation": "-1:-1:-1",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 2752,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2745,
												"mutability": "mutable",
												"name": "_gaugeController",
												"nameLocation": "5805:16:6",
												"nodeType": "VariableDeclaration",
												"scope": 2818,
												"src": "5788:33:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_IGaugeController_$3664",
													"typeString": "contract IGaugeController"
												},
												"typeName": {
													"id": 2744,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 2743,
														"name": "IGaugeController",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 3664,
														"src": "5788:16:6"
													},
													"referencedDeclaration": 3664,
													"src": "5788:16:6",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_IGaugeController_$3664",
														"typeString": "contract IGaugeController"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 2747,
												"mutability": "mutable",
												"name": "_vault",
												"nameLocation": "5839:6:6",
												"nodeType": "VariableDeclaration",
												"scope": 2818,
												"src": "5831:14:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 2746,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "5831:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 2749,
												"mutability": "mutable",
												"name": "_liquidator",
												"nameLocation": "5863:11:6",
												"nodeType": "VariableDeclaration",
												"scope": 2818,
												"src": "5855:19:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 2748,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "5855:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 2751,
												"mutability": "mutable",
												"name": "_stakerCut",
												"nameLocation": "5891:10:6",
												"nodeType": "VariableDeclaration",
												"scope": 2818,
												"src": "5884:17:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint32",
													"typeString": "uint32"
												},
												"typeName": {
													"id": 2750,
													"name": "uint32",
													"nodeType": "ElementaryTypeName",
													"src": "5884:6:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "5778:129:6"
									},
									"returnParameters": {
										"id": 2753,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "5908:0:6"
									},
									"scope": 3566,
									"src": "5767:660:6",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "public"
								},
								{
									"body": {
										"id": 2831,
										"nodeType": "Block",
										"src": "6790:51:6",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"id": 2828,
															"name": "_gauge",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2821,
															"src": "6827:6:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														],
														"id": 2827,
														"name": "_currentRewardToken",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 3177,
														"src": "6807:19:6",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_struct$_RewardToken_$2659_memory_ptr_$",
															"typeString": "function (address) view returns (struct GaugeReward.RewardToken memory)"
														}
													},
													"id": 2829,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "6807:27:6",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
														"typeString": "struct GaugeReward.RewardToken memory"
													}
												},
												"functionReturnParameters": 2826,
												"id": 2830,
												"nodeType": "Return",
												"src": "6800:34:6"
											}
										]
									},
									"documentation": {
										"id": 2819,
										"nodeType": "StructuredDocumentation",
										"src": "6489:209:6",
										"text": " @notice Return the current reward token for the given gauge.\n @param _gauge Address of the gauge to get current reward token for\n @return Current reward token for the given gauge"
									},
									"functionSelector": "6e8fc2d3",
									"id": 2832,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "currentRewardToken",
									"nameLocation": "6712:18:6",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 2822,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2821,
												"mutability": "mutable",
												"name": "_gauge",
												"nameLocation": "6739:6:6",
												"nodeType": "VariableDeclaration",
												"scope": 2832,
												"src": "6731:14:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 2820,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "6731:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "6730:16:6"
									},
									"returnParameters": {
										"id": 2826,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2825,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 2832,
												"src": "6770:18:6",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
													"typeString": "struct GaugeReward.RewardToken"
												},
												"typeName": {
													"id": 2824,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 2823,
														"name": "RewardToken",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 2659,
														"src": "6770:11:6"
													},
													"referencedDeclaration": 2659,
													"src": "6770:11:6",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_RewardToken_$2659_storage_ptr",
														"typeString": "struct GaugeReward.RewardToken"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "6769:20:6"
									},
									"scope": 3566,
									"src": "6703:138:6",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								},
								{
									"body": {
										"id": 2864,
										"nodeType": "Block",
										"src": "7312:205:6",
										"statements": [
											{
												"assignments": [
													2846
												],
												"declarations": [
													{
														"constant": false,
														"id": 2846,
														"mutability": "mutable",
														"name": "_stakeBalance",
														"nameLocation": "7330:13:6",
														"nodeType": "VariableDeclaration",
														"scope": 2864,
														"src": "7322:21:6",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 2845,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "7322:7:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 2852,
												"initialValue": {
													"arguments": [
														{
															"id": 2849,
															"name": "_gauge",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2835,
															"src": "7382:6:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 2850,
															"name": "_user",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2840,
															"src": "7390:5:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														],
														"expression": {
															"id": 2847,
															"name": "gaugeController",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2670,
															"src": "7346:15:6",
															"typeDescriptions": {
																"typeIdentifier": "t_contract$_IGaugeController_$3664",
																"typeString": "contract IGaugeController"
															}
														},
														"id": 2848,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "getUserGaugeBalance",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 3663,
														"src": "7346:35:6",
														"typeDescriptions": {
															"typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
															"typeString": "function (address,address) view external returns (uint256)"
														}
													},
													"id": 2851,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "7346:50:6",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "7322:74:6"
											},
											{
												"assignments": [
													2854,
													null
												],
												"declarations": [
													{
														"constant": false,
														"id": 2854,
														"mutability": "mutable",
														"name": "_rewards",
														"nameLocation": "7415:8:6",
														"nodeType": "VariableDeclaration",
														"scope": 2864,
														"src": "7407:16:6",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 2853,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "7407:7:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													},
													null
												],
												"id": 2861,
												"initialValue": {
													"arguments": [
														{
															"id": 2856,
															"name": "_gauge",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2835,
															"src": "7441:6:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 2857,
															"name": "_rewardToken",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2838,
															"src": "7449:12:6",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																"typeString": "struct GaugeReward.RewardToken memory"
															}
														},
														{
															"id": 2858,
															"name": "_user",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2840,
															"src": "7463:5:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 2859,
															"name": "_stakeBalance",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2846,
															"src": "7470:13:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																"typeString": "struct GaugeReward.RewardToken memory"
															},
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 2855,
														"name": "_getRewards",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 3375,
														"src": "7429:11:6",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_view$_t_address_$_t_struct$_RewardToken_$2659_memory_ptr_$_t_address_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
															"typeString": "function (address,struct GaugeReward.RewardToken memory,address,uint256) view returns (uint256,uint256)"
														}
													},
													"id": 2860,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "7429:55:6",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
														"typeString": "tuple(uint256,uint256)"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "7406:78:6"
											},
											{
												"expression": {
													"id": 2862,
													"name": "_rewards",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 2854,
													"src": "7502:8:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"functionReturnParameters": 2844,
												"id": 2863,
												"nodeType": "Return",
												"src": "7495:15:6"
											}
										]
									},
									"documentation": {
										"id": 2833,
										"nodeType": "StructuredDocumentation",
										"src": "6847:314:6",
										"text": " @notice Get user rewards for a given gauge and token.\n @param _gauge Address of the gauge to get rewards for\n @param _rewardToken Reward token to get rewards for\n @param _user Address of the user to get rewards for\n @return Amount of rewards for the given gauge and token"
									},
									"functionSelector": "f00b1997",
									"id": 2865,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "getRewards",
									"nameLocation": "7175:10:6",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 2841,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2835,
												"mutability": "mutable",
												"name": "_gauge",
												"nameLocation": "7203:6:6",
												"nodeType": "VariableDeclaration",
												"scope": 2865,
												"src": "7195:14:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 2834,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "7195:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 2838,
												"mutability": "mutable",
												"name": "_rewardToken",
												"nameLocation": "7238:12:6",
												"nodeType": "VariableDeclaration",
												"scope": 2865,
												"src": "7219:31:6",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
													"typeString": "struct GaugeReward.RewardToken"
												},
												"typeName": {
													"id": 2837,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 2836,
														"name": "RewardToken",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 2659,
														"src": "7219:11:6"
													},
													"referencedDeclaration": 2659,
													"src": "7219:11:6",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_RewardToken_$2659_storage_ptr",
														"typeString": "struct GaugeReward.RewardToken"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 2840,
												"mutability": "mutable",
												"name": "_user",
												"nameLocation": "7268:5:6",
												"nodeType": "VariableDeclaration",
												"scope": 2865,
												"src": "7260:13:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 2839,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "7260:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "7185:94:6"
									},
									"returnParameters": {
										"id": 2844,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2843,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 2865,
												"src": "7303:7:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 2842,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "7303:7:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "7302:9:6"
									},
									"scope": 3566,
									"src": "7166:351:6",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								},
								{
									"baseFunctions": [
										3992
									],
									"body": {
										"id": 2994,
										"nodeType": "Block",
										"src": "8169:1171:6",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															"id": 2887,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"expression": {
																	"id": 2884,
																	"name": "msg",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 4294967281,
																	"src": "8187:3:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_message",
																		"typeString": "msg"
																	}
																},
																"id": 2885,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "sender",
																"nodeType": "MemberAccess",
																"src": "8187:10:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "==",
															"rightExpression": {
																"id": 2886,
																"name": "liquidator",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 2676,
																"src": "8201:10:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"src": "8187:24:6",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "475265776172642f6f6e6c792d6c697175696461746f72",
															"id": 2888,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "8213:25:6",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_3d9aad6f9cafa45f8d5356023189d3e1086a81a6694f72a8006f1b290ec90f41",
																"typeString": "literal_string \"GReward/only-liquidator\""
															},
															"value": "GReward/only-liquidator"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_3d9aad6f9cafa45f8d5356023189d3e1086a81a6694f72a8006f1b290ec90f41",
																"typeString": "literal_string \"GReward/only-liquidator\""
															}
														],
														"id": 2883,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "8179:7:6",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 2889,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "8179:60:6",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 2890,
												"nodeType": "ExpressionStatement",
												"src": "8179:60:6"
											},
											{
												"assignments": [
													2892
												],
												"declarations": [
													{
														"constant": false,
														"id": 2892,
														"mutability": "mutable",
														"name": "_gauge",
														"nameLocation": "8258:6:6",
														"nodeType": "VariableDeclaration",
														"scope": 2994,
														"src": "8250:14:6",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														},
														"typeName": {
															"id": 2891,
															"name": "address",
															"nodeType": "ElementaryTypeName",
															"src": "8250:7:6",
															"stateMutability": "nonpayable",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 2897,
												"initialValue": {
													"arguments": [
														{
															"id": 2895,
															"name": "_ticket",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2872,
															"src": "8275:7:6",
															"typeDescriptions": {
																"typeIdentifier": "t_contract$_ITicket_$4186",
																"typeString": "contract ITicket"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_contract$_ITicket_$4186",
																"typeString": "contract ITicket"
															}
														],
														"id": 2894,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "8267:7:6",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_address_$",
															"typeString": "type(address)"
														},
														"typeName": {
															"id": 2893,
															"name": "address",
															"nodeType": "ElementaryTypeName",
															"src": "8267:7:6",
															"typeDescriptions": {}
														}
													},
													"id": 2896,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "8267:16:6",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "8250:33:6"
											},
											{
												"assignments": [
													2900
												],
												"declarations": [
													{
														"constant": false,
														"id": 2900,
														"mutability": "mutable",
														"name": "_rewardToken",
														"nameLocation": "8313:12:6",
														"nodeType": "VariableDeclaration",
														"scope": 2994,
														"src": "8294:31:6",
														"stateVariable": false,
														"storageLocation": "memory",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
															"typeString": "struct GaugeReward.RewardToken"
														},
														"typeName": {
															"id": 2899,
															"nodeType": "UserDefinedTypeName",
															"pathNode": {
																"id": 2898,
																"name": "RewardToken",
																"nodeType": "IdentifierPath",
																"referencedDeclaration": 2659,
																"src": "8294:11:6"
															},
															"referencedDeclaration": 2659,
															"src": "8294:11:6",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_RewardToken_$2659_storage_ptr",
																"typeString": "struct GaugeReward.RewardToken"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 2904,
												"initialValue": {
													"arguments": [
														{
															"id": 2902,
															"name": "_gauge",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2892,
															"src": "8348:6:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														],
														"id": 2901,
														"name": "_currentRewardToken",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 3177,
														"src": "8328:19:6",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_struct$_RewardToken_$2659_memory_ptr_$",
															"typeString": "function (address) view returns (struct GaugeReward.RewardToken memory)"
														}
													},
													"id": 2903,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "8328:27:6",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
														"typeString": "struct GaugeReward.RewardToken memory"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "8294:61:6"
											},
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_contract$_IERC20_$77",
														"typeString": "contract IERC20"
													},
													"id": 2908,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 2905,
														"name": "_token",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 2877,
														"src": "8370:6:6",
														"typeDescriptions": {
															"typeIdentifier": "t_contract$_IERC20_$77",
															"typeString": "contract IERC20"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "!=",
													"rightExpression": {
														"expression": {
															"id": 2906,
															"name": "_rewardToken",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2900,
															"src": "8380:12:6",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																"typeString": "struct GaugeReward.RewardToken memory"
															}
														},
														"id": 2907,
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "token",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 2656,
														"src": "8380:18:6",
														"typeDescriptions": {
															"typeIdentifier": "t_contract$_IERC20_$77",
															"typeString": "contract IERC20"
														}
													},
													"src": "8370:28:6",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 2943,
												"nodeType": "IfStatement",
												"src": "8366:445:6",
												"trueBody": {
													"id": 2942,
													"nodeType": "Block",
													"src": "8400:411:6",
													"statements": [
														{
															"assignments": [
																2910
															],
															"declarations": [
																{
																	"constant": false,
																	"id": 2910,
																	"mutability": "mutable",
																	"name": "_currentTimestamp",
																	"nameLocation": "8422:17:6",
																	"nodeType": "VariableDeclaration",
																	"scope": 2942,
																	"src": "8414:25:6",
																	"stateVariable": false,
																	"storageLocation": "default",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	},
																	"typeName": {
																		"id": 2909,
																		"name": "uint256",
																		"nodeType": "ElementaryTypeName",
																		"src": "8414:7:6",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		}
																	},
																	"visibility": "internal"
																}
															],
															"id": 2913,
															"initialValue": {
																"expression": {
																	"id": 2911,
																	"name": "block",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 4294967292,
																	"src": "8442:5:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_block",
																		"typeString": "block"
																	}
																},
																"id": 2912,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "timestamp",
																"nodeType": "MemberAccess",
																"src": "8442:15:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "VariableDeclarationStatement",
															"src": "8414:43:6"
														},
														{
															"assignments": [
																2916
															],
															"declarations": [
																{
																	"constant": false,
																	"id": 2916,
																	"mutability": "mutable",
																	"name": "_newRewardToken",
																	"nameLocation": "8491:15:6",
																	"nodeType": "VariableDeclaration",
																	"scope": 2942,
																	"src": "8472:34:6",
																	"stateVariable": false,
																	"storageLocation": "memory",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																		"typeString": "struct GaugeReward.RewardToken"
																	},
																	"typeName": {
																		"id": 2915,
																		"nodeType": "UserDefinedTypeName",
																		"pathNode": {
																			"id": 2914,
																			"name": "RewardToken",
																			"nodeType": "IdentifierPath",
																			"referencedDeclaration": 2659,
																			"src": "8472:11:6"
																		},
																		"referencedDeclaration": 2659,
																		"src": "8472:11:6",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_RewardToken_$2659_storage_ptr",
																			"typeString": "struct GaugeReward.RewardToken"
																		}
																	},
																	"visibility": "internal"
																}
															],
															"id": 2924,
															"initialValue": {
																"arguments": [
																	{
																		"id": 2918,
																		"name": "_token",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 2877,
																		"src": "8546:6:6",
																		"typeDescriptions": {
																			"typeIdentifier": "t_contract$_IERC20_$77",
																			"typeString": "contract IERC20"
																		}
																	},
																	{
																		"arguments": [
																			{
																				"id": 2921,
																				"name": "_currentTimestamp",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 2910,
																				"src": "8588:17:6",
																				"typeDescriptions": {
																					"typeIdentifier": "t_uint256",
																					"typeString": "uint256"
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_uint256",
																					"typeString": "uint256"
																				}
																			],
																			"id": 2920,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "8581:6:6",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint64_$",
																				"typeString": "type(uint64)"
																			},
																			"typeName": {
																				"id": 2919,
																				"name": "uint64",
																				"nodeType": "ElementaryTypeName",
																				"src": "8581:6:6",
																				"typeDescriptions": {}
																			}
																		},
																		"id": 2922,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": false,
																		"kind": "typeConversion",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "8581:25:6",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint64",
																			"typeString": "uint64"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_contract$_IERC20_$77",
																			"typeString": "contract IERC20"
																		},
																		{
																			"typeIdentifier": "t_uint64",
																			"typeString": "uint64"
																		}
																	],
																	"id": 2917,
																	"name": "RewardToken",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2659,
																	"src": "8509:11:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_type$_t_struct$_RewardToken_$2659_storage_ptr_$",
																		"typeString": "type(struct GaugeReward.RewardToken storage pointer)"
																	}
																},
																"id": 2923,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "structConstructorCall",
																"lValueRequested": false,
																"names": [
																	"token",
																	"timestamp"
																],
																"nodeType": "FunctionCall",
																"src": "8509:112:6",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																	"typeString": "struct GaugeReward.RewardToken memory"
																}
															},
															"nodeType": "VariableDeclarationStatement",
															"src": "8472:149:6"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"id": 2929,
																		"name": "_newRewardToken",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 2916,
																		"src": "8667:15:6",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																			"typeString": "struct GaugeReward.RewardToken memory"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																			"typeString": "struct GaugeReward.RewardToken memory"
																		}
																	],
																	"expression": {
																		"baseExpression": {
																			"id": 2925,
																			"name": "gaugeRewardTokens",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 2666,
																			"src": "8636:17:6",
																			"typeDescriptions": {
																				"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_RewardToken_$2659_storage_$dyn_storage_$",
																				"typeString": "mapping(address => struct GaugeReward.RewardToken storage ref[] storage ref)"
																			}
																		},
																		"id": 2927,
																		"indexExpression": {
																			"id": 2926,
																			"name": "_gauge",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 2892,
																			"src": "8654:6:6",
																			"typeDescriptions": {
																				"typeIdentifier": "t_address",
																				"typeString": "address"
																			}
																		},
																		"isConstant": false,
																		"isLValue": true,
																		"isPure": false,
																		"lValueRequested": false,
																		"nodeType": "IndexAccess",
																		"src": "8636:25:6",
																		"typeDescriptions": {
																			"typeIdentifier": "t_array$_t_struct$_RewardToken_$2659_storage_$dyn_storage",
																			"typeString": "struct GaugeReward.RewardToken storage ref[] storage ref"
																		}
																	},
																	"id": 2928,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "push",
																	"nodeType": "MemberAccess",
																	"src": "8636:30:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_arraypush_nonpayable$_t_array$_t_struct$_RewardToken_$2659_storage_$dyn_storage_ptr_$_t_struct$_RewardToken_$2659_storage_$returns$__$bound_to$_t_array$_t_struct$_RewardToken_$2659_storage_$dyn_storage_ptr_$",
																		"typeString": "function (struct GaugeReward.RewardToken storage ref[] storage pointer,struct GaugeReward.RewardToken storage ref)"
																	}
																},
																"id": 2930,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "8636:47:6",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_tuple$__$",
																	"typeString": "tuple()"
																}
															},
															"id": 2931,
															"nodeType": "ExpressionStatement",
															"src": "8636:47:6"
														},
														{
															"eventCall": {
																"arguments": [
																	{
																		"id": 2933,
																		"name": "_gauge",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 2892,
																		"src": "8721:6:6",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	},
																	{
																		"id": 2934,
																		"name": "_token",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 2877,
																		"src": "8729:6:6",
																		"typeDescriptions": {
																			"typeIdentifier": "t_contract$_IERC20_$77",
																			"typeString": "contract IERC20"
																		}
																	},
																	{
																		"id": 2935,
																		"name": "_currentTimestamp",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 2910,
																		"src": "8737:17:6",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		},
																		{
																			"typeIdentifier": "t_contract$_IERC20_$77",
																			"typeString": "contract IERC20"
																		},
																		{
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		}
																	],
																	"id": 2932,
																	"name": "RewardTokenPushed",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2741,
																	"src": "8703:17:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$77_$_t_uint256_$returns$__$",
																		"typeString": "function (address,contract IERC20,uint256)"
																	}
																},
																"id": 2936,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "8703:52:6",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_tuple$__$",
																	"typeString": "tuple()"
																}
															},
															"id": 2937,
															"nodeType": "EmitStatement",
															"src": "8698:57:6"
														},
														{
															"expression": {
																"id": 2940,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftHandSide": {
																	"id": 2938,
																	"name": "_rewardToken",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2900,
																	"src": "8770:12:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																		"typeString": "struct GaugeReward.RewardToken memory"
																	}
																},
																"nodeType": "Assignment",
																"operator": "=",
																"rightHandSide": {
																	"id": 2939,
																	"name": "_newRewardToken",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2916,
																	"src": "8785:15:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																		"typeString": "struct GaugeReward.RewardToken memory"
																	}
																},
																"src": "8770:30:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																	"typeString": "struct GaugeReward.RewardToken memory"
																}
															},
															"id": 2941,
															"nodeType": "ExpressionStatement",
															"src": "8770:30:6"
														}
													]
												}
											},
											{
												"assignments": [
													2945
												],
												"declarations": [
													{
														"constant": false,
														"id": 2945,
														"mutability": "mutable",
														"name": "_gaugeRewards",
														"nameLocation": "8829:13:6",
														"nodeType": "VariableDeclaration",
														"scope": 2994,
														"src": "8821:21:6",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 2944,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "8821:7:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 2952,
												"initialValue": {
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 2951,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"components": [
															{
																"commonType": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																},
																"id": 2948,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2946,
																	"name": "_tokenAmount",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2879,
																	"src": "8846:12:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "*",
																"rightExpression": {
																	"id": 2947,
																	"name": "stakerCut",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2679,
																	"src": "8861:9:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint32",
																		"typeString": "uint32"
																	}
																},
																"src": "8846:24:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															}
														],
														"id": 2949,
														"isConstant": false,
														"isInlineArray": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"nodeType": "TupleExpression",
														"src": "8845:26:6",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "/",
													"rightExpression": {
														"hexValue": "316539",
														"id": 2950,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "number",
														"lValueRequested": false,
														"nodeType": "Literal",
														"src": "8874:3:6",
														"typeDescriptions": {
															"typeIdentifier": "t_rational_1000000000_by_1",
															"typeString": "int_const 1000000000"
														},
														"value": "1e9"
													},
													"src": "8845:32:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "8821:56:6"
											},
											{
												"assignments": [
													2954
												],
												"declarations": [
													{
														"constant": false,
														"id": 2954,
														"mutability": "mutable",
														"name": "_gaugeBalance",
														"nameLocation": "8895:13:6",
														"nodeType": "VariableDeclaration",
														"scope": 2994,
														"src": "8887:21:6",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 2953,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "8887:7:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 2959,
												"initialValue": {
													"arguments": [
														{
															"id": 2957,
															"name": "_gauge",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2892,
															"src": "8943:6:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														],
														"expression": {
															"id": 2955,
															"name": "gaugeController",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2670,
															"src": "8911:15:6",
															"typeDescriptions": {
																"typeIdentifier": "t_contract$_IGaugeController_$3664",
																"typeString": "contract IGaugeController"
															}
														},
														"id": 2956,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "getGaugeBalance",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 3645,
														"src": "8911:31:6",
														"typeDescriptions": {
															"typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
															"typeString": "function (address) view external returns (uint256)"
														}
													},
													"id": 2958,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "8911:39:6",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "8887:63:6"
											},
											{
												"assignments": [
													2961
												],
												"declarations": [
													{
														"constant": false,
														"id": 2961,
														"mutability": "mutable",
														"name": "_exchangeRate",
														"nameLocation": "9036:13:6",
														"nodeType": "VariableDeclaration",
														"scope": 2994,
														"src": "9028:21:6",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 2960,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "9028:7:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 2973,
												"initialValue": {
													"condition": {
														"commonType": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"id": 2964,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"leftExpression": {
															"id": 2962,
															"name": "_gaugeBalance",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2954,
															"src": "9052:13:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"nodeType": "BinaryOperation",
														"operator": ">",
														"rightExpression": {
															"hexValue": "30",
															"id": 2963,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "number",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "9068:1:6",
															"typeDescriptions": {
																"typeIdentifier": "t_rational_0_by_1",
																"typeString": "int_const 0"
															},
															"value": "0"
														},
														"src": "9052:17:6",
														"typeDescriptions": {
															"typeIdentifier": "t_bool",
															"typeString": "bool"
														}
													},
													"falseExpression": {
														"hexValue": "30",
														"id": 2971,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "number",
														"lValueRequested": false,
														"nodeType": "Literal",
														"src": "9113:1:6",
														"typeDescriptions": {
															"typeIdentifier": "t_rational_0_by_1",
															"typeString": "int_const 0"
														},
														"value": "0"
													},
													"id": 2972,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"nodeType": "Conditional",
													"src": "9052:62:6",
													"trueExpression": {
														"commonType": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"id": 2970,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"leftExpression": {
															"components": [
																{
																	"commonType": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	},
																	"id": 2967,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"lValueRequested": false,
																	"leftExpression": {
																		"id": 2965,
																		"name": "_gaugeRewards",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 2945,
																		"src": "9073:13:6",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		}
																	},
																	"nodeType": "BinaryOperation",
																	"operator": "*",
																	"rightExpression": {
																		"hexValue": "31653138",
																		"id": 2966,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "number",
																		"lValueRequested": false,
																		"nodeType": "Literal",
																		"src": "9089:4:6",
																		"typeDescriptions": {
																			"typeIdentifier": "t_rational_1000000000000000000_by_1",
																			"typeString": "int_const 1000000000000000000"
																		},
																		"value": "1e18"
																	},
																	"src": "9073:20:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																}
															],
															"id": 2968,
															"isConstant": false,
															"isInlineArray": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"nodeType": "TupleExpression",
															"src": "9072:22:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"nodeType": "BinaryOperation",
														"operator": "/",
														"rightExpression": {
															"id": 2969,
															"name": "_gaugeBalance",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2954,
															"src": "9097:13:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"src": "9072:38:6",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "9028:86:6"
											},
											{
												"expression": {
													"id": 2984,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"baseExpression": {
															"baseExpression": {
																"baseExpression": {
																	"id": 2974,
																	"name": "gaugeRewardTokenExchangeRates",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2653,
																	"src": "9125:29:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$77_$_t_mapping$_t_uint64_$_t_uint256_$_$_$",
																		"typeString": "mapping(address => mapping(contract IERC20 => mapping(uint64 => uint256)))"
																	}
																},
																"id": 2980,
																"indexExpression": {
																	"id": 2975,
																	"name": "_gauge",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2892,
																	"src": "9155:6:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"nodeType": "IndexAccess",
																"src": "9125:37:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_mapping$_t_contract$_IERC20_$77_$_t_mapping$_t_uint64_$_t_uint256_$_$",
																	"typeString": "mapping(contract IERC20 => mapping(uint64 => uint256))"
																}
															},
															"id": 2981,
															"indexExpression": {
																"expression": {
																	"id": 2976,
																	"name": "_rewardToken",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2900,
																	"src": "9163:12:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																		"typeString": "struct GaugeReward.RewardToken memory"
																	}
																},
																"id": 2977,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "token",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 2656,
																"src": "9163:18:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_contract$_IERC20_$77",
																	"typeString": "contract IERC20"
																}
															},
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"nodeType": "IndexAccess",
															"src": "9125:57:6",
															"typeDescriptions": {
																"typeIdentifier": "t_mapping$_t_uint64_$_t_uint256_$",
																"typeString": "mapping(uint64 => uint256)"
															}
														},
														"id": 2982,
														"indexExpression": {
															"expression": {
																"id": 2978,
																"name": "_rewardToken",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 2900,
																"src": "9196:12:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																	"typeString": "struct GaugeReward.RewardToken memory"
																}
															},
															"id": 2979,
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "timestamp",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 2658,
															"src": "9196:22:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint64",
																"typeString": "uint64"
															}
														},
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": true,
														"nodeType": "IndexAccess",
														"src": "9125:103:6",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "Assignment",
													"operator": "+=",
													"rightHandSide": {
														"id": 2983,
														"name": "_exchangeRate",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 2961,
														"src": "9232:13:6",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"src": "9125:120:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"id": 2985,
												"nodeType": "ExpressionStatement",
												"src": "9125:120:6"
											},
											{
												"eventCall": {
													"arguments": [
														{
															"id": 2987,
															"name": "_gauge",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2892,
															"src": "9274:6:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 2988,
															"name": "_token",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2877,
															"src": "9282:6:6",
															"typeDescriptions": {
																"typeIdentifier": "t_contract$_IERC20_$77",
																"typeString": "contract IERC20"
															}
														},
														{
															"id": 2989,
															"name": "_tokenAmount",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2879,
															"src": "9290:12:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														{
															"id": 2990,
															"name": "_gaugeRewards",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2945,
															"src": "9304:13:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														{
															"id": 2991,
															"name": "_exchangeRate",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2961,
															"src": "9319:13:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_contract$_IERC20_$77",
																"typeString": "contract IERC20"
															},
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 2986,
														"name": "RewardsAdded",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 2705,
														"src": "9261:12:6",
														"typeDescriptions": {
															"typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$77_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
															"typeString": "function (address,contract IERC20,uint256,uint256,uint256)"
														}
													},
													"id": 2992,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "9261:72:6",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 2993,
												"nodeType": "EmitStatement",
												"src": "9256:77:6"
											}
										]
									},
									"documentation": {
										"id": 2866,
										"nodeType": "StructuredDocumentation",
										"src": "7523:483:6",
										"text": " @notice Records exchange rate after swapping an amount of `ticket` for `token`.\n @dev Called by the liquidator contract anytime tokens are liquidated.\n @dev Will push `token` to the `gaugeRewardTokens` mapping if different from the current one.\n @param _ticket Address of the tickets that were sold\n @param _token Address of the token that the tickets were sold for\n @param _tokenAmount Amount of tokens that the tickets were sold for"
									},
									"functionSelector": "fd401628",
									"id": 2995,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "afterSwap",
									"nameLocation": "8020:9:6",
									"nodeType": "FunctionDefinition",
									"overrides": {
										"id": 2881,
										"nodeType": "OverrideSpecifier",
										"overrides": [],
										"src": "8160:8:6"
									},
									"parameters": {
										"id": 2880,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2869,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 2995,
												"src": "8039:10:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_IPrizePool_$3970",
													"typeString": "contract IPrizePool"
												},
												"typeName": {
													"id": 2868,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 2867,
														"name": "IPrizePool",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 3970,
														"src": "8039:10:6"
													},
													"referencedDeclaration": 3970,
													"src": "8039:10:6",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_IPrizePool_$3970",
														"typeString": "contract IPrizePool"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 2872,
												"mutability": "mutable",
												"name": "_ticket",
												"nameLocation": "8067:7:6",
												"nodeType": "VariableDeclaration",
												"scope": 2995,
												"src": "8059:15:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_ITicket_$4186",
													"typeString": "contract ITicket"
												},
												"typeName": {
													"id": 2871,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 2870,
														"name": "ITicket",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4186,
														"src": "8059:7:6"
													},
													"referencedDeclaration": 4186,
													"src": "8059:7:6",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_ITicket_$4186",
														"typeString": "contract ITicket"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 2874,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 2995,
												"src": "8084:7:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 2873,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "8084:7:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 2877,
												"mutability": "mutable",
												"name": "_token",
												"nameLocation": "8108:6:6",
												"nodeType": "VariableDeclaration",
												"scope": 2995,
												"src": "8101:13:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_IERC20_$77",
													"typeString": "contract IERC20"
												},
												"typeName": {
													"id": 2876,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 2875,
														"name": "IERC20",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 77,
														"src": "8101:6:6"
													},
													"referencedDeclaration": 77,
													"src": "8101:6:6",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_IERC20_$77",
														"typeString": "contract IERC20"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 2879,
												"mutability": "mutable",
												"name": "_tokenAmount",
												"nameLocation": "8132:12:6",
												"nodeType": "VariableDeclaration",
												"scope": 2995,
												"src": "8124:20:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 2878,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "8124:7:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "8029:121:6"
									},
									"returnParameters": {
										"id": 2882,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "8169:0:6"
									},
									"scope": 3566,
									"src": "8011:1329:6",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"baseFunctions": [
										3677
									],
									"body": {
										"id": 3014,
										"nodeType": "Block",
										"src": "9532:59:6",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"id": 3009,
															"name": "_gauge",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2998,
															"src": "9552:6:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 3010,
															"name": "_user",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3000,
															"src": "9560:5:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 3011,
															"name": "_oldStakeBalance",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3002,
															"src": "9567:16:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 3008,
														"name": "_claimAll",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 3549,
														"src": "9542:9:6",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
															"typeString": "function (address,address,uint256)"
														}
													},
													"id": 3012,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "9542:42:6",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 3013,
												"nodeType": "ExpressionStatement",
												"src": "9542:42:6"
											}
										]
									},
									"documentation": {
										"id": 2996,
										"nodeType": "StructuredDocumentation",
										"src": "9346:28:6",
										"text": "@inheritdoc IGaugeReward"
									},
									"functionSelector": "95cebcd4",
									"id": 3015,
									"implemented": true,
									"kind": "function",
									"modifiers": [
										{
											"id": 3006,
											"kind": "modifierInvocation",
											"modifierName": {
												"id": 3005,
												"name": "onlyGaugeController",
												"nodeType": "IdentifierPath",
												"referencedDeclaration": 3565,
												"src": "9512:19:6"
											},
											"nodeType": "ModifierInvocation",
											"src": "9512:19:6"
										}
									],
									"name": "afterIncreaseGauge",
									"nameLocation": "9388:18:6",
									"nodeType": "FunctionDefinition",
									"overrides": {
										"id": 3004,
										"nodeType": "OverrideSpecifier",
										"overrides": [],
										"src": "9503:8:6"
									},
									"parameters": {
										"id": 3003,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2998,
												"mutability": "mutable",
												"name": "_gauge",
												"nameLocation": "9424:6:6",
												"nodeType": "VariableDeclaration",
												"scope": 3015,
												"src": "9416:14:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 2997,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "9416:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3000,
												"mutability": "mutable",
												"name": "_user",
												"nameLocation": "9448:5:6",
												"nodeType": "VariableDeclaration",
												"scope": 3015,
												"src": "9440:13:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 2999,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "9440:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3002,
												"mutability": "mutable",
												"name": "_oldStakeBalance",
												"nameLocation": "9471:16:6",
												"nodeType": "VariableDeclaration",
												"scope": 3015,
												"src": "9463:24:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3001,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "9463:7:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "9406:87:6"
									},
									"returnParameters": {
										"id": 3007,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "9532:0:6"
									},
									"scope": 3566,
									"src": "9379:212:6",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"baseFunctions": [
										3687
									],
									"body": {
										"id": 3034,
										"nodeType": "Block",
										"src": "9783:59:6",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"id": 3029,
															"name": "_gauge",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3018,
															"src": "9803:6:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 3030,
															"name": "_user",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3020,
															"src": "9811:5:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 3031,
															"name": "_oldStakeBalance",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3022,
															"src": "9818:16:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 3028,
														"name": "_claimAll",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 3549,
														"src": "9793:9:6",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
															"typeString": "function (address,address,uint256)"
														}
													},
													"id": 3032,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "9793:42:6",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 3033,
												"nodeType": "ExpressionStatement",
												"src": "9793:42:6"
											}
										]
									},
									"documentation": {
										"id": 3016,
										"nodeType": "StructuredDocumentation",
										"src": "9597:28:6",
										"text": "@inheritdoc IGaugeReward"
									},
									"functionSelector": "31661930",
									"id": 3035,
									"implemented": true,
									"kind": "function",
									"modifiers": [
										{
											"id": 3026,
											"kind": "modifierInvocation",
											"modifierName": {
												"id": 3025,
												"name": "onlyGaugeController",
												"nodeType": "IdentifierPath",
												"referencedDeclaration": 3565,
												"src": "9763:19:6"
											},
											"nodeType": "ModifierInvocation",
											"src": "9763:19:6"
										}
									],
									"name": "afterDecreaseGauge",
									"nameLocation": "9639:18:6",
									"nodeType": "FunctionDefinition",
									"overrides": {
										"id": 3024,
										"nodeType": "OverrideSpecifier",
										"overrides": [],
										"src": "9754:8:6"
									},
									"parameters": {
										"id": 3023,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3018,
												"mutability": "mutable",
												"name": "_gauge",
												"nameLocation": "9675:6:6",
												"nodeType": "VariableDeclaration",
												"scope": 3035,
												"src": "9667:14:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3017,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "9667:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3020,
												"mutability": "mutable",
												"name": "_user",
												"nameLocation": "9699:5:6",
												"nodeType": "VariableDeclaration",
												"scope": 3035,
												"src": "9691:13:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3019,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "9691:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3022,
												"mutability": "mutable",
												"name": "_oldStakeBalance",
												"nameLocation": "9722:16:6",
												"nodeType": "VariableDeclaration",
												"scope": 3035,
												"src": "9714:24:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3021,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "9714:7:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "9657:87:6"
									},
									"returnParameters": {
										"id": 3027,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "9783:0:6"
									},
									"scope": 3566,
									"src": "9630:212:6",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"body": {
										"id": 3061,
										"nodeType": "Block",
										"src": "10237:151:6",
										"statements": [
											{
												"assignments": [
													3047
												],
												"declarations": [
													{
														"constant": false,
														"id": 3047,
														"mutability": "mutable",
														"name": "_stakeBalance",
														"nameLocation": "10255:13:6",
														"nodeType": "VariableDeclaration",
														"scope": 3061,
														"src": "10247:21:6",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 3046,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "10247:7:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 3053,
												"initialValue": {
													"arguments": [
														{
															"id": 3050,
															"name": "_gauge",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3038,
															"src": "10307:6:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 3051,
															"name": "_user",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3043,
															"src": "10315:5:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														],
														"expression": {
															"id": 3048,
															"name": "gaugeController",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2670,
															"src": "10271:15:6",
															"typeDescriptions": {
																"typeIdentifier": "t_contract$_IGaugeController_$3664",
																"typeString": "contract IGaugeController"
															}
														},
														"id": 3049,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "getUserGaugeBalance",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 3663,
														"src": "10271:35:6",
														"typeDescriptions": {
															"typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
															"typeString": "function (address,address) view external returns (uint256)"
														}
													},
													"id": 3052,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "10271:50:6",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "10247:74:6"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 3055,
															"name": "_gauge",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3038,
															"src": "10338:6:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 3056,
															"name": "_rewardToken",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3041,
															"src": "10346:12:6",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																"typeString": "struct GaugeReward.RewardToken memory"
															}
														},
														{
															"id": 3057,
															"name": "_user",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3043,
															"src": "10360:5:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 3058,
															"name": "_stakeBalance",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3047,
															"src": "10367:13:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																"typeString": "struct GaugeReward.RewardToken memory"
															},
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 3054,
														"name": "_claim",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 3472,
														"src": "10331:6:6",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_struct$_RewardToken_$2659_memory_ptr_$_t_address_$_t_uint256_$returns$__$",
															"typeString": "function (address,struct GaugeReward.RewardToken memory,address,uint256)"
														}
													},
													"id": 3059,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "10331:50:6",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 3060,
												"nodeType": "ExpressionStatement",
												"src": "10331:50:6"
											}
										]
									},
									"documentation": {
										"id": 3036,
										"nodeType": "StructuredDocumentation",
										"src": "9848:266:6",
										"text": " @notice Claim user rewards for a given gauge and reward token.\n @param _gauge Address of the gauge to claim rewards for\n @param _rewardToken Reward token to claim rewards for\n @param _user Address of the user to claim rewards for"
									},
									"functionSelector": "f741e08f",
									"id": 3062,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "claim",
									"nameLocation": "10128:5:6",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3044,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3038,
												"mutability": "mutable",
												"name": "_gauge",
												"nameLocation": "10151:6:6",
												"nodeType": "VariableDeclaration",
												"scope": 3062,
												"src": "10143:14:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3037,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "10143:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3041,
												"mutability": "mutable",
												"name": "_rewardToken",
												"nameLocation": "10186:12:6",
												"nodeType": "VariableDeclaration",
												"scope": 3062,
												"src": "10167:31:6",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
													"typeString": "struct GaugeReward.RewardToken"
												},
												"typeName": {
													"id": 3040,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 3039,
														"name": "RewardToken",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 2659,
														"src": "10167:11:6"
													},
													"referencedDeclaration": 2659,
													"src": "10167:11:6",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_RewardToken_$2659_storage_ptr",
														"typeString": "struct GaugeReward.RewardToken"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3043,
												"mutability": "mutable",
												"name": "_user",
												"nameLocation": "10216:5:6",
												"nodeType": "VariableDeclaration",
												"scope": 3062,
												"src": "10208:13:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3042,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "10208:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "10133:94:6"
									},
									"returnParameters": {
										"id": 3045,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "10237:0:6"
									},
									"scope": 3566,
									"src": "10119:269:6",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"body": {
										"id": 3084,
										"nodeType": "Block",
										"src": "10649:140:6",
										"statements": [
											{
												"assignments": [
													3071
												],
												"declarations": [
													{
														"constant": false,
														"id": 3071,
														"mutability": "mutable",
														"name": "_stakeBalance",
														"nameLocation": "10667:13:6",
														"nodeType": "VariableDeclaration",
														"scope": 3084,
														"src": "10659:21:6",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 3070,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "10659:7:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 3077,
												"initialValue": {
													"arguments": [
														{
															"id": 3074,
															"name": "_gauge",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3065,
															"src": "10719:6:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 3075,
															"name": "_user",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3067,
															"src": "10727:5:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														],
														"expression": {
															"id": 3072,
															"name": "gaugeController",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2670,
															"src": "10683:15:6",
															"typeDescriptions": {
																"typeIdentifier": "t_contract$_IGaugeController_$3664",
																"typeString": "contract IGaugeController"
															}
														},
														"id": 3073,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "getUserGaugeBalance",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 3663,
														"src": "10683:35:6",
														"typeDescriptions": {
															"typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
															"typeString": "function (address,address) view external returns (uint256)"
														}
													},
													"id": 3076,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "10683:50:6",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "10659:74:6"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 3079,
															"name": "_gauge",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3065,
															"src": "10753:6:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 3080,
															"name": "_user",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3067,
															"src": "10761:5:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 3081,
															"name": "_stakeBalance",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3071,
															"src": "10768:13:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 3078,
														"name": "_claimAll",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 3549,
														"src": "10743:9:6",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
															"typeString": "function (address,address,uint256)"
														}
													},
													"id": 3082,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "10743:39:6",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 3083,
												"nodeType": "ExpressionStatement",
												"src": "10743:39:6"
											}
										]
									},
									"documentation": {
										"id": 3063,
										"nodeType": "StructuredDocumentation",
										"src": "10394:192:6",
										"text": " @notice Claim all user rewards for a given gauge.\n @param _gauge Address of the gauge to claim rewards for\n @param _user Address of the user to claim rewards for"
									},
									"functionSelector": "5767bba5",
									"id": 3085,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "claimAll",
									"nameLocation": "10600:8:6",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3068,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3065,
												"mutability": "mutable",
												"name": "_gauge",
												"nameLocation": "10617:6:6",
												"nodeType": "VariableDeclaration",
												"scope": 3085,
												"src": "10609:14:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3064,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "10609:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3067,
												"mutability": "mutable",
												"name": "_user",
												"nameLocation": "10633:5:6",
												"nodeType": "VariableDeclaration",
												"scope": 3085,
												"src": "10625:13:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3066,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "10625:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "10608:31:6"
									},
									"returnParameters": {
										"id": 3069,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "10649:0:6"
									},
									"scope": 3566,
									"src": "10591:198:6",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"body": {
										"id": 3130,
										"nodeType": "Block",
										"src": "11163:278:6",
										"statements": [
											{
												"assignments": [
													3097
												],
												"declarations": [
													{
														"constant": false,
														"id": 3097,
														"mutability": "mutable",
														"name": "_rewards",
														"nameLocation": "11181:8:6",
														"nodeType": "VariableDeclaration",
														"scope": 3130,
														"src": "11173:16:6",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 3096,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "11173:7:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 3103,
												"initialValue": {
													"baseExpression": {
														"baseExpression": {
															"id": 3098,
															"name": "userRewardTokenBalances",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2622,
															"src": "11192:23:6",
															"typeDescriptions": {
																"typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$77_$_t_uint256_$_$",
																"typeString": "mapping(address => mapping(contract IERC20 => uint256))"
															}
														},
														"id": 3100,
														"indexExpression": {
															"id": 3099,
															"name": "_user",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3088,
															"src": "11216:5:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": false,
														"nodeType": "IndexAccess",
														"src": "11192:30:6",
														"typeDescriptions": {
															"typeIdentifier": "t_mapping$_t_contract$_IERC20_$77_$_t_uint256_$",
															"typeString": "mapping(contract IERC20 => uint256)"
														}
													},
													"id": 3102,
													"indexExpression": {
														"id": 3101,
														"name": "_token",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 3091,
														"src": "11223:6:6",
														"typeDescriptions": {
															"typeIdentifier": "t_contract$_IERC20_$77",
															"typeString": "contract IERC20"
														}
													},
													"isConstant": false,
													"isLValue": true,
													"isPure": false,
													"lValueRequested": false,
													"nodeType": "IndexAccess",
													"src": "11192:38:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "11173:57:6"
											},
											{
												"expression": {
													"id": 3110,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"baseExpression": {
															"baseExpression": {
																"id": 3104,
																"name": "userRewardTokenBalances",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 2622,
																"src": "11241:23:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$77_$_t_uint256_$_$",
																	"typeString": "mapping(address => mapping(contract IERC20 => uint256))"
																}
															},
															"id": 3107,
															"indexExpression": {
																"id": 3105,
																"name": "_user",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 3088,
																"src": "11265:5:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"nodeType": "IndexAccess",
															"src": "11241:30:6",
															"typeDescriptions": {
																"typeIdentifier": "t_mapping$_t_contract$_IERC20_$77_$_t_uint256_$",
																"typeString": "mapping(contract IERC20 => uint256)"
															}
														},
														"id": 3108,
														"indexExpression": {
															"id": 3106,
															"name": "_token",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3091,
															"src": "11272:6:6",
															"typeDescriptions": {
																"typeIdentifier": "t_contract$_IERC20_$77",
																"typeString": "contract IERC20"
															}
														},
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": true,
														"nodeType": "IndexAccess",
														"src": "11241:38:6",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"hexValue": "30",
														"id": 3109,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "number",
														"lValueRequested": false,
														"nodeType": "Literal",
														"src": "11282:1:6",
														"typeDescriptions": {
															"typeIdentifier": "t_rational_0_by_1",
															"typeString": "int_const 0"
														},
														"value": "0"
													},
													"src": "11241:42:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"id": 3111,
												"nodeType": "ExpressionStatement",
												"src": "11241:42:6"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 3115,
															"name": "vault",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2673,
															"src": "11317:5:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 3116,
															"name": "_user",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3088,
															"src": "11324:5:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 3117,
															"name": "_rewards",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3097,
															"src": "11331:8:6",
															"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": 3112,
															"name": "_token",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3091,
															"src": "11293:6:6",
															"typeDescriptions": {
																"typeIdentifier": "t_contract$_IERC20_$77",
																"typeString": "contract IERC20"
															}
														},
														"id": 3114,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "safeTransferFrom",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 171,
														"src": "11293:23:6",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$77_$",
															"typeString": "function (contract IERC20,address,address,uint256)"
														}
													},
													"id": 3118,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "11293:47:6",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 3119,
												"nodeType": "ExpressionStatement",
												"src": "11293:47:6"
											},
											{
												"eventCall": {
													"arguments": [
														{
															"expression": {
																"id": 3121,
																"name": "msg",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 4294967281,
																"src": "11372:3:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_magic_message",
																	"typeString": "msg"
																}
															},
															"id": 3122,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "sender",
															"nodeType": "MemberAccess",
															"src": "11372:10:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 3123,
															"name": "_user",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3088,
															"src": "11384:5:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 3124,
															"name": "_token",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3091,
															"src": "11391:6:6",
															"typeDescriptions": {
																"typeIdentifier": "t_contract$_IERC20_$77",
																"typeString": "contract IERC20"
															}
														},
														{
															"id": 3125,
															"name": "_rewards",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3097,
															"src": "11399:8:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_contract$_IERC20_$77",
																"typeString": "contract IERC20"
															},
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 3120,
														"name": "RewardsRedeemed",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 2731,
														"src": "11356:15:6",
														"typeDescriptions": {
															"typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_contract$_IERC20_$77_$_t_uint256_$returns$__$",
															"typeString": "function (address,address,contract IERC20,uint256)"
														}
													},
													"id": 3126,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "11356:52:6",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 3127,
												"nodeType": "EmitStatement",
												"src": "11351:57:6"
											},
											{
												"expression": {
													"id": 3128,
													"name": "_rewards",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 3097,
													"src": "11426:8:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"functionReturnParameters": 3095,
												"id": 3129,
												"nodeType": "Return",
												"src": "11419:15:6"
											}
										]
									},
									"documentation": {
										"id": 3086,
										"nodeType": "StructuredDocumentation",
										"src": "10795:290:6",
										"text": " @notice Redeem user rewards for a given token.\n @dev Rewards can be redeemed on behalf of a user.\n @param _user Address of the user to redeem rewards for\n @param _token Address of the token to redeem rewards for\n @return Amount of rewards redeemed"
									},
									"functionSelector": "bba06f27",
									"id": 3131,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "redeem",
									"nameLocation": "11099:6:6",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3092,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3088,
												"mutability": "mutable",
												"name": "_user",
												"nameLocation": "11114:5:6",
												"nodeType": "VariableDeclaration",
												"scope": 3131,
												"src": "11106:13:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3087,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "11106:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3091,
												"mutability": "mutable",
												"name": "_token",
												"nameLocation": "11128:6:6",
												"nodeType": "VariableDeclaration",
												"scope": 3131,
												"src": "11121:13:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_IERC20_$77",
													"typeString": "contract IERC20"
												},
												"typeName": {
													"id": 3090,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 3089,
														"name": "IERC20",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 77,
														"src": "11121:6:6"
													},
													"referencedDeclaration": 77,
													"src": "11121:6:6",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_IERC20_$77",
														"typeString": "contract IERC20"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "11105:30:6"
									},
									"returnParameters": {
										"id": 3095,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3094,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 3131,
												"src": "11154:7:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3093,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "11154:7:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "11153:9:6"
									},
									"scope": 3566,
									"src": "11090:351:6",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"body": {
										"id": 3176,
										"nodeType": "Block",
										"src": "11804:350:6",
										"statements": [
											{
												"assignments": [
													3144
												],
												"declarations": [
													{
														"constant": false,
														"id": 3144,
														"mutability": "mutable",
														"name": "_gaugeRewardTokens",
														"nameLocation": "11835:18:6",
														"nodeType": "VariableDeclaration",
														"scope": 3176,
														"src": "11814:39:6",
														"stateVariable": false,
														"storageLocation": "memory",
														"typeDescriptions": {
															"typeIdentifier": "t_array$_t_struct$_RewardToken_$2659_memory_ptr_$dyn_memory_ptr",
															"typeString": "struct GaugeReward.RewardToken[]"
														},
														"typeName": {
															"baseType": {
																"id": 3142,
																"nodeType": "UserDefinedTypeName",
																"pathNode": {
																	"id": 3141,
																	"name": "RewardToken",
																	"nodeType": "IdentifierPath",
																	"referencedDeclaration": 2659,
																	"src": "11814:11:6"
																},
																"referencedDeclaration": 2659,
																"src": "11814:11:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_RewardToken_$2659_storage_ptr",
																	"typeString": "struct GaugeReward.RewardToken"
																}
															},
															"id": 3143,
															"nodeType": "ArrayTypeName",
															"src": "11814:13:6",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_struct$_RewardToken_$2659_storage_$dyn_storage_ptr",
																"typeString": "struct GaugeReward.RewardToken[]"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 3148,
												"initialValue": {
													"baseExpression": {
														"id": 3145,
														"name": "gaugeRewardTokens",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 2666,
														"src": "11856:17:6",
														"typeDescriptions": {
															"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_RewardToken_$2659_storage_$dyn_storage_$",
															"typeString": "mapping(address => struct GaugeReward.RewardToken storage ref[] storage ref)"
														}
													},
													"id": 3147,
													"indexExpression": {
														"id": 3146,
														"name": "_gauge",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 3134,
														"src": "11874:6:6",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"isConstant": false,
													"isLValue": true,
													"isPure": false,
													"lValueRequested": false,
													"nodeType": "IndexAccess",
													"src": "11856:25:6",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_struct$_RewardToken_$2659_storage_$dyn_storage",
														"typeString": "struct GaugeReward.RewardToken storage ref[] storage ref"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "11814:67:6"
											},
											{
												"assignments": [
													3150
												],
												"declarations": [
													{
														"constant": false,
														"id": 3150,
														"mutability": "mutable",
														"name": "_gaugeRewardTokensLength",
														"nameLocation": "11899:24:6",
														"nodeType": "VariableDeclaration",
														"scope": 3176,
														"src": "11891:32:6",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 3149,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "11891:7:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 3153,
												"initialValue": {
													"expression": {
														"id": 3151,
														"name": "_gaugeRewardTokens",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 3144,
														"src": "11926:18:6",
														"typeDescriptions": {
															"typeIdentifier": "t_array$_t_struct$_RewardToken_$2659_memory_ptr_$dyn_memory_ptr",
															"typeString": "struct GaugeReward.RewardToken memory[] memory"
														}
													},
													"id": 3152,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"memberName": "length",
													"nodeType": "MemberAccess",
													"src": "11926:25:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "11891:60:6"
											},
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 3156,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 3154,
														"name": "_gaugeRewardTokensLength",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 3150,
														"src": "11966:24:6",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": ">",
													"rightExpression": {
														"hexValue": "30",
														"id": 3155,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "number",
														"lValueRequested": false,
														"nodeType": "Literal",
														"src": "11993:1:6",
														"typeDescriptions": {
															"typeIdentifier": "t_rational_0_by_1",
															"typeString": "int_const 0"
														},
														"value": "0"
													},
													"src": "11966:28:6",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"falseBody": {
													"id": 3174,
													"nodeType": "Block",
													"src": "12082:66:6",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"hexValue": "30",
																						"id": 3168,
																						"isConstant": false,
																						"isLValue": false,
																						"isPure": true,
																						"kind": "number",
																						"lValueRequested": false,
																						"nodeType": "Literal",
																						"src": "12130:1:6",
																						"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": 3167,
																					"isConstant": false,
																					"isLValue": false,
																					"isPure": true,
																					"lValueRequested": false,
																					"nodeType": "ElementaryTypeNameExpression",
																					"src": "12122:7:6",
																					"typeDescriptions": {
																						"typeIdentifier": "t_type$_t_address_$",
																						"typeString": "type(address)"
																					},
																					"typeName": {
																						"id": 3166,
																						"name": "address",
																						"nodeType": "ElementaryTypeName",
																						"src": "12122:7:6",
																						"typeDescriptions": {}
																					}
																				},
																				"id": 3169,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"kind": "typeConversion",
																				"lValueRequested": false,
																				"names": [],
																				"nodeType": "FunctionCall",
																				"src": "12122:10:6",
																				"tryCall": false,
																				"typeDescriptions": {
																					"typeIdentifier": "t_address",
																					"typeString": "address"
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_address",
																					"typeString": "address"
																				}
																			],
																			"id": 3165,
																			"name": "IERC20",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 77,
																			"src": "12115:6:6",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_contract$_IERC20_$77_$",
																				"typeString": "type(contract IERC20)"
																			}
																		},
																		"id": 3170,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "typeConversion",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "12115:18:6",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_contract$_IERC20_$77",
																			"typeString": "contract IERC20"
																		}
																	},
																	{
																		"hexValue": "30",
																		"id": 3171,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "number",
																		"lValueRequested": false,
																		"nodeType": "Literal",
																		"src": "12135:1:6",
																		"typeDescriptions": {
																			"typeIdentifier": "t_rational_0_by_1",
																			"typeString": "int_const 0"
																		},
																		"value": "0"
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_contract$_IERC20_$77",
																			"typeString": "contract IERC20"
																		},
																		{
																			"typeIdentifier": "t_rational_0_by_1",
																			"typeString": "int_const 0"
																		}
																	],
																	"id": 3164,
																	"name": "RewardToken",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2659,
																	"src": "12103:11:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_type$_t_struct$_RewardToken_$2659_storage_ptr_$",
																		"typeString": "type(struct GaugeReward.RewardToken storage pointer)"
																	}
																},
																"id": 3172,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "structConstructorCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "12103:34:6",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																	"typeString": "struct GaugeReward.RewardToken memory"
																}
															},
															"functionReturnParameters": 3139,
															"id": 3173,
															"nodeType": "Return",
															"src": "12096:41:6"
														}
													]
												},
												"id": 3175,
												"nodeType": "IfStatement",
												"src": "11962:186:6",
												"trueBody": {
													"id": 3163,
													"nodeType": "Block",
													"src": "11996:80:6",
													"statements": [
														{
															"expression": {
																"baseExpression": {
																	"id": 3157,
																	"name": "_gaugeRewardTokens",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 3144,
																	"src": "12017:18:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_array$_t_struct$_RewardToken_$2659_memory_ptr_$dyn_memory_ptr",
																		"typeString": "struct GaugeReward.RewardToken memory[] memory"
																	}
																},
																"id": 3161,
																"indexExpression": {
																	"commonType": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	},
																	"id": 3160,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"lValueRequested": false,
																	"leftExpression": {
																		"id": 3158,
																		"name": "_gaugeRewardTokensLength",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 3150,
																		"src": "12036:24:6",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		}
																	},
																	"nodeType": "BinaryOperation",
																	"operator": "-",
																	"rightExpression": {
																		"hexValue": "31",
																		"id": 3159,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "number",
																		"lValueRequested": false,
																		"nodeType": "Literal",
																		"src": "12063:1:6",
																		"typeDescriptions": {
																			"typeIdentifier": "t_rational_1_by_1",
																			"typeString": "int_const 1"
																		},
																		"value": "1"
																	},
																	"src": "12036:28:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"nodeType": "IndexAccess",
																"src": "12017:48:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																	"typeString": "struct GaugeReward.RewardToken memory"
																}
															},
															"functionReturnParameters": 3139,
															"id": 3162,
															"nodeType": "Return",
															"src": "12010:55:6"
														}
													]
												}
											}
										]
									},
									"documentation": {
										"id": 3132,
										"nodeType": "StructuredDocumentation",
										"src": "11503:208:6",
										"text": " @notice Return the current reward token for the given gauge\n @param _gauge Address of the gauge to get current reward token for\n @return Current reward token for the given gauge"
									},
									"id": 3177,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "_currentRewardToken",
									"nameLocation": "11725:19:6",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3135,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3134,
												"mutability": "mutable",
												"name": "_gauge",
												"nameLocation": "11753:6:6",
												"nodeType": "VariableDeclaration",
												"scope": 3177,
												"src": "11745:14:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3133,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "11745:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "11744:16:6"
									},
									"returnParameters": {
										"id": 3139,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3138,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 3177,
												"src": "11784:18:6",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
													"typeString": "struct GaugeReward.RewardToken"
												},
												"typeName": {
													"id": 3137,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 3136,
														"name": "RewardToken",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 2659,
														"src": "11784:11:6"
													},
													"referencedDeclaration": 2659,
													"src": "11784:11:6",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_RewardToken_$2659_storage_ptr",
														"typeString": "struct GaugeReward.RewardToken"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "11783:20:6"
									},
									"scope": 3566,
									"src": "11716:438:6",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 3197,
										"nodeType": "Block",
										"src": "12755:100:6",
										"statements": [
											{
												"expression": {
													"baseExpression": {
														"baseExpression": {
															"baseExpression": {
																"id": 3189,
																"name": "userGaugeRewardTokenLastClaimedTimestamp",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 2643,
																"src": "12772:40:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$",
																	"typeString": "mapping(address => mapping(address => mapping(address => uint256)))"
																}
															},
															"id": 3191,
															"indexExpression": {
																"id": 3190,
																"name": "_user",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 3180,
																"src": "12813:5:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"nodeType": "IndexAccess",
															"src": "12772:47:6",
															"typeDescriptions": {
																"typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
																"typeString": "mapping(address => mapping(address => uint256))"
															}
														},
														"id": 3193,
														"indexExpression": {
															"id": 3192,
															"name": "_gauge",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3182,
															"src": "12820:6:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": false,
														"nodeType": "IndexAccess",
														"src": "12772:55:6",
														"typeDescriptions": {
															"typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
															"typeString": "mapping(address => uint256)"
														}
													},
													"id": 3195,
													"indexExpression": {
														"id": 3194,
														"name": "_rewardTokenAddress",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 3184,
														"src": "12828:19:6",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"isConstant": false,
													"isLValue": true,
													"isPure": false,
													"lValueRequested": false,
													"nodeType": "IndexAccess",
													"src": "12772:76:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"functionReturnParameters": 3188,
												"id": 3196,
												"nodeType": "Return",
												"src": "12765:83:6"
											}
										]
									},
									"documentation": {
										"id": 3178,
										"nodeType": "StructuredDocumentation",
										"src": "12160:414:6",
										"text": " @notice Get user last claimed timestamp for a given gauge and reward token\n @param _user Address of the user to set last claimed timestamp for\n @param _gauge Address of the gauge to set last claimed timestamp for\n @param _rewardTokenAddress Address of the reward token to set last claimed timestamp for\n @return Last claimed timestamp for the given gauge and reward token"
									},
									"id": 3198,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "_getUserGaugeRewardTokenLastClaimedTimestamp",
									"nameLocation": "12588:44:6",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3185,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3180,
												"mutability": "mutable",
												"name": "_user",
												"nameLocation": "12650:5:6",
												"nodeType": "VariableDeclaration",
												"scope": 3198,
												"src": "12642:13:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3179,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "12642:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3182,
												"mutability": "mutable",
												"name": "_gauge",
												"nameLocation": "12673:6:6",
												"nodeType": "VariableDeclaration",
												"scope": 3198,
												"src": "12665:14:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3181,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "12665:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3184,
												"mutability": "mutable",
												"name": "_rewardTokenAddress",
												"nameLocation": "12697:19:6",
												"nodeType": "VariableDeclaration",
												"scope": 3198,
												"src": "12689:27:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3183,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "12689:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "12632:90:6"
									},
									"returnParameters": {
										"id": 3188,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3187,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 3198,
												"src": "12746:7:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3186,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "12746:7:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "12745:9:6"
									},
									"scope": 3566,
									"src": "12579:276:6",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 3222,
										"nodeType": "Block",
										"src": "13358:141:6",
										"statements": [
											{
												"expression": {
													"id": 3220,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"baseExpression": {
															"baseExpression": {
																"baseExpression": {
																	"id": 3208,
																	"name": "userGaugeRewardTokenLastClaimedTimestamp",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2643,
																	"src": "13368:40:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$",
																		"typeString": "mapping(address => mapping(address => mapping(address => uint256)))"
																	}
																},
																"id": 3212,
																"indexExpression": {
																	"id": 3209,
																	"name": "_user",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 3201,
																	"src": "13409:5:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"nodeType": "IndexAccess",
																"src": "13368:47:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
																	"typeString": "mapping(address => mapping(address => uint256))"
																}
															},
															"id": 3213,
															"indexExpression": {
																"id": 3210,
																"name": "_gauge",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 3203,
																"src": "13416:6:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"nodeType": "IndexAccess",
															"src": "13368:55:6",
															"typeDescriptions": {
																"typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
																"typeString": "mapping(address => uint256)"
															}
														},
														"id": 3214,
														"indexExpression": {
															"id": 3211,
															"name": "_rewardTokenAddress",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3205,
															"src": "13424:19:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": true,
														"nodeType": "IndexAccess",
														"src": "13368:76:6",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"arguments": [
															{
																"expression": {
																	"id": 3217,
																	"name": "block",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 4294967292,
																	"src": "13467:5:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_block",
																		"typeString": "block"
																	}
																},
																"id": 3218,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "timestamp",
																"nodeType": "MemberAccess",
																"src": "13467:15:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															}
														],
														"expression": {
															"argumentTypes": [
																{
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															],
															"id": 3216,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"lValueRequested": false,
															"nodeType": "ElementaryTypeNameExpression",
															"src": "13447:6:6",
															"typeDescriptions": {
																"typeIdentifier": "t_type$_t_uint64_$",
																"typeString": "type(uint64)"
															},
															"typeName": {
																"id": 3215,
																"name": "uint64",
																"nodeType": "ElementaryTypeName",
																"src": "13447:6:6",
																"typeDescriptions": {}
															}
														},
														"id": 3219,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"kind": "typeConversion",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "13447:45:6",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_uint64",
															"typeString": "uint64"
														}
													},
													"src": "13368:124:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"id": 3221,
												"nodeType": "ExpressionStatement",
												"src": "13368:124:6"
											}
										]
									},
									"documentation": {
										"id": 3199,
										"nodeType": "StructuredDocumentation",
										"src": "12861:339:6",
										"text": " @notice Set user last claimed timestamp for a given gauge and reward token\n @param _user Address of the user to set last claimed timestamp for\n @param _gauge Address of the gauge to set last claimed timestamp for\n @param _rewardTokenAddress Address of the reward token to set last claimed timestamp for"
									},
									"id": 3223,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "_setUserGaugeRewardTokenLastClaimedTimestamp",
									"nameLocation": "13214:44:6",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3206,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3201,
												"mutability": "mutable",
												"name": "_user",
												"nameLocation": "13276:5:6",
												"nodeType": "VariableDeclaration",
												"scope": 3223,
												"src": "13268:13:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3200,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "13268:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3203,
												"mutability": "mutable",
												"name": "_gauge",
												"nameLocation": "13299:6:6",
												"nodeType": "VariableDeclaration",
												"scope": 3223,
												"src": "13291:14:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3202,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "13291:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3205,
												"mutability": "mutable",
												"name": "_rewardTokenAddress",
												"nameLocation": "13323:19:6",
												"nodeType": "VariableDeclaration",
												"scope": 3223,
												"src": "13315:27:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3204,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "13315:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "13258:90:6"
									},
									"returnParameters": {
										"id": 3207,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "13358:0:6"
									},
									"scope": 3566,
									"src": "13205:294:6",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 3374,
										"nodeType": "Block",
										"src": "14171:2098:6",
										"statements": [
											{
												"assignments": [
													3241
												],
												"declarations": [
													{
														"constant": false,
														"id": 3241,
														"mutability": "mutable",
														"name": "_previousExchangeRate",
														"nameLocation": "14189:21:6",
														"nodeType": "VariableDeclaration",
														"scope": 3374,
														"src": "14181:29:6",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 3240,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "14181:7:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 3253,
												"initialValue": {
													"baseExpression": {
														"baseExpression": {
															"baseExpression": {
																"baseExpression": {
																	"id": 3242,
																	"name": "userGaugeRewardTokenExchangeRates",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2634,
																	"src": "14213:33:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$77_$_t_mapping$_t_uint64_$_t_uint256_$_$_$_$",
																		"typeString": "mapping(address => mapping(address => mapping(contract IERC20 => mapping(uint64 => uint256))))"
																	}
																},
																"id": 3244,
																"indexExpression": {
																	"id": 3243,
																	"name": "_user",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 3231,
																	"src": "14247:5:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"nodeType": "IndexAccess",
																"src": "14213:40:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$77_$_t_mapping$_t_uint64_$_t_uint256_$_$_$",
																	"typeString": "mapping(address => mapping(contract IERC20 => mapping(uint64 => uint256)))"
																}
															},
															"id": 3246,
															"indexExpression": {
																"id": 3245,
																"name": "_gauge",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 3226,
																"src": "14254:6:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"nodeType": "IndexAccess",
															"src": "14213:48:6",
															"typeDescriptions": {
																"typeIdentifier": "t_mapping$_t_contract$_IERC20_$77_$_t_mapping$_t_uint64_$_t_uint256_$_$",
																"typeString": "mapping(contract IERC20 => mapping(uint64 => uint256))"
															}
														},
														"id": 3249,
														"indexExpression": {
															"expression": {
																"id": 3247,
																"name": "_rewardToken",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 3229,
																"src": "14275:12:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																	"typeString": "struct GaugeReward.RewardToken memory"
																}
															},
															"id": 3248,
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "token",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 2656,
															"src": "14275:18:6",
															"typeDescriptions": {
																"typeIdentifier": "t_contract$_IERC20_$77",
																"typeString": "contract IERC20"
															}
														},
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": false,
														"nodeType": "IndexAccess",
														"src": "14213:90:6",
														"typeDescriptions": {
															"typeIdentifier": "t_mapping$_t_uint64_$_t_uint256_$",
															"typeString": "mapping(uint64 => uint256)"
														}
													},
													"id": 3252,
													"indexExpression": {
														"expression": {
															"id": 3250,
															"name": "_rewardToken",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3229,
															"src": "14304:12:6",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																"typeString": "struct GaugeReward.RewardToken memory"
															}
														},
														"id": 3251,
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "timestamp",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 2658,
														"src": "14304:22:6",
														"typeDescriptions": {
															"typeIdentifier": "t_uint64",
															"typeString": "uint64"
														}
													},
													"isConstant": false,
													"isLValue": true,
													"isPure": false,
													"lValueRequested": false,
													"nodeType": "IndexAccess",
													"src": "14213:114:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "14181:146:6"
											},
											{
												"assignments": [
													3255
												],
												"declarations": [
													{
														"constant": false,
														"id": 3255,
														"mutability": "mutable",
														"name": "_currentExchangeRate",
														"nameLocation": "14346:20:6",
														"nodeType": "VariableDeclaration",
														"scope": 3374,
														"src": "14338:28:6",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 3254,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "14338:7:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 3265,
												"initialValue": {
													"baseExpression": {
														"baseExpression": {
															"baseExpression": {
																"id": 3256,
																"name": "gaugeRewardTokenExchangeRates",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 2653,
																"src": "14369:29:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$77_$_t_mapping$_t_uint64_$_t_uint256_$_$_$",
																	"typeString": "mapping(address => mapping(contract IERC20 => mapping(uint64 => uint256)))"
																}
															},
															"id": 3258,
															"indexExpression": {
																"id": 3257,
																"name": "_gauge",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 3226,
																"src": "14399:6:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"nodeType": "IndexAccess",
															"src": "14369:37:6",
															"typeDescriptions": {
																"typeIdentifier": "t_mapping$_t_contract$_IERC20_$77_$_t_mapping$_t_uint64_$_t_uint256_$_$",
																"typeString": "mapping(contract IERC20 => mapping(uint64 => uint256))"
															}
														},
														"id": 3261,
														"indexExpression": {
															"expression": {
																"id": 3259,
																"name": "_rewardToken",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 3229,
																"src": "14407:12:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																	"typeString": "struct GaugeReward.RewardToken memory"
																}
															},
															"id": 3260,
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "token",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 2656,
															"src": "14407:18:6",
															"typeDescriptions": {
																"typeIdentifier": "t_contract$_IERC20_$77",
																"typeString": "contract IERC20"
															}
														},
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": false,
														"nodeType": "IndexAccess",
														"src": "14369:57:6",
														"typeDescriptions": {
															"typeIdentifier": "t_mapping$_t_uint64_$_t_uint256_$",
															"typeString": "mapping(uint64 => uint256)"
														}
													},
													"id": 3264,
													"indexExpression": {
														"expression": {
															"id": 3262,
															"name": "_rewardToken",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3229,
															"src": "14440:12:6",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																"typeString": "struct GaugeReward.RewardToken memory"
															}
														},
														"id": 3263,
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "timestamp",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 2658,
														"src": "14440:22:6",
														"typeDescriptions": {
															"typeIdentifier": "t_uint64",
															"typeString": "uint64"
														}
													},
													"isConstant": false,
													"isLValue": true,
													"isPure": false,
													"lValueRequested": false,
													"nodeType": "IndexAccess",
													"src": "14369:103:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "14338:134:6"
											},
											{
												"assignments": [
													3267
												],
												"declarations": [
													{
														"constant": false,
														"id": 3267,
														"mutability": "mutable",
														"name": "_userLastClaimedTimestamp",
														"nameLocation": "14491:25:6",
														"nodeType": "VariableDeclaration",
														"scope": 3374,
														"src": "14483:33:6",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 3266,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "14483:7:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 3277,
												"initialValue": {
													"arguments": [
														{
															"id": 3269,
															"name": "_user",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3231,
															"src": "14577:5:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 3270,
															"name": "_gauge",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3226,
															"src": "14596:6:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"arguments": [
																{
																	"expression": {
																		"id": 3273,
																		"name": "_rewardToken",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 3229,
																		"src": "14624:12:6",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																			"typeString": "struct GaugeReward.RewardToken memory"
																		}
																	},
																	"id": 3274,
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "token",
																	"nodeType": "MemberAccess",
																	"referencedDeclaration": 2656,
																	"src": "14624:18:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_contract$_IERC20_$77",
																		"typeString": "contract IERC20"
																	}
																}
															],
															"expression": {
																"argumentTypes": [
																	{
																		"typeIdentifier": "t_contract$_IERC20_$77",
																		"typeString": "contract IERC20"
																	}
																],
																"id": 3272,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"nodeType": "ElementaryTypeNameExpression",
																"src": "14616:7:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_type$_t_address_$",
																	"typeString": "type(address)"
																},
																"typeName": {
																	"id": 3271,
																	"name": "address",
																	"nodeType": "ElementaryTypeName",
																	"src": "14616:7:6",
																	"typeDescriptions": {}
																}
															},
															"id": 3275,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "typeConversion",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "14616:27:6",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														],
														"id": 3268,
														"name": "_getUserGaugeRewardTokenLastClaimedTimestamp",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 3198,
														"src": "14519:44:6",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$returns$_t_uint256_$",
															"typeString": "function (address,address,address) view returns (uint256)"
														}
													},
													"id": 3276,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "14519:134:6",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "14483:170:6"
											},
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 3280,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 3278,
														"name": "_userLastClaimedTimestamp",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 3267,
														"src": "14668:25:6",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "==",
													"rightExpression": {
														"hexValue": "30",
														"id": 3279,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "number",
														"lValueRequested": false,
														"nodeType": "Literal",
														"src": "14697:1:6",
														"typeDescriptions": {
															"typeIdentifier": "t_rational_0_by_1",
															"typeString": "int_const 0"
														},
														"value": "0"
													},
													"src": "14668:30:6",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 3338,
												"nodeType": "IfStatement",
												"src": "14664:1061:6",
												"trueBody": {
													"id": 3337,
													"nodeType": "Block",
													"src": "14700:1025:6",
													"statements": [
														{
															"assignments": [
																3285
															],
															"declarations": [
																{
																	"constant": false,
																	"id": 3285,
																	"mutability": "mutable",
																	"name": "_gaugeRewardTokens",
																	"nameLocation": "14735:18:6",
																	"nodeType": "VariableDeclaration",
																	"scope": 3337,
																	"src": "14714:39:6",
																	"stateVariable": false,
																	"storageLocation": "memory",
																	"typeDescriptions": {
																		"typeIdentifier": "t_array$_t_struct$_RewardToken_$2659_memory_ptr_$dyn_memory_ptr",
																		"typeString": "struct GaugeReward.RewardToken[]"
																	},
																	"typeName": {
																		"baseType": {
																			"id": 3283,
																			"nodeType": "UserDefinedTypeName",
																			"pathNode": {
																				"id": 3282,
																				"name": "RewardToken",
																				"nodeType": "IdentifierPath",
																				"referencedDeclaration": 2659,
																				"src": "14714:11:6"
																			},
																			"referencedDeclaration": 2659,
																			"src": "14714:11:6",
																			"typeDescriptions": {
																				"typeIdentifier": "t_struct$_RewardToken_$2659_storage_ptr",
																				"typeString": "struct GaugeReward.RewardToken"
																			}
																		},
																		"id": 3284,
																		"nodeType": "ArrayTypeName",
																		"src": "14714:13:6",
																		"typeDescriptions": {
																			"typeIdentifier": "t_array$_t_struct$_RewardToken_$2659_storage_$dyn_storage_ptr",
																			"typeString": "struct GaugeReward.RewardToken[]"
																		}
																	},
																	"visibility": "internal"
																}
															],
															"id": 3289,
															"initialValue": {
																"baseExpression": {
																	"id": 3286,
																	"name": "gaugeRewardTokens",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2666,
																	"src": "14756:17:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_RewardToken_$2659_storage_$dyn_storage_$",
																		"typeString": "mapping(address => struct GaugeReward.RewardToken storage ref[] storage ref)"
																	}
																},
																"id": 3288,
																"indexExpression": {
																	"id": 3287,
																	"name": "_gauge",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 3226,
																	"src": "14774:6:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"nodeType": "IndexAccess",
																"src": "14756:25:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_array$_t_struct$_RewardToken_$2659_storage_$dyn_storage",
																	"typeString": "struct GaugeReward.RewardToken storage ref[] storage ref"
																}
															},
															"nodeType": "VariableDeclarationStatement",
															"src": "14714:67:6"
														},
														{
															"assignments": [
																3291
															],
															"declarations": [
																{
																	"constant": false,
																	"id": 3291,
																	"mutability": "mutable",
																	"name": "_gaugeRewardTokensLength",
																	"nameLocation": "14803:24:6",
																	"nodeType": "VariableDeclaration",
																	"scope": 3337,
																	"src": "14795:32:6",
																	"stateVariable": false,
																	"storageLocation": "default",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	},
																	"typeName": {
																		"id": 3290,
																		"name": "uint256",
																		"nodeType": "ElementaryTypeName",
																		"src": "14795:7:6",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		}
																	},
																	"visibility": "internal"
																}
															],
															"id": 3294,
															"initialValue": {
																"expression": {
																	"id": 3292,
																	"name": "_gaugeRewardTokens",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 3285,
																	"src": "14830:18:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_array$_t_struct$_RewardToken_$2659_memory_ptr_$dyn_memory_ptr",
																		"typeString": "struct GaugeReward.RewardToken memory[] memory"
																	}
																},
																"id": 3293,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "length",
																"nodeType": "MemberAccess",
																"src": "14830:25:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "VariableDeclarationStatement",
															"src": "14795:60:6"
														},
														{
															"condition": {
																"commonType": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																},
																"id": 3297,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 3295,
																	"name": "_gaugeRewardTokensLength",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 3291,
																	"src": "14874:24:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": ">",
																"rightExpression": {
																	"hexValue": "31",
																	"id": 3296,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "number",
																	"lValueRequested": false,
																	"nodeType": "Literal",
																	"src": "14901:1:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_rational_1_by_1",
																		"typeString": "int_const 1"
																	},
																	"value": "1"
																},
																"src": "14874:28:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"id": 3320,
															"nodeType": "IfStatement",
															"src": "14870:495:6",
															"trueBody": {
																"id": 3319,
																"nodeType": "Block",
																"src": "14904:461:6",
																"statements": [
																	{
																		"assignments": [
																			3300
																		],
																		"declarations": [
																			{
																				"constant": false,
																				"id": 3300,
																				"mutability": "mutable",
																				"name": "_previousRewardToken",
																				"nameLocation": "14941:20:6",
																				"nodeType": "VariableDeclaration",
																				"scope": 3319,
																				"src": "14922:39:6",
																				"stateVariable": false,
																				"storageLocation": "memory",
																				"typeDescriptions": {
																					"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																					"typeString": "struct GaugeReward.RewardToken"
																				},
																				"typeName": {
																					"id": 3299,
																					"nodeType": "UserDefinedTypeName",
																					"pathNode": {
																						"id": 3298,
																						"name": "RewardToken",
																						"nodeType": "IdentifierPath",
																						"referencedDeclaration": 2659,
																						"src": "14922:11:6"
																					},
																					"referencedDeclaration": 2659,
																					"src": "14922:11:6",
																					"typeDescriptions": {
																						"typeIdentifier": "t_struct$_RewardToken_$2659_storage_ptr",
																						"typeString": "struct GaugeReward.RewardToken"
																					}
																				},
																				"visibility": "internal"
																			}
																		],
																		"id": 3306,
																		"initialValue": {
																			"baseExpression": {
																				"id": 3301,
																				"name": "_gaugeRewardTokens",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 3285,
																				"src": "14964:18:6",
																				"typeDescriptions": {
																					"typeIdentifier": "t_array$_t_struct$_RewardToken_$2659_memory_ptr_$dyn_memory_ptr",
																					"typeString": "struct GaugeReward.RewardToken memory[] memory"
																				}
																			},
																			"id": 3305,
																			"indexExpression": {
																				"commonType": {
																					"typeIdentifier": "t_uint256",
																					"typeString": "uint256"
																				},
																				"id": 3304,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": false,
																				"lValueRequested": false,
																				"leftExpression": {
																					"id": 3302,
																					"name": "_gaugeRewardTokensLength",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 3291,
																					"src": "15004:24:6",
																					"typeDescriptions": {
																						"typeIdentifier": "t_uint256",
																						"typeString": "uint256"
																					}
																				},
																				"nodeType": "BinaryOperation",
																				"operator": "-",
																				"rightExpression": {
																					"hexValue": "31",
																					"id": 3303,
																					"isConstant": false,
																					"isLValue": false,
																					"isPure": true,
																					"kind": "number",
																					"lValueRequested": false,
																					"nodeType": "Literal",
																					"src": "15031:1:6",
																					"typeDescriptions": {
																						"typeIdentifier": "t_rational_1_by_1",
																						"typeString": "int_const 1"
																					},
																					"value": "1"
																				},
																				"src": "15004:28:6",
																				"typeDescriptions": {
																					"typeIdentifier": "t_uint256",
																					"typeString": "uint256"
																				}
																			},
																			"isConstant": false,
																			"isLValue": true,
																			"isPure": false,
																			"lValueRequested": false,
																			"nodeType": "IndexAccess",
																			"src": "14964:86:6",
																			"typeDescriptions": {
																				"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																				"typeString": "struct GaugeReward.RewardToken memory"
																			}
																		},
																		"nodeType": "VariableDeclarationStatement",
																		"src": "14922:128:6"
																	},
																	{
																		"expression": {
																			"id": 3317,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": false,
																			"lValueRequested": false,
																			"leftHandSide": {
																				"id": 3307,
																				"name": "_userLastClaimedTimestamp",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 3267,
																				"src": "15148:25:6",
																				"typeDescriptions": {
																					"typeIdentifier": "t_uint256",
																					"typeString": "uint256"
																				}
																			},
																			"nodeType": "Assignment",
																			"operator": "=",
																			"rightHandSide": {
																				"arguments": [
																					{
																						"id": 3309,
																						"name": "_user",
																						"nodeType": "Identifier",
																						"overloadedDeclarations": [],
																						"referencedDeclaration": 3231,
																						"src": "15242:5:6",
																						"typeDescriptions": {
																							"typeIdentifier": "t_address",
																							"typeString": "address"
																						}
																					},
																					{
																						"id": 3310,
																						"name": "_gauge",
																						"nodeType": "Identifier",
																						"overloadedDeclarations": [],
																						"referencedDeclaration": 3226,
																						"src": "15269:6:6",
																						"typeDescriptions": {
																							"typeIdentifier": "t_address",
																							"typeString": "address"
																						}
																					},
																					{
																						"arguments": [
																							{
																								"expression": {
																									"id": 3313,
																									"name": "_previousRewardToken",
																									"nodeType": "Identifier",
																									"overloadedDeclarations": [],
																									"referencedDeclaration": 3300,
																									"src": "15305:20:6",
																									"typeDescriptions": {
																										"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																										"typeString": "struct GaugeReward.RewardToken memory"
																									}
																								},
																								"id": 3314,
																								"isConstant": false,
																								"isLValue": true,
																								"isPure": false,
																								"lValueRequested": false,
																								"memberName": "token",
																								"nodeType": "MemberAccess",
																								"referencedDeclaration": 2656,
																								"src": "15305:26:6",
																								"typeDescriptions": {
																									"typeIdentifier": "t_contract$_IERC20_$77",
																									"typeString": "contract IERC20"
																								}
																							}
																						],
																						"expression": {
																							"argumentTypes": [
																								{
																									"typeIdentifier": "t_contract$_IERC20_$77",
																									"typeString": "contract IERC20"
																								}
																							],
																							"id": 3312,
																							"isConstant": false,
																							"isLValue": false,
																							"isPure": true,
																							"lValueRequested": false,
																							"nodeType": "ElementaryTypeNameExpression",
																							"src": "15297:7:6",
																							"typeDescriptions": {
																								"typeIdentifier": "t_type$_t_address_$",
																								"typeString": "type(address)"
																							},
																							"typeName": {
																								"id": 3311,
																								"name": "address",
																								"nodeType": "ElementaryTypeName",
																								"src": "15297:7:6",
																								"typeDescriptions": {}
																							}
																						},
																						"id": 3315,
																						"isConstant": false,
																						"isLValue": false,
																						"isPure": false,
																						"kind": "typeConversion",
																						"lValueRequested": false,
																						"names": [],
																						"nodeType": "FunctionCall",
																						"src": "15297:35:6",
																						"tryCall": false,
																						"typeDescriptions": {
																							"typeIdentifier": "t_address",
																							"typeString": "address"
																						}
																					}
																				],
																				"expression": {
																					"argumentTypes": [
																						{
																							"typeIdentifier": "t_address",
																							"typeString": "address"
																						},
																						{
																							"typeIdentifier": "t_address",
																							"typeString": "address"
																						},
																						{
																							"typeIdentifier": "t_address",
																							"typeString": "address"
																						}
																					],
																					"id": 3308,
																					"name": "_getUserGaugeRewardTokenLastClaimedTimestamp",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 3198,
																					"src": "15176:44:6",
																					"typeDescriptions": {
																						"typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$returns$_t_uint256_$",
																						"typeString": "function (address,address,address) view returns (uint256)"
																					}
																				},
																				"id": 3316,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": false,
																				"kind": "functionCall",
																				"lValueRequested": false,
																				"names": [],
																				"nodeType": "FunctionCall",
																				"src": "15176:174:6",
																				"tryCall": false,
																				"typeDescriptions": {
																					"typeIdentifier": "t_uint256",
																					"typeString": "uint256"
																				}
																			},
																			"src": "15148:202:6",
																			"typeDescriptions": {
																				"typeIdentifier": "t_uint256",
																				"typeString": "uint256"
																			}
																		},
																		"id": 3318,
																		"nodeType": "ExpressionStatement",
																		"src": "15148:202:6"
																	}
																]
															}
														},
														{
															"condition": {
																"commonType": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																},
																"id": 3323,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 3321,
																	"name": "_userLastClaimedTimestamp",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 3267,
																	"src": "15383:25:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "==",
																"rightExpression": {
																	"hexValue": "30",
																	"id": 3322,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "number",
																	"lValueRequested": false,
																	"nodeType": "Literal",
																	"src": "15412:1:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_rational_0_by_1",
																		"typeString": "int_const 0"
																	},
																	"value": "0"
																},
																"src": "15383:30:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"id": 3336,
															"nodeType": "IfStatement",
															"src": "15379:336:6",
															"trueBody": {
																"id": 3335,
																"nodeType": "Block",
																"src": "15415:300:6",
																"statements": [
																	{
																		"expression": {
																			"id": 3333,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": false,
																			"lValueRequested": false,
																			"leftHandSide": {
																				"id": 3324,
																				"name": "_userLastClaimedTimestamp",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 3267,
																				"src": "15523:25:6",
																				"typeDescriptions": {
																					"typeIdentifier": "t_uint256",
																					"typeString": "uint256"
																				}
																			},
																			"nodeType": "Assignment",
																			"operator": "=",
																			"rightHandSide": {
																				"arguments": [
																					{
																						"id": 3326,
																						"name": "_user",
																						"nodeType": "Identifier",
																						"overloadedDeclarations": [],
																						"referencedDeclaration": 3231,
																						"src": "15617:5:6",
																						"typeDescriptions": {
																							"typeIdentifier": "t_address",
																							"typeString": "address"
																						}
																					},
																					{
																						"id": 3327,
																						"name": "_gauge",
																						"nodeType": "Identifier",
																						"overloadedDeclarations": [],
																						"referencedDeclaration": 3226,
																						"src": "15644:6:6",
																						"typeDescriptions": {
																							"typeIdentifier": "t_address",
																							"typeString": "address"
																						}
																					},
																					{
																						"arguments": [
																							{
																								"hexValue": "30",
																								"id": 3330,
																								"isConstant": false,
																								"isLValue": false,
																								"isPure": true,
																								"kind": "number",
																								"lValueRequested": false,
																								"nodeType": "Literal",
																								"src": "15680:1:6",
																								"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": 3329,
																							"isConstant": false,
																							"isLValue": false,
																							"isPure": true,
																							"lValueRequested": false,
																							"nodeType": "ElementaryTypeNameExpression",
																							"src": "15672:7:6",
																							"typeDescriptions": {
																								"typeIdentifier": "t_type$_t_address_$",
																								"typeString": "type(address)"
																							},
																							"typeName": {
																								"id": 3328,
																								"name": "address",
																								"nodeType": "ElementaryTypeName",
																								"src": "15672:7:6",
																								"typeDescriptions": {}
																							}
																						},
																						"id": 3331,
																						"isConstant": false,
																						"isLValue": false,
																						"isPure": true,
																						"kind": "typeConversion",
																						"lValueRequested": false,
																						"names": [],
																						"nodeType": "FunctionCall",
																						"src": "15672:10:6",
																						"tryCall": false,
																						"typeDescriptions": {
																							"typeIdentifier": "t_address",
																							"typeString": "address"
																						}
																					}
																				],
																				"expression": {
																					"argumentTypes": [
																						{
																							"typeIdentifier": "t_address",
																							"typeString": "address"
																						},
																						{
																							"typeIdentifier": "t_address",
																							"typeString": "address"
																						},
																						{
																							"typeIdentifier": "t_address",
																							"typeString": "address"
																						}
																					],
																					"id": 3325,
																					"name": "_getUserGaugeRewardTokenLastClaimedTimestamp",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 3198,
																					"src": "15551:44:6",
																					"typeDescriptions": {
																						"typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$returns$_t_uint256_$",
																						"typeString": "function (address,address,address) view returns (uint256)"
																					}
																				},
																				"id": 3332,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": false,
																				"kind": "functionCall",
																				"lValueRequested": false,
																				"names": [],
																				"nodeType": "FunctionCall",
																				"src": "15551:149:6",
																				"tryCall": false,
																				"typeDescriptions": {
																					"typeIdentifier": "t_uint256",
																					"typeString": "uint256"
																				}
																			},
																			"src": "15523:177:6",
																			"typeDescriptions": {
																				"typeIdentifier": "t_uint256",
																				"typeString": "uint256"
																			}
																		},
																		"id": 3334,
																		"nodeType": "ExpressionStatement",
																		"src": "15523:177:6"
																	}
																]
															}
														}
													]
												}
											},
											{
												"assignments": [
													3340
												],
												"declarations": [
													{
														"constant": false,
														"id": 3340,
														"mutability": "mutable",
														"name": "_isEligibleForPastRewards",
														"nameLocation": "15740:25:6",
														"nodeType": "VariableDeclaration",
														"scope": 3374,
														"src": "15735:30:6",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_bool",
															"typeString": "bool"
														},
														"typeName": {
															"id": 3339,
															"name": "bool",
															"nodeType": "ElementaryTypeName",
															"src": "15735:4:6",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 3349,
												"initialValue": {
													"commonType": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													},
													"id": 3348,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"commonType": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"id": 3343,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"leftExpression": {
															"id": 3341,
															"name": "_userLastClaimedTimestamp",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3267,
															"src": "15768:25:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"nodeType": "BinaryOperation",
														"operator": ">",
														"rightExpression": {
															"hexValue": "30",
															"id": 3342,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "number",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "15796:1:6",
															"typeDescriptions": {
																"typeIdentifier": "t_rational_0_by_1",
																"typeString": "int_const 0"
															},
															"value": "0"
														},
														"src": "15768:29:6",
														"typeDescriptions": {
															"typeIdentifier": "t_bool",
															"typeString": "bool"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "&&",
													"rightExpression": {
														"commonType": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"id": 3347,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"leftExpression": {
															"expression": {
																"id": 3344,
																"name": "_rewardToken",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 3229,
																"src": "15813:12:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																	"typeString": "struct GaugeReward.RewardToken memory"
																}
															},
															"id": 3345,
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "timestamp",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 2658,
															"src": "15813:22:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint64",
																"typeString": "uint64"
															}
														},
														"nodeType": "BinaryOperation",
														"operator": ">",
														"rightExpression": {
															"id": 3346,
															"name": "_userLastClaimedTimestamp",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3267,
															"src": "15838:25:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"src": "15813:50:6",
														"typeDescriptions": {
															"typeIdentifier": "t_bool",
															"typeString": "bool"
														}
													},
													"src": "15768:95:6",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "15735:128:6"
											},
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													},
													"id": 3355,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 3351,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"nodeType": "UnaryOperation",
														"operator": "!",
														"prefix": true,
														"src": "15943:26:6",
														"subExpression": {
															"id": 3350,
															"name": "_isEligibleForPastRewards",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3340,
															"src": "15944:25:6",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														"typeDescriptions": {
															"typeIdentifier": "t_bool",
															"typeString": "bool"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "&&",
													"rightExpression": {
														"commonType": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"id": 3354,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"leftExpression": {
															"id": 3352,
															"name": "_previousExchangeRate",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3241,
															"src": "15973:21:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"nodeType": "BinaryOperation",
														"operator": "==",
														"rightExpression": {
															"hexValue": "30",
															"id": 3353,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "number",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "15998:1:6",
															"typeDescriptions": {
																"typeIdentifier": "t_rational_0_by_1",
																"typeString": "int_const 0"
															},
															"value": "0"
														},
														"src": "15973:26:6",
														"typeDescriptions": {
															"typeIdentifier": "t_bool",
															"typeString": "bool"
														}
													},
													"src": "15943:56:6",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 3361,
												"nodeType": "IfStatement",
												"src": "15939:119:6",
												"trueBody": {
													"id": 3360,
													"nodeType": "Block",
													"src": "16001:57:6",
													"statements": [
														{
															"expression": {
																"components": [
																	{
																		"hexValue": "30",
																		"id": 3356,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "number",
																		"lValueRequested": false,
																		"nodeType": "Literal",
																		"src": "16023:1:6",
																		"typeDescriptions": {
																			"typeIdentifier": "t_rational_0_by_1",
																			"typeString": "int_const 0"
																		},
																		"value": "0"
																	},
																	{
																		"id": 3357,
																		"name": "_currentExchangeRate",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 3255,
																		"src": "16026:20:6",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		}
																	}
																],
																"id": 3358,
																"isConstant": false,
																"isInlineArray": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"nodeType": "TupleExpression",
																"src": "16022:25:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_tuple$_t_rational_0_by_1_$_t_uint256_$",
																	"typeString": "tuple(int_const 0,uint256)"
																}
															},
															"functionReturnParameters": 3239,
															"id": 3359,
															"nodeType": "Return",
															"src": "16015:32:6"
														}
													]
												}
											},
											{
												"expression": {
													"components": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 3370,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"components": [
																	{
																		"commonType": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		},
																		"id": 3367,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": false,
																		"lValueRequested": false,
																		"leftExpression": {
																			"components": [
																				{
																					"commonType": {
																						"typeIdentifier": "t_uint256",
																						"typeString": "uint256"
																					},
																					"id": 3364,
																					"isConstant": false,
																					"isLValue": false,
																					"isPure": false,
																					"lValueRequested": false,
																					"leftExpression": {
																						"id": 3362,
																						"name": "_currentExchangeRate",
																						"nodeType": "Identifier",
																						"overloadedDeclarations": [],
																						"referencedDeclaration": 3255,
																						"src": "16149:20:6",
																						"typeDescriptions": {
																							"typeIdentifier": "t_uint256",
																							"typeString": "uint256"
																						}
																					},
																					"nodeType": "BinaryOperation",
																					"operator": "-",
																					"rightExpression": {
																						"id": 3363,
																						"name": "_previousExchangeRate",
																						"nodeType": "Identifier",
																						"overloadedDeclarations": [],
																						"referencedDeclaration": 3241,
																						"src": "16172:21:6",
																						"typeDescriptions": {
																							"typeIdentifier": "t_uint256",
																							"typeString": "uint256"
																						}
																					},
																					"src": "16149:44:6",
																					"typeDescriptions": {
																						"typeIdentifier": "t_uint256",
																						"typeString": "uint256"
																					}
																				}
																			],
																			"id": 3365,
																			"isConstant": false,
																			"isInlineArray": false,
																			"isLValue": false,
																			"isPure": false,
																			"lValueRequested": false,
																			"nodeType": "TupleExpression",
																			"src": "16148:46:6",
																			"typeDescriptions": {
																				"typeIdentifier": "t_uint256",
																				"typeString": "uint256"
																			}
																		},
																		"nodeType": "BinaryOperation",
																		"operator": "*",
																		"rightExpression": {
																			"id": 3366,
																			"name": "_stakeBalance",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 3233,
																			"src": "16197:13:6",
																			"typeDescriptions": {
																				"typeIdentifier": "t_uint256",
																				"typeString": "uint256"
																			}
																		},
																		"src": "16148:62:6",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		}
																	}
																],
																"id": 3368,
																"isConstant": false,
																"isInlineArray": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"nodeType": "TupleExpression",
																"src": "16147:64:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "/",
															"rightExpression": {
																"hexValue": "31653138",
																"id": 3369,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "16214:4:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_rational_1000000000000000000_by_1",
																	"typeString": "int_const 1000000000000000000"
																},
																"value": "1e18"
															},
															"src": "16147:71:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														{
															"id": 3371,
															"name": "_currentExchangeRate",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3255,
															"src": "16232:20:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"id": 3372,
													"isConstant": false,
													"isInlineArray": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"nodeType": "TupleExpression",
													"src": "16075:187:6",
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
														"typeString": "tuple(uint256,uint256)"
													}
												},
												"functionReturnParameters": 3239,
												"id": 3373,
												"nodeType": "Return",
												"src": "16068:194:6"
											}
										]
									},
									"documentation": {
										"id": 3224,
										"nodeType": "StructuredDocumentation",
										"src": "13505:451:6",
										"text": " @notice Get user rewards for a given gauge and token.\n @param _gauge Address of the gauge to get rewards for\n @param _rewardToken Reward token to get rewards for\n @param _user Address of the user to get rewards for\n @param _stakeBalance User stake balance\n @return _rewards Amount of rewards for the given gauge and token\n @return _exchangeRate Current exchange rate for the given gauge and token"
									},
									"id": 3375,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "_getRewards",
									"nameLocation": "13970:11:6",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3234,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3226,
												"mutability": "mutable",
												"name": "_gauge",
												"nameLocation": "13999:6:6",
												"nodeType": "VariableDeclaration",
												"scope": 3375,
												"src": "13991:14:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3225,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "13991:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3229,
												"mutability": "mutable",
												"name": "_rewardToken",
												"nameLocation": "14034:12:6",
												"nodeType": "VariableDeclaration",
												"scope": 3375,
												"src": "14015:31:6",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
													"typeString": "struct GaugeReward.RewardToken"
												},
												"typeName": {
													"id": 3228,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 3227,
														"name": "RewardToken",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 2659,
														"src": "14015:11:6"
													},
													"referencedDeclaration": 2659,
													"src": "14015:11:6",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_RewardToken_$2659_storage_ptr",
														"typeString": "struct GaugeReward.RewardToken"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3231,
												"mutability": "mutable",
												"name": "_user",
												"nameLocation": "14064:5:6",
												"nodeType": "VariableDeclaration",
												"scope": 3375,
												"src": "14056:13:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3230,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "14056:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3233,
												"mutability": "mutable",
												"name": "_stakeBalance",
												"nameLocation": "14087:13:6",
												"nodeType": "VariableDeclaration",
												"scope": 3375,
												"src": "14079:21:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3232,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "14079:7:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "13981:125:6"
									},
									"returnParameters": {
										"id": 3239,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3236,
												"mutability": "mutable",
												"name": "_rewards",
												"nameLocation": "14138:8:6",
												"nodeType": "VariableDeclaration",
												"scope": 3375,
												"src": "14130:16:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3235,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "14130:7:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3238,
												"mutability": "mutable",
												"name": "_exchangeRate",
												"nameLocation": "14156:13:6",
												"nodeType": "VariableDeclaration",
												"scope": 3375,
												"src": "14148:21:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3237,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "14148:7:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "14129:41:6"
									},
									"scope": 3566,
									"src": "13961:2308:6",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 3440,
										"nodeType": "Block",
										"src": "16759:549:6",
										"statements": [
											{
												"assignments": [
													3391,
													3393
												],
												"declarations": [
													{
														"constant": false,
														"id": 3391,
														"mutability": "mutable",
														"name": "_rewards",
														"nameLocation": "16778:8:6",
														"nodeType": "VariableDeclaration",
														"scope": 3440,
														"src": "16770:16:6",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 3390,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "16770:7:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													},
													{
														"constant": false,
														"id": 3393,
														"mutability": "mutable",
														"name": "_exchangeRate",
														"nameLocation": "16796:13:6",
														"nodeType": "VariableDeclaration",
														"scope": 3440,
														"src": "16788:21:6",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 3392,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "16788:7:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 3400,
												"initialValue": {
													"arguments": [
														{
															"id": 3395,
															"name": "_gauge",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3378,
															"src": "16838:6:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 3396,
															"name": "_rewardToken",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3381,
															"src": "16858:12:6",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																"typeString": "struct GaugeReward.RewardToken memory"
															}
														},
														{
															"id": 3397,
															"name": "_user",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3383,
															"src": "16884:5:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 3398,
															"name": "_stakeBalance",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3385,
															"src": "16903:13:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																"typeString": "struct GaugeReward.RewardToken memory"
															},
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 3394,
														"name": "_getRewards",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 3375,
														"src": "16813:11:6",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_view$_t_address_$_t_struct$_RewardToken_$2659_memory_ptr_$_t_address_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
															"typeString": "function (address,struct GaugeReward.RewardToken memory,address,uint256) view returns (uint256,uint256)"
														}
													},
													"id": 3399,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "16813:113:6",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
														"typeString": "tuple(uint256,uint256)"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "16769:157:6"
											},
											{
												"expression": {
													"id": 3413,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"baseExpression": {
															"baseExpression": {
																"baseExpression": {
																	"baseExpression": {
																		"id": 3401,
																		"name": "userGaugeRewardTokenExchangeRates",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 2634,
																		"src": "16937:33:6",
																		"typeDescriptions": {
																			"typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$77_$_t_mapping$_t_uint64_$_t_uint256_$_$_$_$",
																			"typeString": "mapping(address => mapping(address => mapping(contract IERC20 => mapping(uint64 => uint256))))"
																		}
																	},
																	"id": 3408,
																	"indexExpression": {
																		"id": 3402,
																		"name": "_user",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 3383,
																		"src": "16971:5:6",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	},
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"nodeType": "IndexAccess",
																	"src": "16937:40:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$77_$_t_mapping$_t_uint64_$_t_uint256_$_$_$",
																		"typeString": "mapping(address => mapping(contract IERC20 => mapping(uint64 => uint256)))"
																	}
																},
																"id": 3409,
																"indexExpression": {
																	"id": 3403,
																	"name": "_gauge",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 3378,
																	"src": "16978:6:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"nodeType": "IndexAccess",
																"src": "16937:48:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_mapping$_t_contract$_IERC20_$77_$_t_mapping$_t_uint64_$_t_uint256_$_$",
																	"typeString": "mapping(contract IERC20 => mapping(uint64 => uint256))"
																}
															},
															"id": 3410,
															"indexExpression": {
																"expression": {
																	"id": 3404,
																	"name": "_rewardToken",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 3381,
																	"src": "16986:12:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																		"typeString": "struct GaugeReward.RewardToken memory"
																	}
																},
																"id": 3405,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "token",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 2656,
																"src": "16986:18:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_contract$_IERC20_$77",
																	"typeString": "contract IERC20"
																}
															},
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"nodeType": "IndexAccess",
															"src": "16937:68:6",
															"typeDescriptions": {
																"typeIdentifier": "t_mapping$_t_uint64_$_t_uint256_$",
																"typeString": "mapping(uint64 => uint256)"
															}
														},
														"id": 3411,
														"indexExpression": {
															"expression": {
																"id": 3406,
																"name": "_rewardToken",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 3381,
																"src": "17019:12:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																	"typeString": "struct GaugeReward.RewardToken memory"
																}
															},
															"id": 3407,
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "timestamp",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 2658,
															"src": "17019:22:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint64",
																"typeString": "uint64"
															}
														},
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": true,
														"nodeType": "IndexAccess",
														"src": "16937:114:6",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"id": 3412,
														"name": "_exchangeRate",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 3393,
														"src": "17054:13:6",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"src": "16937:130:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"id": 3414,
												"nodeType": "ExpressionStatement",
												"src": "16937:130:6"
											},
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 3417,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 3415,
														"name": "_rewards",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 3391,
														"src": "17082:8:6",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": ">",
													"rightExpression": {
														"hexValue": "30",
														"id": 3416,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "number",
														"lValueRequested": false,
														"nodeType": "Literal",
														"src": "17093:1:6",
														"typeDescriptions": {
															"typeIdentifier": "t_rational_0_by_1",
															"typeString": "int_const 0"
														},
														"value": "0"
													},
													"src": "17082:12:6",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 3437,
												"nodeType": "IfStatement",
												"src": "17078:198:6",
												"trueBody": {
													"id": 3436,
													"nodeType": "Block",
													"src": "17096:180:6",
													"statements": [
														{
															"expression": {
																"id": 3425,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftHandSide": {
																	"baseExpression": {
																		"baseExpression": {
																			"id": 3418,
																			"name": "userRewardTokenBalances",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 2622,
																			"src": "17110:23:6",
																			"typeDescriptions": {
																				"typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$77_$_t_uint256_$_$",
																				"typeString": "mapping(address => mapping(contract IERC20 => uint256))"
																			}
																		},
																		"id": 3422,
																		"indexExpression": {
																			"id": 3419,
																			"name": "_user",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 3383,
																			"src": "17134:5:6",
																			"typeDescriptions": {
																				"typeIdentifier": "t_address",
																				"typeString": "address"
																			}
																		},
																		"isConstant": false,
																		"isLValue": true,
																		"isPure": false,
																		"lValueRequested": false,
																		"nodeType": "IndexAccess",
																		"src": "17110:30:6",
																		"typeDescriptions": {
																			"typeIdentifier": "t_mapping$_t_contract$_IERC20_$77_$_t_uint256_$",
																			"typeString": "mapping(contract IERC20 => uint256)"
																		}
																	},
																	"id": 3423,
																	"indexExpression": {
																		"expression": {
																			"id": 3420,
																			"name": "_rewardToken",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 3381,
																			"src": "17141:12:6",
																			"typeDescriptions": {
																				"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																				"typeString": "struct GaugeReward.RewardToken memory"
																			}
																		},
																		"id": 3421,
																		"isConstant": false,
																		"isLValue": true,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "token",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 2656,
																		"src": "17141:18:6",
																		"typeDescriptions": {
																			"typeIdentifier": "t_contract$_IERC20_$77",
																			"typeString": "contract IERC20"
																		}
																	},
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": true,
																	"nodeType": "IndexAccess",
																	"src": "17110:50:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"nodeType": "Assignment",
																"operator": "+=",
																"rightHandSide": {
																	"id": 3424,
																	"name": "_rewards",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 3391,
																	"src": "17164:8:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"src": "17110:62:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"id": 3426,
															"nodeType": "ExpressionStatement",
															"src": "17110:62:6"
														},
														{
															"eventCall": {
																"arguments": [
																	{
																		"id": 3428,
																		"name": "_gauge",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 3378,
																		"src": "17206:6:6",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	},
																	{
																		"expression": {
																			"id": 3429,
																			"name": "_rewardToken",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 3381,
																			"src": "17214:12:6",
																			"typeDescriptions": {
																				"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																				"typeString": "struct GaugeReward.RewardToken memory"
																			}
																		},
																		"id": 3430,
																		"isConstant": false,
																		"isLValue": true,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "token",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 2656,
																		"src": "17214:18:6",
																		"typeDescriptions": {
																			"typeIdentifier": "t_contract$_IERC20_$77",
																			"typeString": "contract IERC20"
																		}
																	},
																	{
																		"id": 3431,
																		"name": "_user",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 3383,
																		"src": "17234:5:6",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	},
																	{
																		"id": 3432,
																		"name": "_rewards",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 3391,
																		"src": "17241:8:6",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		}
																	},
																	{
																		"id": 3433,
																		"name": "_exchangeRate",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 3393,
																		"src": "17251:13:6",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		},
																		{
																			"typeIdentifier": "t_contract$_IERC20_$77",
																			"typeString": "contract IERC20"
																		},
																		{
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		},
																		{
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		},
																		{
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		}
																	],
																	"id": 3427,
																	"name": "RewardsClaimed",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2719,
																	"src": "17191:14:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$77_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
																		"typeString": "function (address,contract IERC20,address,uint256,uint256)"
																	}
																},
																"id": 3434,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "17191:74:6",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_tuple$__$",
																	"typeString": "tuple()"
																}
															},
															"id": 3435,
															"nodeType": "EmitStatement",
															"src": "17186:79:6"
														}
													]
												}
											},
											{
												"expression": {
													"id": 3438,
													"name": "_rewards",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 3391,
													"src": "17293:8:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"functionReturnParameters": 3389,
												"id": 3439,
												"nodeType": "Return",
												"src": "17286:15:6"
											}
										]
									},
									"documentation": {
										"id": 3376,
										"nodeType": "StructuredDocumentation",
										"src": "16275:304:6",
										"text": " @notice Claim user rewards for a given gauge and token.\n @param _gauge Address of the gauge to claim rewards for\n @param _rewardToken Reward token to get rewards for\n @param _user Address of the user to claim rewards for\n @param _stakeBalance User stake balance"
									},
									"id": 3441,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "_claimRewards",
									"nameLocation": "16593:13:6",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3386,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3378,
												"mutability": "mutable",
												"name": "_gauge",
												"nameLocation": "16624:6:6",
												"nodeType": "VariableDeclaration",
												"scope": 3441,
												"src": "16616:14:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3377,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "16616:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3381,
												"mutability": "mutable",
												"name": "_rewardToken",
												"nameLocation": "16659:12:6",
												"nodeType": "VariableDeclaration",
												"scope": 3441,
												"src": "16640:31:6",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
													"typeString": "struct GaugeReward.RewardToken"
												},
												"typeName": {
													"id": 3380,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 3379,
														"name": "RewardToken",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 2659,
														"src": "16640:11:6"
													},
													"referencedDeclaration": 2659,
													"src": "16640:11:6",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_RewardToken_$2659_storage_ptr",
														"typeString": "struct GaugeReward.RewardToken"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3383,
												"mutability": "mutable",
												"name": "_user",
												"nameLocation": "16689:5:6",
												"nodeType": "VariableDeclaration",
												"scope": 3441,
												"src": "16681:13:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3382,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "16681:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3385,
												"mutability": "mutable",
												"name": "_stakeBalance",
												"nameLocation": "16712:13:6",
												"nodeType": "VariableDeclaration",
												"scope": 3441,
												"src": "16704:21:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3384,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "16704:7:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "16606:125:6"
									},
									"returnParameters": {
										"id": 3389,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3388,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 3441,
												"src": "16750:7:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3387,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "16750:7:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "16749:9:6"
									},
									"scope": 3566,
									"src": "16584:724:6",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 3471,
										"nodeType": "Block",
										"src": "17775:172:6",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"id": 3455,
															"name": "_gauge",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3444,
															"src": "17799:6:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 3456,
															"name": "_rewardToken",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3447,
															"src": "17807:12:6",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																"typeString": "struct GaugeReward.RewardToken memory"
															}
														},
														{
															"id": 3457,
															"name": "_user",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3449,
															"src": "17821:5:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 3458,
															"name": "_stakeBalance",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3451,
															"src": "17828:13:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																"typeString": "struct GaugeReward.RewardToken memory"
															},
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 3454,
														"name": "_claimRewards",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 3441,
														"src": "17785:13:6",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_struct$_RewardToken_$2659_memory_ptr_$_t_address_$_t_uint256_$returns$_t_uint256_$",
															"typeString": "function (address,struct GaugeReward.RewardToken memory,address,uint256) returns (uint256)"
														}
													},
													"id": 3459,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "17785:57:6",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"id": 3460,
												"nodeType": "ExpressionStatement",
												"src": "17785:57:6"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 3462,
															"name": "_user",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3449,
															"src": "17897:5:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 3463,
															"name": "_gauge",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3444,
															"src": "17904:6:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"arguments": [
																{
																	"expression": {
																		"id": 3466,
																		"name": "_rewardToken",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 3447,
																		"src": "17920:12:6",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																			"typeString": "struct GaugeReward.RewardToken memory"
																		}
																	},
																	"id": 3467,
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "token",
																	"nodeType": "MemberAccess",
																	"referencedDeclaration": 2656,
																	"src": "17920:18:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_contract$_IERC20_$77",
																		"typeString": "contract IERC20"
																	}
																}
															],
															"expression": {
																"argumentTypes": [
																	{
																		"typeIdentifier": "t_contract$_IERC20_$77",
																		"typeString": "contract IERC20"
																	}
																],
																"id": 3465,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"nodeType": "ElementaryTypeNameExpression",
																"src": "17912:7:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_type$_t_address_$",
																	"typeString": "type(address)"
																},
																"typeName": {
																	"id": 3464,
																	"name": "address",
																	"nodeType": "ElementaryTypeName",
																	"src": "17912:7:6",
																	"typeDescriptions": {}
																}
															},
															"id": 3468,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "typeConversion",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "17912:27:6",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														],
														"id": 3461,
														"name": "_setUserGaugeRewardTokenLastClaimedTimestamp",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 3223,
														"src": "17852:44:6",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$",
															"typeString": "function (address,address,address)"
														}
													},
													"id": 3469,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "17852:88:6",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 3470,
												"nodeType": "ExpressionStatement",
												"src": "17852:88:6"
											}
										]
									},
									"documentation": {
										"id": 3442,
										"nodeType": "StructuredDocumentation",
										"src": "17314:306:6",
										"text": " @notice Claim user rewards for a given gauge and token.\n @param _gauge Address of the gauge to claim rewards for\n @param _rewardToken Reward token to claim rewards for\n @param _user Address of the user to claim rewards for\n @param _stakeBalance User stake balance"
									},
									"id": 3472,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "_claim",
									"nameLocation": "17634:6:6",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3452,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3444,
												"mutability": "mutable",
												"name": "_gauge",
												"nameLocation": "17658:6:6",
												"nodeType": "VariableDeclaration",
												"scope": 3472,
												"src": "17650:14:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3443,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "17650:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3447,
												"mutability": "mutable",
												"name": "_rewardToken",
												"nameLocation": "17693:12:6",
												"nodeType": "VariableDeclaration",
												"scope": 3472,
												"src": "17674:31:6",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
													"typeString": "struct GaugeReward.RewardToken"
												},
												"typeName": {
													"id": 3446,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 3445,
														"name": "RewardToken",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 2659,
														"src": "17674:11:6"
													},
													"referencedDeclaration": 2659,
													"src": "17674:11:6",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_RewardToken_$2659_storage_ptr",
														"typeString": "struct GaugeReward.RewardToken"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3449,
												"mutability": "mutable",
												"name": "_user",
												"nameLocation": "17723:5:6",
												"nodeType": "VariableDeclaration",
												"scope": 3472,
												"src": "17715:13:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3448,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "17715:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3451,
												"mutability": "mutable",
												"name": "_stakeBalance",
												"nameLocation": "17746:13:6",
												"nodeType": "VariableDeclaration",
												"scope": 3472,
												"src": "17738:21:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3450,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "17738:7:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "17640:125:6"
									},
									"returnParameters": {
										"id": 3453,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "17775:0:6"
									},
									"scope": 3566,
									"src": "17625:322:6",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 3548,
										"nodeType": "Block",
										"src": "18393:818:6",
										"statements": [
											{
												"assignments": [
													3483
												],
												"declarations": [
													{
														"constant": false,
														"id": 3483,
														"mutability": "mutable",
														"name": "_gaugeRewardTokensLength",
														"nameLocation": "18411:24:6",
														"nodeType": "VariableDeclaration",
														"scope": 3548,
														"src": "18403:32:6",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 3482,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "18403:7:6",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 3488,
												"initialValue": {
													"expression": {
														"baseExpression": {
															"id": 3484,
															"name": "gaugeRewardTokens",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2666,
															"src": "18438:17:6",
															"typeDescriptions": {
																"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_RewardToken_$2659_storage_$dyn_storage_$",
																"typeString": "mapping(address => struct GaugeReward.RewardToken storage ref[] storage ref)"
															}
														},
														"id": 3486,
														"indexExpression": {
															"id": 3485,
															"name": "_gauge",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 3475,
															"src": "18456:6:6",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": false,
														"nodeType": "IndexAccess",
														"src": "18438:25:6",
														"typeDescriptions": {
															"typeIdentifier": "t_array$_t_struct$_RewardToken_$2659_storage_$dyn_storage",
															"typeString": "struct GaugeReward.RewardToken storage ref[] storage ref"
														}
													},
													"id": 3487,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"memberName": "length",
													"nodeType": "MemberAccess",
													"src": "18438:32:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "18403:67:6"
											},
											{
												"assignments": [
													3491
												],
												"declarations": [
													{
														"constant": false,
														"id": 3491,
														"mutability": "mutable",
														"name": "_rewardToken",
														"nameLocation": "18500:12:6",
														"nodeType": "VariableDeclaration",
														"scope": 3548,
														"src": "18481:31:6",
														"stateVariable": false,
														"storageLocation": "memory",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
															"typeString": "struct GaugeReward.RewardToken"
														},
														"typeName": {
															"id": 3490,
															"nodeType": "UserDefinedTypeName",
															"pathNode": {
																"id": 3489,
																"name": "RewardToken",
																"nodeType": "IdentifierPath",
																"referencedDeclaration": 2659,
																"src": "18481:11:6"
															},
															"referencedDeclaration": 2659,
															"src": "18481:11:6",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_RewardToken_$2659_storage_ptr",
																"typeString": "struct GaugeReward.RewardToken"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 3492,
												"nodeType": "VariableDeclarationStatement",
												"src": "18481:31:6"
											},
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 3495,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 3493,
														"name": "_gaugeRewardTokensLength",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 3483,
														"src": "18527:24:6",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": ">",
													"rightExpression": {
														"hexValue": "30",
														"id": 3494,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "number",
														"lValueRequested": false,
														"nodeType": "Literal",
														"src": "18554:1:6",
														"typeDescriptions": {
															"typeIdentifier": "t_rational_0_by_1",
															"typeString": "int_const 0"
														},
														"value": "0"
													},
													"src": "18527:28:6",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"falseBody": {
													"id": 3546,
													"nodeType": "Block",
													"src": "19014:191:6",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"id": 3538,
																		"name": "_user",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 3477,
																		"src": "19168:5:6",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	},
																	{
																		"id": 3539,
																		"name": "_gauge",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 3475,
																		"src": "19175:6:6",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	},
																	{
																		"arguments": [
																			{
																				"hexValue": "30",
																				"id": 3542,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"kind": "number",
																				"lValueRequested": false,
																				"nodeType": "Literal",
																				"src": "19191:1:6",
																				"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": 3541,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "19183:7:6",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_address_$",
																				"typeString": "type(address)"
																			},
																			"typeName": {
																				"id": 3540,
																				"name": "address",
																				"nodeType": "ElementaryTypeName",
																				"src": "19183:7:6",
																				"typeDescriptions": {}
																			}
																		},
																		"id": 3543,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "typeConversion",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "19183:10:6",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		},
																		{
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		},
																		{
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	],
																	"id": 3537,
																	"name": "_setUserGaugeRewardTokenLastClaimedTimestamp",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 3223,
																	"src": "19123:44:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$",
																		"typeString": "function (address,address,address)"
																	}
																},
																"id": 3544,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "19123:71:6",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_tuple$__$",
																	"typeString": "tuple()"
																}
															},
															"id": 3545,
															"nodeType": "ExpressionStatement",
															"src": "19123:71:6"
														}
													]
												},
												"id": 3547,
												"nodeType": "IfStatement",
												"src": "18523:682:6",
												"trueBody": {
													"id": 3536,
													"nodeType": "Block",
													"src": "18557:451:6",
													"statements": [
														{
															"assignments": [
																3497
															],
															"declarations": [
																{
																	"constant": false,
																	"id": 3497,
																	"mutability": "mutable",
																	"name": "i",
																	"nameLocation": "18579:1:6",
																	"nodeType": "VariableDeclaration",
																	"scope": 3536,
																	"src": "18571:9:6",
																	"stateVariable": false,
																	"storageLocation": "default",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	},
																	"typeName": {
																		"id": 3496,
																		"name": "uint256",
																		"nodeType": "ElementaryTypeName",
																		"src": "18571:7:6",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		}
																	},
																	"visibility": "internal"
																}
															],
															"id": 3499,
															"initialValue": {
																"id": 3498,
																"name": "_gaugeRewardTokensLength",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 3483,
																"src": "18583:24:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "VariableDeclarationStatement",
															"src": "18571:36:6"
														},
														{
															"body": {
																"id": 3534,
																"nodeType": "Block",
																"src": "18636:362:6",
																"statements": [
																	{
																		"expression": {
																			"id": 3507,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": false,
																			"lValueRequested": false,
																			"leftHandSide": {
																				"id": 3503,
																				"name": "i",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 3497,
																				"src": "18654:1:6",
																				"typeDescriptions": {
																					"typeIdentifier": "t_uint256",
																					"typeString": "uint256"
																				}
																			},
																			"nodeType": "Assignment",
																			"operator": "=",
																			"rightHandSide": {
																				"commonType": {
																					"typeIdentifier": "t_uint256",
																					"typeString": "uint256"
																				},
																				"id": 3506,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": false,
																				"lValueRequested": false,
																				"leftExpression": {
																					"id": 3504,
																					"name": "i",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 3497,
																					"src": "18658:1:6",
																					"typeDescriptions": {
																						"typeIdentifier": "t_uint256",
																						"typeString": "uint256"
																					}
																				},
																				"nodeType": "BinaryOperation",
																				"operator": "-",
																				"rightExpression": {
																					"hexValue": "31",
																					"id": 3505,
																					"isConstant": false,
																					"isLValue": false,
																					"isPure": true,
																					"kind": "number",
																					"lValueRequested": false,
																					"nodeType": "Literal",
																					"src": "18662:1:6",
																					"typeDescriptions": {
																						"typeIdentifier": "t_rational_1_by_1",
																						"typeString": "int_const 1"
																					},
																					"value": "1"
																				},
																				"src": "18658:5:6",
																				"typeDescriptions": {
																					"typeIdentifier": "t_uint256",
																					"typeString": "uint256"
																				}
																			},
																			"src": "18654:9:6",
																			"typeDescriptions": {
																				"typeIdentifier": "t_uint256",
																				"typeString": "uint256"
																			}
																		},
																		"id": 3508,
																		"nodeType": "ExpressionStatement",
																		"src": "18654:9:6"
																	},
																	{
																		"expression": {
																			"id": 3515,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": false,
																			"lValueRequested": false,
																			"leftHandSide": {
																				"id": 3509,
																				"name": "_rewardToken",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 3491,
																				"src": "18681:12:6",
																				"typeDescriptions": {
																					"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																					"typeString": "struct GaugeReward.RewardToken memory"
																				}
																			},
																			"nodeType": "Assignment",
																			"operator": "=",
																			"rightHandSide": {
																				"baseExpression": {
																					"baseExpression": {
																						"id": 3510,
																						"name": "gaugeRewardTokens",
																						"nodeType": "Identifier",
																						"overloadedDeclarations": [],
																						"referencedDeclaration": 2666,
																						"src": "18696:17:6",
																						"typeDescriptions": {
																							"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_RewardToken_$2659_storage_$dyn_storage_$",
																							"typeString": "mapping(address => struct GaugeReward.RewardToken storage ref[] storage ref)"
																						}
																					},
																					"id": 3512,
																					"indexExpression": {
																						"id": 3511,
																						"name": "_gauge",
																						"nodeType": "Identifier",
																						"overloadedDeclarations": [],
																						"referencedDeclaration": 3475,
																						"src": "18714:6:6",
																						"typeDescriptions": {
																							"typeIdentifier": "t_address",
																							"typeString": "address"
																						}
																					},
																					"isConstant": false,
																					"isLValue": true,
																					"isPure": false,
																					"lValueRequested": false,
																					"nodeType": "IndexAccess",
																					"src": "18696:25:6",
																					"typeDescriptions": {
																						"typeIdentifier": "t_array$_t_struct$_RewardToken_$2659_storage_$dyn_storage",
																						"typeString": "struct GaugeReward.RewardToken storage ref[] storage ref"
																					}
																				},
																				"id": 3514,
																				"indexExpression": {
																					"id": 3513,
																					"name": "i",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 3497,
																					"src": "18722:1:6",
																					"typeDescriptions": {
																						"typeIdentifier": "t_uint256",
																						"typeString": "uint256"
																					}
																				},
																				"isConstant": false,
																				"isLValue": true,
																				"isPure": false,
																				"lValueRequested": false,
																				"nodeType": "IndexAccess",
																				"src": "18696:28:6",
																				"typeDescriptions": {
																					"typeIdentifier": "t_struct$_RewardToken_$2659_storage",
																					"typeString": "struct GaugeReward.RewardToken storage ref"
																				}
																			},
																			"src": "18681:43:6",
																			"typeDescriptions": {
																				"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																				"typeString": "struct GaugeReward.RewardToken memory"
																			}
																		},
																		"id": 3516,
																		"nodeType": "ExpressionStatement",
																		"src": "18681:43:6"
																	},
																	{
																		"expression": {
																			"arguments": [
																				{
																					"id": 3518,
																					"name": "_gauge",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 3475,
																					"src": "18756:6:6",
																					"typeDescriptions": {
																						"typeIdentifier": "t_address",
																						"typeString": "address"
																					}
																				},
																				{
																					"id": 3519,
																					"name": "_rewardToken",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 3491,
																					"src": "18764:12:6",
																					"typeDescriptions": {
																						"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																						"typeString": "struct GaugeReward.RewardToken memory"
																					}
																				},
																				{
																					"id": 3520,
																					"name": "_user",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 3477,
																					"src": "18778:5:6",
																					"typeDescriptions": {
																						"typeIdentifier": "t_address",
																						"typeString": "address"
																					}
																				},
																				{
																					"id": 3521,
																					"name": "_stakeBalance",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 3479,
																					"src": "18785:13:6",
																					"typeDescriptions": {
																						"typeIdentifier": "t_uint256",
																						"typeString": "uint256"
																					}
																				}
																			],
																			"expression": {
																				"argumentTypes": [
																					{
																						"typeIdentifier": "t_address",
																						"typeString": "address"
																					},
																					{
																						"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																						"typeString": "struct GaugeReward.RewardToken memory"
																					},
																					{
																						"typeIdentifier": "t_address",
																						"typeString": "address"
																					},
																					{
																						"typeIdentifier": "t_uint256",
																						"typeString": "uint256"
																					}
																				],
																				"id": 3517,
																				"name": "_claimRewards",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 3441,
																				"src": "18742:13:6",
																				"typeDescriptions": {
																					"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_struct$_RewardToken_$2659_memory_ptr_$_t_address_$_t_uint256_$returns$_t_uint256_$",
																					"typeString": "function (address,struct GaugeReward.RewardToken memory,address,uint256) returns (uint256)"
																				}
																			},
																			"id": 3522,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": false,
																			"kind": "functionCall",
																			"lValueRequested": false,
																			"names": [],
																			"nodeType": "FunctionCall",
																			"src": "18742:57:6",
																			"tryCall": false,
																			"typeDescriptions": {
																				"typeIdentifier": "t_uint256",
																				"typeString": "uint256"
																			}
																		},
																		"id": 3523,
																		"nodeType": "ExpressionStatement",
																		"src": "18742:57:6"
																	},
																	{
																		"expression": {
																			"arguments": [
																				{
																					"id": 3525,
																					"name": "_user",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 3477,
																					"src": "18883:5:6",
																					"typeDescriptions": {
																						"typeIdentifier": "t_address",
																						"typeString": "address"
																					}
																				},
																				{
																					"id": 3526,
																					"name": "_gauge",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 3475,
																					"src": "18910:6:6",
																					"typeDescriptions": {
																						"typeIdentifier": "t_address",
																						"typeString": "address"
																					}
																				},
																				{
																					"arguments": [
																						{
																							"expression": {
																								"id": 3529,
																								"name": "_rewardToken",
																								"nodeType": "Identifier",
																								"overloadedDeclarations": [],
																								"referencedDeclaration": 3491,
																								"src": "18946:12:6",
																								"typeDescriptions": {
																									"typeIdentifier": "t_struct$_RewardToken_$2659_memory_ptr",
																									"typeString": "struct GaugeReward.RewardToken memory"
																								}
																							},
																							"id": 3530,
																							"isConstant": false,
																							"isLValue": true,
																							"isPure": false,
																							"lValueRequested": false,
																							"memberName": "token",
																							"nodeType": "MemberAccess",
																							"referencedDeclaration": 2656,
																							"src": "18946:18:6",
																							"typeDescriptions": {
																								"typeIdentifier": "t_contract$_IERC20_$77",
																								"typeString": "contract IERC20"
																							}
																						}
																					],
																					"expression": {
																						"argumentTypes": [
																							{
																								"typeIdentifier": "t_contract$_IERC20_$77",
																								"typeString": "contract IERC20"
																							}
																						],
																						"id": 3528,
																						"isConstant": false,
																						"isLValue": false,
																						"isPure": true,
																						"lValueRequested": false,
																						"nodeType": "ElementaryTypeNameExpression",
																						"src": "18938:7:6",
																						"typeDescriptions": {
																							"typeIdentifier": "t_type$_t_address_$",
																							"typeString": "type(address)"
																						},
																						"typeName": {
																							"id": 3527,
																							"name": "address",
																							"nodeType": "ElementaryTypeName",
																							"src": "18938:7:6",
																							"typeDescriptions": {}
																						}
																					},
																					"id": 3531,
																					"isConstant": false,
																					"isLValue": false,
																					"isPure": false,
																					"kind": "typeConversion",
																					"lValueRequested": false,
																					"names": [],
																					"nodeType": "FunctionCall",
																					"src": "18938:27:6",
																					"tryCall": false,
																					"typeDescriptions": {
																						"typeIdentifier": "t_address",
																						"typeString": "address"
																					}
																				}
																			],
																			"expression": {
																				"argumentTypes": [
																					{
																						"typeIdentifier": "t_address",
																						"typeString": "address"
																					},
																					{
																						"typeIdentifier": "t_address",
																						"typeString": "address"
																					},
																					{
																						"typeIdentifier": "t_address",
																						"typeString": "address"
																					}
																				],
																				"id": 3524,
																				"name": "_setUserGaugeRewardTokenLastClaimedTimestamp",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 3223,
																				"src": "18817:44:6",
																				"typeDescriptions": {
																					"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$",
																					"typeString": "function (address,address,address)"
																				}
																			},
																			"id": 3532,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": false,
																			"kind": "functionCall",
																			"lValueRequested": false,
																			"names": [],
																			"nodeType": "FunctionCall",
																			"src": "18817:166:6",
																			"tryCall": false,
																			"typeDescriptions": {
																				"typeIdentifier": "t_tuple$__$",
																				"typeString": "tuple()"
																			}
																		},
																		"id": 3533,
																		"nodeType": "ExpressionStatement",
																		"src": "18817:166:6"
																	}
																]
															},
															"condition": {
																"commonType": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																},
																"id": 3502,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 3500,
																	"name": "i",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 3497,
																	"src": "18629:1:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": ">",
																"rightExpression": {
																	"hexValue": "30",
																	"id": 3501,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "number",
																	"lValueRequested": false,
																	"nodeType": "Literal",
																	"src": "18633:1:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_rational_0_by_1",
																		"typeString": "int_const 0"
																	},
																	"value": "0"
																},
																"src": "18629:5:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"id": 3535,
															"nodeType": "WhileStatement",
															"src": "18622:376:6"
														}
													]
												}
											}
										]
									},
									"documentation": {
										"id": 3473,
										"nodeType": "StructuredDocumentation",
										"src": "17953:323:6",
										"text": " @notice Claim all user rewards for a given gauge.\n @dev Go through all the reward tokens for the given gauge and claim rewards.\n @param _gauge Address of the gauge to claim rewards for\n @param _user Address of the user to claim rewards for\n @param _stakeBalance User stake balance"
									},
									"id": 3549,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "_claimAll",
									"nameLocation": "18290:9:6",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3480,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3475,
												"mutability": "mutable",
												"name": "_gauge",
												"nameLocation": "18317:6:6",
												"nodeType": "VariableDeclaration",
												"scope": 3549,
												"src": "18309:14:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3474,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "18309:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3477,
												"mutability": "mutable",
												"name": "_user",
												"nameLocation": "18341:5:6",
												"nodeType": "VariableDeclaration",
												"scope": 3549,
												"src": "18333:13:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3476,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "18333:7:6",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3479,
												"mutability": "mutable",
												"name": "_stakeBalance",
												"nameLocation": "18364:13:6",
												"nodeType": "VariableDeclaration",
												"scope": 3549,
												"src": "18356:21:6",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3478,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "18356:7:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "18299:84:6"
									},
									"returnParameters": {
										"id": 3481,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "18393:0:6"
									},
									"scope": 3566,
									"src": "18281:930:6",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 3564,
										"nodeType": "Block",
										"src": "19354:107:6",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															"id": 3559,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"expression": {
																	"id": 3553,
																	"name": "msg",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 4294967281,
																	"src": "19372:3:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_message",
																		"typeString": "msg"
																	}
																},
																"id": 3554,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "sender",
																"nodeType": "MemberAccess",
																"src": "19372:10:6",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "==",
															"rightExpression": {
																"arguments": [
																	{
																		"id": 3557,
																		"name": "gaugeController",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 2670,
																		"src": "19394:15:6",
																		"typeDescriptions": {
																			"typeIdentifier": "t_contract$_IGaugeController_$3664",
																			"typeString": "contract IGaugeController"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_contract$_IGaugeController_$3664",
																			"typeString": "contract IGaugeController"
																		}
																	],
																	"id": 3556,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"nodeType": "ElementaryTypeNameExpression",
																	"src": "19386:7:6",
																	"typeDescriptions": {
																		"typeIdentifier": "t_type$_t_address_$",
																		"typeString": "type(address)"
																	},
																	"typeName": {
																		"id": 3555,
																		"name": "address",
																		"nodeType": "ElementaryTypeName",
																		"src": "19386:7:6",
																		"typeDescriptions": {}
																	}
																},
																"id": 3558,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "typeConversion",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "19386:24:6",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"src": "19372:38:6",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "475265776172642f6f6e6c792d4761756765436f6e74726f6c6c6572",
															"id": 3560,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "19412:30:6",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_fa0209976ed18f66239d9b649265177d5902c97497d099e3744ef8b17544aa43",
																"typeString": "literal_string \"GReward/only-GaugeController\""
															},
															"value": "GReward/only-GaugeController"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_fa0209976ed18f66239d9b649265177d5902c97497d099e3744ef8b17544aa43",
																"typeString": "literal_string \"GReward/only-GaugeController\""
															}
														],
														"id": 3552,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "19364:7:6",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 3561,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "19364:79:6",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 3562,
												"nodeType": "ExpressionStatement",
												"src": "19364:79:6"
											},
											{
												"id": 3563,
												"nodeType": "PlaceholderStatement",
												"src": "19453:1:6"
											}
										]
									},
									"documentation": {
										"id": 3550,
										"nodeType": "StructuredDocumentation",
										"src": "19264:54:6",
										"text": "@notice Restricts call to GaugeController contract"
									},
									"id": 3565,
									"name": "onlyGaugeController",
									"nameLocation": "19332:19:6",
									"nodeType": "ModifierDefinition",
									"parameters": {
										"id": 3551,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "19351:2:6"
									},
									"src": "19323:138:6",
									"virtual": false,
									"visibility": "internal"
								}
							],
							"scope": 3567,
							"src": "743:18720:6",
							"usedErrors": []
						}
					],
					"src": "37:19427:6"
				},
				"id": 6
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/external/compound/ICompLike.sol": {
				"ast": {
					"absolutePath": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/external/compound/ICompLike.sol",
					"exportedSymbols": {
						"ICompLike": [
							3584
						],
						"IERC20": [
							77
						]
					},
					"id": 3585,
					"license": "GPL-3.0",
					"nodeType": "SourceUnit",
					"nodes": [
						{
							"id": 3568,
							"literals": [
								"solidity",
								"0.8",
								".6"
							],
							"nodeType": "PragmaDirective",
							"src": "37:22:7"
						},
						{
							"absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
							"file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
							"id": 3569,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 3585,
							"sourceUnit": 78,
							"src": "61:56:7",
							"symbolAliases": [],
							"unitAlias": ""
						},
						{
							"abstract": false,
							"baseContracts": [
								{
									"baseName": {
										"id": 3570,
										"name": "IERC20",
										"nodeType": "IdentifierPath",
										"referencedDeclaration": 77,
										"src": "142:6:7"
									},
									"id": 3571,
									"nodeType": "InheritanceSpecifier",
									"src": "142:6:7"
								}
							],
							"contractDependencies": [],
							"contractKind": "interface",
							"fullyImplemented": false,
							"id": 3584,
							"linearizedBaseContracts": [
								3584,
								77
							],
							"name": "ICompLike",
							"nameLocation": "129:9:7",
							"nodeType": "ContractDefinition",
							"nodes": [
								{
									"functionSelector": "b4b5ea57",
									"id": 3578,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "getCurrentVotes",
									"nameLocation": "164:15:7",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3574,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3573,
												"mutability": "mutable",
												"name": "account",
												"nameLocation": "188:7:7",
												"nodeType": "VariableDeclaration",
												"scope": 3578,
												"src": "180:15:7",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3572,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "180:7:7",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "179:17:7"
									},
									"returnParameters": {
										"id": 3577,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3576,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 3578,
												"src": "220:6:7",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint96",
													"typeString": "uint96"
												},
												"typeName": {
													"id": 3575,
													"name": "uint96",
													"nodeType": "ElementaryTypeName",
													"src": "220:6:7",
													"typeDescriptions": {
														"typeIdentifier": "t_uint96",
														"typeString": "uint96"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "219:8:7"
									},
									"scope": 3584,
									"src": "155:73:7",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								},
								{
									"functionSelector": "5c19a95c",
									"id": 3583,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "delegate",
									"nameLocation": "243:8:7",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3581,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3580,
												"mutability": "mutable",
												"name": "delegate",
												"nameLocation": "260:8:7",
												"nodeType": "VariableDeclaration",
												"scope": 3583,
												"src": "252:16:7",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3579,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "252:7:7",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "251:18:7"
									},
									"returnParameters": {
										"id": 3582,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "278:0:7"
									},
									"scope": 3584,
									"src": "234:45:7",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								}
							],
							"scope": 3585,
							"src": "119:162:7",
							"usedErrors": []
						}
					],
					"src": "37:245:7"
				},
				"id": 7
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IControlledToken.sol": {
				"ast": {
					"absolutePath": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IControlledToken.sol",
					"exportedSymbols": {
						"IControlledToken": [
							3623
						],
						"IERC20": [
							77
						]
					},
					"id": 3624,
					"license": "GPL-3.0",
					"nodeType": "SourceUnit",
					"nodes": [
						{
							"id": 3586,
							"literals": [
								"solidity",
								"0.8",
								".6"
							],
							"nodeType": "PragmaDirective",
							"src": "37:22:8"
						},
						{
							"absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
							"file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
							"id": 3587,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 3624,
							"sourceUnit": 78,
							"src": "61:56:8",
							"symbolAliases": [],
							"unitAlias": ""
						},
						{
							"abstract": false,
							"baseContracts": [
								{
									"baseName": {
										"id": 3589,
										"name": "IERC20",
										"nodeType": "IdentifierPath",
										"referencedDeclaration": 77,
										"src": "280:6:8"
									},
									"id": 3590,
									"nodeType": "InheritanceSpecifier",
									"src": "280:6:8"
								}
							],
							"contractDependencies": [],
							"contractKind": "interface",
							"documentation": {
								"id": 3588,
								"nodeType": "StructuredDocumentation",
								"src": "119:130:8",
								"text": "@title IControlledToken\n @author PoolTogether Inc Team\n @notice ERC20 Tokens with a controller for minting & burning."
							},
							"fullyImplemented": false,
							"id": 3623,
							"linearizedBaseContracts": [
								3623,
								77
							],
							"name": "IControlledToken",
							"nameLocation": "260:16:8",
							"nodeType": "ContractDefinition",
							"nodes": [
								{
									"documentation": {
										"id": 3591,
										"nodeType": "StructuredDocumentation",
										"src": "294:91:8",
										"text": "@notice Interface to the contract responsible for controlling mint/burn"
									},
									"functionSelector": "f77c4791",
									"id": 3596,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "controller",
									"nameLocation": "399:10:8",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3592,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "409:2:8"
									},
									"returnParameters": {
										"id": 3595,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3594,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 3596,
												"src": "435:7:8",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3593,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "435:7:8",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "434:9:8"
									},
									"scope": 3623,
									"src": "390:54:8",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 3597,
										"nodeType": "StructuredDocumentation",
										"src": "450:272:8",
										"text": " @notice Allows the controller to mint tokens for a user account\n @dev May be overridden to provide more granular control over minting\n @param user Address of the receiver of the minted tokens\n @param amount Amount of tokens to mint"
									},
									"functionSelector": "5d7b0758",
									"id": 3604,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "controllerMint",
									"nameLocation": "736:14:8",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3602,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3599,
												"mutability": "mutable",
												"name": "user",
												"nameLocation": "759:4:8",
												"nodeType": "VariableDeclaration",
												"scope": 3604,
												"src": "751:12:8",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3598,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "751:7:8",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3601,
												"mutability": "mutable",
												"name": "amount",
												"nameLocation": "773:6:8",
												"nodeType": "VariableDeclaration",
												"scope": 3604,
												"src": "765:14:8",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3600,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "765:7:8",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "750:30:8"
									},
									"returnParameters": {
										"id": 3603,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "789:0:8"
									},
									"scope": 3623,
									"src": "727:63:8",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 3605,
										"nodeType": "StructuredDocumentation",
										"src": "796:278:8",
										"text": " @notice Allows the controller to burn tokens from a user account\n @dev May be overridden to provide more granular control over burning\n @param user Address of the holder account to burn tokens from\n @param amount Amount of tokens to burn"
									},
									"functionSelector": "90596dd1",
									"id": 3612,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "controllerBurn",
									"nameLocation": "1088:14:8",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3610,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3607,
												"mutability": "mutable",
												"name": "user",
												"nameLocation": "1111:4:8",
												"nodeType": "VariableDeclaration",
												"scope": 3612,
												"src": "1103:12:8",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3606,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1103:7:8",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3609,
												"mutability": "mutable",
												"name": "amount",
												"nameLocation": "1125:6:8",
												"nodeType": "VariableDeclaration",
												"scope": 3612,
												"src": "1117:14:8",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3608,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1117:7:8",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1102:30:8"
									},
									"returnParameters": {
										"id": 3611,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "1141:0:8"
									},
									"scope": 3623,
									"src": "1079:63:8",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 3613,
										"nodeType": "StructuredDocumentation",
										"src": "1148:414:8",
										"text": " @notice Allows an operator via the controller to burn tokens on behalf of a user account\n @dev May be overridden to provide more granular control over operator-burning\n @param operator Address of the operator performing the burn action via the controller contract\n @param user Address of the holder account to burn tokens from\n @param amount Amount of tokens to burn"
									},
									"functionSelector": "631b5dfb",
									"id": 3622,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "controllerBurnFrom",
									"nameLocation": "1576:18:8",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3620,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3615,
												"mutability": "mutable",
												"name": "operator",
												"nameLocation": "1612:8:8",
												"nodeType": "VariableDeclaration",
												"scope": 3622,
												"src": "1604:16:8",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3614,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1604:7:8",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3617,
												"mutability": "mutable",
												"name": "user",
												"nameLocation": "1638:4:8",
												"nodeType": "VariableDeclaration",
												"scope": 3622,
												"src": "1630:12:8",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3616,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1630:7:8",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3619,
												"mutability": "mutable",
												"name": "amount",
												"nameLocation": "1660:6:8",
												"nodeType": "VariableDeclaration",
												"scope": 3622,
												"src": "1652:14:8",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3618,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1652:7:8",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1594:78:8"
									},
									"returnParameters": {
										"id": 3621,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "1681:0:8"
									},
									"scope": 3623,
									"src": "1567:115:8",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								}
							],
							"scope": 3624,
							"src": "250:1434:8",
							"usedErrors": []
						}
					],
					"src": "37:1648:8"
				},
				"id": 8
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IGaugeController.sol": {
				"ast": {
					"absolutePath": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IGaugeController.sol",
					"exportedSymbols": {
						"IGaugeController": [
							3664
						]
					},
					"id": 3665,
					"license": "UNLICENSED",
					"nodeType": "SourceUnit",
					"nodes": [
						{
							"id": 3625,
							"literals": [
								"solidity",
								"0.8",
								".6"
							],
							"nodeType": "PragmaDirective",
							"src": "39:22:9"
						},
						{
							"abstract": false,
							"baseContracts": [],
							"contractDependencies": [],
							"contractKind": "interface",
							"fullyImplemented": false,
							"id": 3664,
							"linearizedBaseContracts": [
								3664
							],
							"name": "IGaugeController",
							"nameLocation": "73:16:9",
							"nodeType": "ContractDefinition",
							"nodes": [
								{
									"documentation": {
										"id": 3626,
										"nodeType": "StructuredDocumentation",
										"src": "96:406:9",
										"text": " @notice Get the gauge scaled average balance between two timestamps.\n @param _gauge Address of the gauge to get the average scaled balance for\n @param _startTime Start timestamp at which to get the average scaled balance\n @param _endTime End timestamp at which to get the average scaled balance\n @return The gauge scaled average balance between the two timestamps"
									},
									"functionSelector": "638ca48f",
									"id": 3637,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "getScaledAverageGaugeBalanceBetween",
									"nameLocation": "516:35:9",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3633,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3628,
												"mutability": "mutable",
												"name": "_gauge",
												"nameLocation": "569:6:9",
												"nodeType": "VariableDeclaration",
												"scope": 3637,
												"src": "561:14:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3627,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "561:7:9",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3630,
												"mutability": "mutable",
												"name": "_startTime",
												"nameLocation": "593:10:9",
												"nodeType": "VariableDeclaration",
												"scope": 3637,
												"src": "585:18:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3629,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "585:7:9",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3632,
												"mutability": "mutable",
												"name": "_endTime",
												"nameLocation": "621:8:9",
												"nodeType": "VariableDeclaration",
												"scope": 3637,
												"src": "613:16:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3631,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "613:7:9",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "551:84:9"
									},
									"returnParameters": {
										"id": 3636,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3635,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 3637,
												"src": "659:7:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3634,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "659:7:9",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "658:9:9"
									},
									"scope": 3664,
									"src": "507:161:9",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 3638,
										"nodeType": "StructuredDocumentation",
										"src": "678:142:9",
										"text": " @notice Read Gauge balance.\n @param _gauge Address of existing Gauge\n @return uint256 GaugeTWAB.details.balance"
									},
									"functionSelector": "117d37e6",
									"id": 3645,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "getGaugeBalance",
									"nameLocation": "835:15:9",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3641,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3640,
												"mutability": "mutable",
												"name": "_gauge",
												"nameLocation": "859:6:9",
												"nodeType": "VariableDeclaration",
												"scope": 3645,
												"src": "851:14:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3639,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "851:7:9",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "850:16:9"
									},
									"returnParameters": {
										"id": 3644,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3643,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 3645,
												"src": "890:7:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3642,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "890:7:9",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "889:9:9"
									},
									"scope": 3664,
									"src": "826:73:9",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 3646,
										"nodeType": "StructuredDocumentation",
										"src": "906:158:9",
										"text": " @notice Read Gauge scaled balance.\n @param _gauge Address of existing Gauge\n @return uint256 GaugeScaleTWAB.details.balance"
									},
									"functionSelector": "dd14d961",
									"id": 3653,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "getGaugeScaleBalance",
									"nameLocation": "1079:20:9",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3649,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3648,
												"mutability": "mutable",
												"name": "_gauge",
												"nameLocation": "1108:6:9",
												"nodeType": "VariableDeclaration",
												"scope": 3653,
												"src": "1100:14:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3647,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1100:7:9",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1099:16:9"
									},
									"returnParameters": {
										"id": 3652,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3651,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 3653,
												"src": "1139:7:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3650,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1139:7:9",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1138:9:9"
									},
									"scope": 3664,
									"src": "1070:78:9",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 3654,
										"nodeType": "StructuredDocumentation",
										"src": "1156:246:9",
										"text": " @notice Get the user stake balance for a given gauge\n @param _gauge Address of the gauge to get stake balance for\n @param _user Address of the user to get stake balance for\n @return The user gauge balance"
									},
									"functionSelector": "78fa672e",
									"id": 3663,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "getUserGaugeBalance",
									"nameLocation": "1417:19:9",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3659,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3656,
												"mutability": "mutable",
												"name": "_gauge",
												"nameLocation": "1445:6:9",
												"nodeType": "VariableDeclaration",
												"scope": 3663,
												"src": "1437:14:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3655,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1437:7:9",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3658,
												"mutability": "mutable",
												"name": "_user",
												"nameLocation": "1461:5:9",
												"nodeType": "VariableDeclaration",
												"scope": 3663,
												"src": "1453:13:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3657,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1453:7:9",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1436:31:9"
									},
									"returnParameters": {
										"id": 3662,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3661,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 3663,
												"src": "1491:7:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3660,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1491:7:9",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1490:9:9"
									},
									"scope": 3664,
									"src": "1408:92:9",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								}
							],
							"scope": 3665,
							"src": "63:1439:9",
							"usedErrors": []
						}
					],
					"src": "39:1463:9"
				},
				"id": 9
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IGaugeReward.sol": {
				"ast": {
					"absolutePath": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IGaugeReward.sol",
					"exportedSymbols": {
						"IGaugeReward": [
							3688
						]
					},
					"id": 3689,
					"license": "GPL-3.0",
					"nodeType": "SourceUnit",
					"nodes": [
						{
							"id": 3666,
							"literals": [
								"solidity",
								"0.8",
								".6"
							],
							"nodeType": "PragmaDirective",
							"src": "37:22:10"
						},
						{
							"abstract": false,
							"baseContracts": [],
							"contractDependencies": [],
							"contractKind": "interface",
							"documentation": {
								"id": 3667,
								"nodeType": "StructuredDocumentation",
								"src": "61:118:10",
								"text": " @title  PoolTogether V4 IGaugeReward\n @author PoolTogether Inc Team\n @notice The GaugeReward interface."
							},
							"fullyImplemented": false,
							"id": 3688,
							"linearizedBaseContracts": [
								3688
							],
							"name": "IGaugeReward",
							"nameLocation": "190:12:10",
							"nodeType": "ContractDefinition",
							"nodes": [
								{
									"documentation": {
										"id": 3668,
										"nodeType": "StructuredDocumentation",
										"src": "209:407:10",
										"text": " @notice Fallback function to call in GaugeController after a user has increased their gauge stake.\n @notice Callback function to call in GaugeController after a user has increased their gauge stake.\n @param gauge Address of the gauge to increase stake for\n @param user Address of the user to increase stake for\n @param oldStakeBalance Old stake balance of the user"
									},
									"functionSelector": "95cebcd4",
									"id": 3677,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "afterIncreaseGauge",
									"nameLocation": "630:18:10",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3675,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3670,
												"mutability": "mutable",
												"name": "gauge",
												"nameLocation": "666:5:10",
												"nodeType": "VariableDeclaration",
												"scope": 3677,
												"src": "658:13:10",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3669,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "658:7:10",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3672,
												"mutability": "mutable",
												"name": "user",
												"nameLocation": "689:4:10",
												"nodeType": "VariableDeclaration",
												"scope": 3677,
												"src": "681:12:10",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3671,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "681:7:10",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3674,
												"mutability": "mutable",
												"name": "oldStakeBalance",
												"nameLocation": "711:15:10",
												"nodeType": "VariableDeclaration",
												"scope": 3677,
												"src": "703:23:10",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3673,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "703:7:10",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "648:84:10"
									},
									"returnParameters": {
										"id": 3676,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "741:0:10"
									},
									"scope": 3688,
									"src": "621:121:10",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 3678,
										"nodeType": "StructuredDocumentation",
										"src": "748:299:10",
										"text": " @notice Callback function to call in GaugeController after a user has decreased his gauge stake.\n @param gauge Address of the gauge to decrease stake for\n @param user Address of the user to decrease stake for\n @param oldStakeBalance Old stake balance of the user"
									},
									"functionSelector": "31661930",
									"id": 3687,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "afterDecreaseGauge",
									"nameLocation": "1061:18:10",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3685,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3680,
												"mutability": "mutable",
												"name": "gauge",
												"nameLocation": "1097:5:10",
												"nodeType": "VariableDeclaration",
												"scope": 3687,
												"src": "1089:13:10",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3679,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1089:7:10",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3682,
												"mutability": "mutable",
												"name": "user",
												"nameLocation": "1120:4:10",
												"nodeType": "VariableDeclaration",
												"scope": 3687,
												"src": "1112:12:10",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3681,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1112:7:10",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3684,
												"mutability": "mutable",
												"name": "oldStakeBalance",
												"nameLocation": "1142:15:10",
												"nodeType": "VariableDeclaration",
												"scope": 3687,
												"src": "1134:23:10",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3683,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1134:7:10",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1079:84:10"
									},
									"returnParameters": {
										"id": 3686,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "1172:0:10"
									},
									"scope": 3688,
									"src": "1052:121:10",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								}
							],
							"scope": 3689,
							"src": "180:995:10",
							"usedErrors": []
						}
					],
					"src": "37:1139:10"
				},
				"id": 10
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IPrizePool.sol": {
				"ast": {
					"absolutePath": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IPrizePool.sol",
					"exportedSymbols": {
						"ExtendedSafeCastLib": [
							4290
						],
						"ICompLike": [
							3584
						],
						"IControlledToken": [
							3623
						],
						"IERC20": [
							77
						],
						"IPrizePool": [
							3970
						],
						"ITicket": [
							4186
						],
						"ObservationLib": [
							4449
						],
						"OverflowSafeComparatorLib": [
							4621
						],
						"RingBufferLib": [
							4706
						],
						"SafeCast": [
							2595
						],
						"TwabLib": [
							5456
						]
					},
					"id": 3971,
					"license": "GPL-3.0",
					"nodeType": "SourceUnit",
					"nodes": [
						{
							"id": 3690,
							"literals": [
								"solidity",
								"0.8",
								".6"
							],
							"nodeType": "PragmaDirective",
							"src": "37:22:11"
						},
						{
							"absolutePath": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/external/compound/ICompLike.sol",
							"file": "../external/compound/ICompLike.sol",
							"id": 3691,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 3971,
							"sourceUnit": 3585,
							"src": "61:44:11",
							"symbolAliases": [],
							"unitAlias": ""
						},
						{
							"absolutePath": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/ITicket.sol",
							"file": "../interfaces/ITicket.sol",
							"id": 3692,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 3971,
							"sourceUnit": 4187,
							"src": "106:35:11",
							"symbolAliases": [],
							"unitAlias": ""
						},
						{
							"abstract": false,
							"baseContracts": [],
							"contractDependencies": [],
							"contractKind": "interface",
							"fullyImplemented": false,
							"id": 3970,
							"linearizedBaseContracts": [
								3970
							],
							"name": "IPrizePool",
							"nameLocation": "153:10:11",
							"nodeType": "ContractDefinition",
							"nodes": [
								{
									"anonymous": false,
									"documentation": {
										"id": 3693,
										"nodeType": "StructuredDocumentation",
										"src": "170:53:11",
										"text": "@dev Event emitted when controlled token is added"
									},
									"id": 3698,
									"name": "ControlledTokenAdded",
									"nameLocation": "234:20:11",
									"nodeType": "EventDefinition",
									"parameters": {
										"id": 3697,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3696,
												"indexed": true,
												"mutability": "mutable",
												"name": "token",
												"nameLocation": "271:5:11",
												"nodeType": "VariableDeclaration",
												"scope": 3698,
												"src": "255:21:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_ITicket_$4186",
													"typeString": "contract ITicket"
												},
												"typeName": {
													"id": 3695,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 3694,
														"name": "ITicket",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4186,
														"src": "255:7:11"
													},
													"referencedDeclaration": 4186,
													"src": "255:7:11",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_ITicket_$4186",
														"typeString": "contract ITicket"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "254:23:11"
									},
									"src": "228:50:11"
								},
								{
									"anonymous": false,
									"id": 3702,
									"name": "AwardCaptured",
									"nameLocation": "290:13:11",
									"nodeType": "EventDefinition",
									"parameters": {
										"id": 3701,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3700,
												"indexed": false,
												"mutability": "mutable",
												"name": "amount",
												"nameLocation": "312:6:11",
												"nodeType": "VariableDeclaration",
												"scope": 3702,
												"src": "304:14:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3699,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "304:7:11",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "303:16:11"
									},
									"src": "284:36:11"
								},
								{
									"anonymous": false,
									"documentation": {
										"id": 3703,
										"nodeType": "StructuredDocumentation",
										"src": "326:48:11",
										"text": "@dev Event emitted when assets are deposited"
									},
									"id": 3714,
									"name": "Deposited",
									"nameLocation": "385:9:11",
									"nodeType": "EventDefinition",
									"parameters": {
										"id": 3713,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3705,
												"indexed": true,
												"mutability": "mutable",
												"name": "operator",
												"nameLocation": "420:8:11",
												"nodeType": "VariableDeclaration",
												"scope": 3714,
												"src": "404:24:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3704,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "404:7:11",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3707,
												"indexed": true,
												"mutability": "mutable",
												"name": "to",
												"nameLocation": "454:2:11",
												"nodeType": "VariableDeclaration",
												"scope": 3714,
												"src": "438:18:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3706,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "438:7:11",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3710,
												"indexed": true,
												"mutability": "mutable",
												"name": "token",
												"nameLocation": "482:5:11",
												"nodeType": "VariableDeclaration",
												"scope": 3714,
												"src": "466:21:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_ITicket_$4186",
													"typeString": "contract ITicket"
												},
												"typeName": {
													"id": 3709,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 3708,
														"name": "ITicket",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4186,
														"src": "466:7:11"
													},
													"referencedDeclaration": 4186,
													"src": "466:7:11",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_ITicket_$4186",
														"typeString": "contract ITicket"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3712,
												"indexed": false,
												"mutability": "mutable",
												"name": "amount",
												"nameLocation": "505:6:11",
												"nodeType": "VariableDeclaration",
												"scope": 3714,
												"src": "497:14:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3711,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "497:7:11",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "394:123:11"
									},
									"src": "379:139:11"
								},
								{
									"anonymous": false,
									"documentation": {
										"id": 3715,
										"nodeType": "StructuredDocumentation",
										"src": "524:59:11",
										"text": "@dev Event emitted when interest is awarded to a winner"
									},
									"id": 3724,
									"name": "Awarded",
									"nameLocation": "594:7:11",
									"nodeType": "EventDefinition",
									"parameters": {
										"id": 3723,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3717,
												"indexed": true,
												"mutability": "mutable",
												"name": "winner",
												"nameLocation": "618:6:11",
												"nodeType": "VariableDeclaration",
												"scope": 3724,
												"src": "602:22:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3716,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "602:7:11",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3720,
												"indexed": true,
												"mutability": "mutable",
												"name": "token",
												"nameLocation": "642:5:11",
												"nodeType": "VariableDeclaration",
												"scope": 3724,
												"src": "626:21:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_ITicket_$4186",
													"typeString": "contract ITicket"
												},
												"typeName": {
													"id": 3719,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 3718,
														"name": "ITicket",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4186,
														"src": "626:7:11"
													},
													"referencedDeclaration": 4186,
													"src": "626:7:11",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_ITicket_$4186",
														"typeString": "contract ITicket"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3722,
												"indexed": false,
												"mutability": "mutable",
												"name": "amount",
												"nameLocation": "657:6:11",
												"nodeType": "VariableDeclaration",
												"scope": 3724,
												"src": "649:14:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3721,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "649:7:11",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "601:63:11"
									},
									"src": "588:77:11"
								},
								{
									"anonymous": false,
									"documentation": {
										"id": 3725,
										"nodeType": "StructuredDocumentation",
										"src": "671:67:11",
										"text": "@dev Event emitted when external ERC20s are awarded to a winner"
									},
									"id": 3733,
									"name": "AwardedExternalERC20",
									"nameLocation": "749:20:11",
									"nodeType": "EventDefinition",
									"parameters": {
										"id": 3732,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3727,
												"indexed": true,
												"mutability": "mutable",
												"name": "winner",
												"nameLocation": "786:6:11",
												"nodeType": "VariableDeclaration",
												"scope": 3733,
												"src": "770:22:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3726,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "770:7:11",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3729,
												"indexed": true,
												"mutability": "mutable",
												"name": "token",
												"nameLocation": "810:5:11",
												"nodeType": "VariableDeclaration",
												"scope": 3733,
												"src": "794:21:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3728,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "794:7:11",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3731,
												"indexed": false,
												"mutability": "mutable",
												"name": "amount",
												"nameLocation": "825:6:11",
												"nodeType": "VariableDeclaration",
												"scope": 3733,
												"src": "817:14:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3730,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "817:7:11",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "769:63:11"
									},
									"src": "743:90:11"
								},
								{
									"anonymous": false,
									"documentation": {
										"id": 3734,
										"nodeType": "StructuredDocumentation",
										"src": "839:63:11",
										"text": "@dev Event emitted when external ERC20s are transferred out"
									},
									"id": 3742,
									"name": "TransferredExternalERC20",
									"nameLocation": "913:24:11",
									"nodeType": "EventDefinition",
									"parameters": {
										"id": 3741,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3736,
												"indexed": true,
												"mutability": "mutable",
												"name": "to",
												"nameLocation": "954:2:11",
												"nodeType": "VariableDeclaration",
												"scope": 3742,
												"src": "938:18:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3735,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "938:7:11",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3738,
												"indexed": true,
												"mutability": "mutable",
												"name": "token",
												"nameLocation": "974:5:11",
												"nodeType": "VariableDeclaration",
												"scope": 3742,
												"src": "958:21:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3737,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "958:7:11",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3740,
												"indexed": false,
												"mutability": "mutable",
												"name": "amount",
												"nameLocation": "989:6:11",
												"nodeType": "VariableDeclaration",
												"scope": 3742,
												"src": "981:14:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3739,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "981:7:11",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "937:59:11"
									},
									"src": "907:90:11"
								},
								{
									"anonymous": false,
									"documentation": {
										"id": 3743,
										"nodeType": "StructuredDocumentation",
										"src": "1003:68:11",
										"text": "@dev Event emitted when external ERC721s are awarded to a winner"
									},
									"id": 3752,
									"name": "AwardedExternalERC721",
									"nameLocation": "1082:21:11",
									"nodeType": "EventDefinition",
									"parameters": {
										"id": 3751,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3745,
												"indexed": true,
												"mutability": "mutable",
												"name": "winner",
												"nameLocation": "1120:6:11",
												"nodeType": "VariableDeclaration",
												"scope": 3752,
												"src": "1104:22:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3744,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1104:7:11",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3747,
												"indexed": true,
												"mutability": "mutable",
												"name": "token",
												"nameLocation": "1144:5:11",
												"nodeType": "VariableDeclaration",
												"scope": 3752,
												"src": "1128:21:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3746,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1128:7:11",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3750,
												"indexed": false,
												"mutability": "mutable",
												"name": "tokenIds",
												"nameLocation": "1161:8:11",
												"nodeType": "VariableDeclaration",
												"scope": 3752,
												"src": "1151:18:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
													"typeString": "uint256[]"
												},
												"typeName": {
													"baseType": {
														"id": 3748,
														"name": "uint256",
														"nodeType": "ElementaryTypeName",
														"src": "1151:7:11",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"id": 3749,
													"nodeType": "ArrayTypeName",
													"src": "1151:9:11",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
														"typeString": "uint256[]"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1103:67:11"
									},
									"src": "1076:95:11"
								},
								{
									"anonymous": false,
									"documentation": {
										"id": 3753,
										"nodeType": "StructuredDocumentation",
										"src": "1177:48:11",
										"text": "@dev Event emitted when assets are withdrawn"
									},
									"id": 3766,
									"name": "Withdrawal",
									"nameLocation": "1236:10:11",
									"nodeType": "EventDefinition",
									"parameters": {
										"id": 3765,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3755,
												"indexed": true,
												"mutability": "mutable",
												"name": "operator",
												"nameLocation": "1272:8:11",
												"nodeType": "VariableDeclaration",
												"scope": 3766,
												"src": "1256:24:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3754,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1256:7:11",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3757,
												"indexed": true,
												"mutability": "mutable",
												"name": "from",
												"nameLocation": "1306:4:11",
												"nodeType": "VariableDeclaration",
												"scope": 3766,
												"src": "1290:20:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3756,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1290:7:11",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3760,
												"indexed": true,
												"mutability": "mutable",
												"name": "token",
												"nameLocation": "1336:5:11",
												"nodeType": "VariableDeclaration",
												"scope": 3766,
												"src": "1320:21:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_ITicket_$4186",
													"typeString": "contract ITicket"
												},
												"typeName": {
													"id": 3759,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 3758,
														"name": "ITicket",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4186,
														"src": "1320:7:11"
													},
													"referencedDeclaration": 4186,
													"src": "1320:7:11",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_ITicket_$4186",
														"typeString": "contract ITicket"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3762,
												"indexed": false,
												"mutability": "mutable",
												"name": "amount",
												"nameLocation": "1359:6:11",
												"nodeType": "VariableDeclaration",
												"scope": 3766,
												"src": "1351:14:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3761,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1351:7:11",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3764,
												"indexed": false,
												"mutability": "mutable",
												"name": "redeemed",
												"nameLocation": "1383:8:11",
												"nodeType": "VariableDeclaration",
												"scope": 3766,
												"src": "1375:16:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3763,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1375:7:11",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1246:151:11"
									},
									"src": "1230:168:11"
								},
								{
									"anonymous": false,
									"documentation": {
										"id": 3767,
										"nodeType": "StructuredDocumentation",
										"src": "1404:50:11",
										"text": "@dev Event emitted when the Balance Cap is set"
									},
									"id": 3771,
									"name": "BalanceCapSet",
									"nameLocation": "1465:13:11",
									"nodeType": "EventDefinition",
									"parameters": {
										"id": 3770,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3769,
												"indexed": false,
												"mutability": "mutable",
												"name": "balanceCap",
												"nameLocation": "1487:10:11",
												"nodeType": "VariableDeclaration",
												"scope": 3771,
												"src": "1479:18:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3768,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1479:7:11",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1478:20:11"
									},
									"src": "1459:40:11"
								},
								{
									"anonymous": false,
									"documentation": {
										"id": 3772,
										"nodeType": "StructuredDocumentation",
										"src": "1505:52:11",
										"text": "@dev Event emitted when the Liquidity Cap is set"
									},
									"id": 3776,
									"name": "LiquidityCapSet",
									"nameLocation": "1568:15:11",
									"nodeType": "EventDefinition",
									"parameters": {
										"id": 3775,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3774,
												"indexed": false,
												"mutability": "mutable",
												"name": "liquidityCap",
												"nameLocation": "1592:12:11",
												"nodeType": "VariableDeclaration",
												"scope": 3776,
												"src": "1584:20:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3773,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1584:7:11",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1583:22:11"
									},
									"src": "1562:44:11"
								},
								{
									"anonymous": false,
									"documentation": {
										"id": 3777,
										"nodeType": "StructuredDocumentation",
										"src": "1612:53:11",
										"text": "@dev Event emitted when the Prize Strategy is set"
									},
									"id": 3781,
									"name": "PrizeStrategySet",
									"nameLocation": "1676:16:11",
									"nodeType": "EventDefinition",
									"parameters": {
										"id": 3780,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3779,
												"indexed": true,
												"mutability": "mutable",
												"name": "prizeStrategy",
												"nameLocation": "1709:13:11",
												"nodeType": "VariableDeclaration",
												"scope": 3781,
												"src": "1693:29:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3778,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1693:7:11",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1692:31:11"
									},
									"src": "1670:54:11"
								},
								{
									"anonymous": false,
									"documentation": {
										"id": 3782,
										"nodeType": "StructuredDocumentation",
										"src": "1730:45:11",
										"text": "@dev Event emitted when the Ticket is set"
									},
									"id": 3787,
									"name": "TicketSet",
									"nameLocation": "1786:9:11",
									"nodeType": "EventDefinition",
									"parameters": {
										"id": 3786,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3785,
												"indexed": true,
												"mutability": "mutable",
												"name": "ticket",
												"nameLocation": "1812:6:11",
												"nodeType": "VariableDeclaration",
												"scope": 3787,
												"src": "1796:22:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_ITicket_$4186",
													"typeString": "contract ITicket"
												},
												"typeName": {
													"id": 3784,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 3783,
														"name": "ITicket",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4186,
														"src": "1796:7:11"
													},
													"referencedDeclaration": 4186,
													"src": "1796:7:11",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_ITicket_$4186",
														"typeString": "contract ITicket"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1795:24:11"
									},
									"src": "1780:40:11"
								},
								{
									"anonymous": false,
									"documentation": {
										"id": 3788,
										"nodeType": "StructuredDocumentation",
										"src": "1826:75:11",
										"text": "@dev Emitted when there was an error thrown awarding an External ERC721"
									},
									"id": 3792,
									"name": "ErrorAwardingExternalERC721",
									"nameLocation": "1912:27:11",
									"nodeType": "EventDefinition",
									"parameters": {
										"id": 3791,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3790,
												"indexed": false,
												"mutability": "mutable",
												"name": "error",
												"nameLocation": "1946:5:11",
												"nodeType": "VariableDeclaration",
												"scope": 3792,
												"src": "1940:11:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 3789,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "1940:5:11",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1939:13:11"
									},
									"src": "1906:47:11"
								},
								{
									"documentation": {
										"id": 3793,
										"nodeType": "StructuredDocumentation",
										"src": "1959:187:11",
										"text": "@notice Deposit assets into the Prize Pool in exchange for tokens\n @param to The address receiving the newly minted tokens\n @param amount The amount of assets to deposit"
									},
									"functionSelector": "ffaad6a5",
									"id": 3800,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "depositTo",
									"nameLocation": "2160:9:11",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3798,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3795,
												"mutability": "mutable",
												"name": "to",
												"nameLocation": "2178:2:11",
												"nodeType": "VariableDeclaration",
												"scope": 3800,
												"src": "2170:10:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3794,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "2170:7:11",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3797,
												"mutability": "mutable",
												"name": "amount",
												"nameLocation": "2190:6:11",
												"nodeType": "VariableDeclaration",
												"scope": 3800,
												"src": "2182:14:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3796,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "2182:7:11",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2169:28:11"
									},
									"returnParameters": {
										"id": 3799,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "2206:0:11"
									},
									"scope": 3970,
									"src": "2151:56:11",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 3801,
										"nodeType": "StructuredDocumentation",
										"src": "2213:310:11",
										"text": "@notice Deposit assets into the Prize Pool in exchange for tokens,\n then sets the delegate on behalf of the caller.\n @param to The address receiving the newly minted tokens\n @param amount The amount of assets to deposit\n @param delegate The address to delegate to for the caller"
									},
									"functionSelector": "d7a169eb",
									"id": 3810,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "depositToAndDelegate",
									"nameLocation": "2537:20:11",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3808,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3803,
												"mutability": "mutable",
												"name": "to",
												"nameLocation": "2566:2:11",
												"nodeType": "VariableDeclaration",
												"scope": 3810,
												"src": "2558:10:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3802,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "2558:7:11",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3805,
												"mutability": "mutable",
												"name": "amount",
												"nameLocation": "2578:6:11",
												"nodeType": "VariableDeclaration",
												"scope": 3810,
												"src": "2570:14:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3804,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "2570:7:11",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3807,
												"mutability": "mutable",
												"name": "delegate",
												"nameLocation": "2594:8:11",
												"nodeType": "VariableDeclaration",
												"scope": 3810,
												"src": "2586:16:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3806,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "2586:7:11",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2557:46:11"
									},
									"returnParameters": {
										"id": 3809,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "2612:0:11"
									},
									"scope": 3970,
									"src": "2528:85:11",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 3811,
										"nodeType": "StructuredDocumentation",
										"src": "2619:222:11",
										"text": "@notice Withdraw assets from the Prize Pool instantly.\n @param from The address to redeem tokens from.\n @param amount The amount of tokens to redeem for assets.\n @return The actual amount withdrawn"
									},
									"functionSelector": "9470b0bd",
									"id": 3820,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "withdrawFrom",
									"nameLocation": "2855:12:11",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3816,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3813,
												"mutability": "mutable",
												"name": "from",
												"nameLocation": "2876:4:11",
												"nodeType": "VariableDeclaration",
												"scope": 3820,
												"src": "2868:12:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3812,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "2868:7:11",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3815,
												"mutability": "mutable",
												"name": "amount",
												"nameLocation": "2890:6:11",
												"nodeType": "VariableDeclaration",
												"scope": 3820,
												"src": "2882:14:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3814,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "2882:7:11",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2867:30:11"
									},
									"returnParameters": {
										"id": 3819,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3818,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 3820,
												"src": "2916:7:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3817,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "2916:7:11",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2915:9:11"
									},
									"scope": 3970,
									"src": "2846:79:11",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 3821,
										"nodeType": "StructuredDocumentation",
										"src": "2931:251:11",
										"text": "@notice Called by the prize strategy to award prizes.\n @dev The amount awarded must be less than the awardBalance()\n @param to The address of the winner that receives the award\n @param amount The amount of assets to be awarded"
									},
									"functionSelector": "5d8a776e",
									"id": 3828,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "award",
									"nameLocation": "3196:5:11",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3826,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3823,
												"mutability": "mutable",
												"name": "to",
												"nameLocation": "3210:2:11",
												"nodeType": "VariableDeclaration",
												"scope": 3828,
												"src": "3202:10:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3822,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "3202:7:11",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3825,
												"mutability": "mutable",
												"name": "amount",
												"nameLocation": "3222:6:11",
												"nodeType": "VariableDeclaration",
												"scope": 3828,
												"src": "3214:14:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3824,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "3214:7:11",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "3201:28:11"
									},
									"returnParameters": {
										"id": 3827,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "3238:0:11"
									},
									"scope": 3970,
									"src": "3187:52:11",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 3829,
										"nodeType": "StructuredDocumentation",
										"src": "3245:196:11",
										"text": "@notice Returns the balance that is available to award.\n @dev captureAwardBalance() should be called first\n @return The total amount of assets to be awarded for the current prize"
									},
									"functionSelector": "630665b4",
									"id": 3834,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "awardBalance",
									"nameLocation": "3455:12:11",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3830,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "3467:2:11"
									},
									"returnParameters": {
										"id": 3833,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3832,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 3834,
												"src": "3493:7:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3831,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "3493:7:11",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "3492:9:11"
									},
									"scope": 3970,
									"src": "3446:56:11",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 3835,
										"nodeType": "StructuredDocumentation",
										"src": "3508:199:11",
										"text": "@notice Captures any available interest as award balance.\n @dev This function also captures the reserve fees.\n @return The total amount of assets to be awarded for the current prize"
									},
									"functionSelector": "e6d8a94b",
									"id": 3840,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "captureAwardBalance",
									"nameLocation": "3721:19:11",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3836,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "3740:2:11"
									},
									"returnParameters": {
										"id": 3839,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3838,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 3840,
												"src": "3761:7:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3837,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "3761:7:11",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "3760:9:11"
									},
									"scope": 3970,
									"src": "3712:58:11",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 3841,
										"nodeType": "StructuredDocumentation",
										"src": "3776:225:11",
										"text": "@dev Checks with the Prize Pool if a specific token type may be awarded as an external prize\n @param externalToken The address of the token to check\n @return True if the token may be awarded, false otherwise"
									},
									"functionSelector": "6a3fd4f9",
									"id": 3848,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "canAwardExternal",
									"nameLocation": "4015:16:11",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3844,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3843,
												"mutability": "mutable",
												"name": "externalToken",
												"nameLocation": "4040:13:11",
												"nodeType": "VariableDeclaration",
												"scope": 3848,
												"src": "4032:21:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3842,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "4032:7:11",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "4031:23:11"
									},
									"returnParameters": {
										"id": 3847,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3846,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 3848,
												"src": "4078:4:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bool",
													"typeString": "bool"
												},
												"typeName": {
													"id": 3845,
													"name": "bool",
													"nodeType": "ElementaryTypeName",
													"src": "4078:4:11",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "4077:6:11"
									},
									"scope": 3970,
									"src": "4006:78:11",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 3849,
										"nodeType": "StructuredDocumentation",
										"src": "4197:44:11",
										"text": "@return The underlying balance of assets"
									},
									"functionSelector": "b69ef8a8",
									"id": 3854,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "balance",
									"nameLocation": "4255:7:11",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3850,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "4262:2:11"
									},
									"returnParameters": {
										"id": 3853,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3852,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 3854,
												"src": "4283:7:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3851,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "4283:7:11",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "4282:9:11"
									},
									"scope": 3970,
									"src": "4246:46:11",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 3855,
										"nodeType": "StructuredDocumentation",
										"src": "4298:104:11",
										"text": " @notice Read internal Ticket accounted balance.\n @return uint256 accountBalance"
									},
									"functionSelector": "33e5761f",
									"id": 3860,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "getAccountedBalance",
									"nameLocation": "4416:19:11",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3856,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "4435:2:11"
									},
									"returnParameters": {
										"id": 3859,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3858,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 3860,
												"src": "4461:7:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3857,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "4461:7:11",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "4460:9:11"
									},
									"scope": 3970,
									"src": "4407:63:11",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 3861,
										"nodeType": "StructuredDocumentation",
										"src": "4476:60:11",
										"text": " @notice Read internal balanceCap variable"
									},
									"functionSelector": "08234319",
									"id": 3866,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "getBalanceCap",
									"nameLocation": "4550:13:11",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3862,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "4563:2:11"
									},
									"returnParameters": {
										"id": 3865,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3864,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 3866,
												"src": "4589:7:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3863,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "4589:7:11",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "4588:9:11"
									},
									"scope": 3970,
									"src": "4541:57:11",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 3867,
										"nodeType": "StructuredDocumentation",
										"src": "4604:62:11",
										"text": " @notice Read internal liquidityCap variable"
									},
									"functionSelector": "b15a49c1",
									"id": 3872,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "getLiquidityCap",
									"nameLocation": "4680:15:11",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3868,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "4695:2:11"
									},
									"returnParameters": {
										"id": 3871,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3870,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 3872,
												"src": "4721:7:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3869,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "4721:7:11",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "4720:9:11"
									},
									"scope": 3970,
									"src": "4671:59:11",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 3873,
										"nodeType": "StructuredDocumentation",
										"src": "4736:47:11",
										"text": " @notice Read ticket variable"
									},
									"functionSelector": "c002c4d6",
									"id": 3879,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "getTicket",
									"nameLocation": "4797:9:11",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3874,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "4806:2:11"
									},
									"returnParameters": {
										"id": 3878,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3877,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 3879,
												"src": "4832:7:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_ITicket_$4186",
													"typeString": "contract ITicket"
												},
												"typeName": {
													"id": 3876,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 3875,
														"name": "ITicket",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4186,
														"src": "4832:7:11"
													},
													"referencedDeclaration": 4186,
													"src": "4832:7:11",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_ITicket_$4186",
														"typeString": "contract ITicket"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "4831:9:11"
									},
									"scope": 3970,
									"src": "4788:53:11",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 3880,
										"nodeType": "StructuredDocumentation",
										"src": "4847:46:11",
										"text": " @notice Read token variable"
									},
									"functionSelector": "21df0da7",
									"id": 3885,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "getToken",
									"nameLocation": "4907:8:11",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3881,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "4915:2:11"
									},
									"returnParameters": {
										"id": 3884,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3883,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 3885,
												"src": "4941:7:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3882,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "4941:7:11",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "4940:9:11"
									},
									"scope": 3970,
									"src": "4898:52:11",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 3886,
										"nodeType": "StructuredDocumentation",
										"src": "4956:54:11",
										"text": " @notice Read prizeStrategy variable"
									},
									"functionSelector": "d804abaf",
									"id": 3891,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "getPrizeStrategy",
									"nameLocation": "5024:16:11",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3887,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "5040:2:11"
									},
									"returnParameters": {
										"id": 3890,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3889,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 3891,
												"src": "5066:7:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3888,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "5066:7:11",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "5065:9:11"
									},
									"scope": 3970,
									"src": "5015:60:11",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 3892,
										"nodeType": "StructuredDocumentation",
										"src": "5081:205:11",
										"text": "@dev Checks if a specific token is controlled by the Prize Pool\n @param controlledToken The address of the token to check\n @return True if the token is a controlled token, false otherwise"
									},
									"functionSelector": "78b3d327",
									"id": 3900,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "isControlled",
									"nameLocation": "5300:12:11",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3896,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3895,
												"mutability": "mutable",
												"name": "controlledToken",
												"nameLocation": "5321:15:11",
												"nodeType": "VariableDeclaration",
												"scope": 3900,
												"src": "5313:23:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_ITicket_$4186",
													"typeString": "contract ITicket"
												},
												"typeName": {
													"id": 3894,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 3893,
														"name": "ITicket",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4186,
														"src": "5313:7:11"
													},
													"referencedDeclaration": 4186,
													"src": "5313:7:11",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_ITicket_$4186",
														"typeString": "contract ITicket"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "5312:25:11"
									},
									"returnParameters": {
										"id": 3899,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3898,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 3900,
												"src": "5361:4:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bool",
													"typeString": "bool"
												},
												"typeName": {
													"id": 3897,
													"name": "bool",
													"nodeType": "ElementaryTypeName",
													"src": "5361:4:11",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "5360:6:11"
									},
									"scope": 3970,
									"src": "5291:76:11",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 3901,
										"nodeType": "StructuredDocumentation",
										"src": "5373:395:11",
										"text": "@notice Called by the Prize-Strategy to transfer out external ERC20 tokens\n @dev Used to transfer out tokens held by the Prize Pool.  Could be liquidated, or anything.\n @param to The address of the winner that receives the award\n @param externalToken The address of the external asset token being awarded\n @param amount The amount of external assets to be awarded"
									},
									"functionSelector": "13f55e39",
									"id": 3910,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "transferExternalERC20",
									"nameLocation": "5782:21:11",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3908,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3903,
												"mutability": "mutable",
												"name": "to",
												"nameLocation": "5821:2:11",
												"nodeType": "VariableDeclaration",
												"scope": 3910,
												"src": "5813:10:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3902,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "5813:7:11",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3905,
												"mutability": "mutable",
												"name": "externalToken",
												"nameLocation": "5841:13:11",
												"nodeType": "VariableDeclaration",
												"scope": 3910,
												"src": "5833:21:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3904,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "5833:7:11",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3907,
												"mutability": "mutable",
												"name": "amount",
												"nameLocation": "5872:6:11",
												"nodeType": "VariableDeclaration",
												"scope": 3910,
												"src": "5864:14:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3906,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "5864:7:11",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "5803:81:11"
									},
									"returnParameters": {
										"id": 3909,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "5893:0:11"
									},
									"scope": 3970,
									"src": "5773:121:11",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 3911,
										"nodeType": "StructuredDocumentation",
										"src": "5900:359:11",
										"text": "@notice Called by the Prize-Strategy to award external ERC20 prizes\n @dev Used to award any arbitrary tokens held by the Prize Pool\n @param to The address of the winner that receives the award\n @param amount The amount of external assets to be awarded\n @param externalToken The address of the external asset token being awarded"
									},
									"functionSelector": "2b0ab144",
									"id": 3920,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "awardExternalERC20",
									"nameLocation": "6273:18:11",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3918,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3913,
												"mutability": "mutable",
												"name": "to",
												"nameLocation": "6309:2:11",
												"nodeType": "VariableDeclaration",
												"scope": 3920,
												"src": "6301:10:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3912,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "6301:7:11",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3915,
												"mutability": "mutable",
												"name": "externalToken",
												"nameLocation": "6329:13:11",
												"nodeType": "VariableDeclaration",
												"scope": 3920,
												"src": "6321:21:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3914,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "6321:7:11",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3917,
												"mutability": "mutable",
												"name": "amount",
												"nameLocation": "6360:6:11",
												"nodeType": "VariableDeclaration",
												"scope": 3920,
												"src": "6352:14:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3916,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "6352:7:11",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "6291:81:11"
									},
									"returnParameters": {
										"id": 3919,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "6381:0:11"
									},
									"scope": 3970,
									"src": "6264:118:11",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 3921,
										"nodeType": "StructuredDocumentation",
										"src": "6388:358:11",
										"text": "@notice Called by the prize strategy to award external ERC721 prizes\n @dev Used to award any arbitrary NFTs held by the Prize Pool\n @param to The address of the winner that receives the award\n @param externalToken The address of the external NFT token being awarded\n @param tokenIds An array of NFT Token IDs to be transferred"
									},
									"functionSelector": "16960d55",
									"id": 3931,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "awardExternalERC721",
									"nameLocation": "6760:19:11",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3929,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3923,
												"mutability": "mutable",
												"name": "to",
												"nameLocation": "6797:2:11",
												"nodeType": "VariableDeclaration",
												"scope": 3931,
												"src": "6789:10:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3922,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "6789:7:11",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3925,
												"mutability": "mutable",
												"name": "externalToken",
												"nameLocation": "6817:13:11",
												"nodeType": "VariableDeclaration",
												"scope": 3931,
												"src": "6809:21:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3924,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "6809:7:11",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3928,
												"mutability": "mutable",
												"name": "tokenIds",
												"nameLocation": "6859:8:11",
												"nodeType": "VariableDeclaration",
												"scope": 3931,
												"src": "6840:27:11",
												"stateVariable": false,
												"storageLocation": "calldata",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
													"typeString": "uint256[]"
												},
												"typeName": {
													"baseType": {
														"id": 3926,
														"name": "uint256",
														"nodeType": "ElementaryTypeName",
														"src": "6840:7:11",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"id": 3927,
													"nodeType": "ArrayTypeName",
													"src": "6840:9:11",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
														"typeString": "uint256[]"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "6779:94:11"
									},
									"returnParameters": {
										"id": 3930,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "6882:0:11"
									},
									"scope": 3970,
									"src": "6751:132:11",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 3932,
										"nodeType": "StructuredDocumentation",
										"src": "6889:395:11",
										"text": "@notice Allows the owner to set a balance cap per `token` for the pool.\n @dev If a user wins, his balance can go over the cap. He will be able to withdraw the excess but not deposit.\n @dev Needs to be called after deploying a prize pool to be able to deposit into it.\n @param balanceCap New balance cap.\n @return True if new balance cap has been successfully set."
									},
									"functionSelector": "aec9c307",
									"id": 3939,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "setBalanceCap",
									"nameLocation": "7298:13:11",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3935,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3934,
												"mutability": "mutable",
												"name": "balanceCap",
												"nameLocation": "7320:10:11",
												"nodeType": "VariableDeclaration",
												"scope": 3939,
												"src": "7312:18:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3933,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "7312:7:11",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "7311:20:11"
									},
									"returnParameters": {
										"id": 3938,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3937,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 3939,
												"src": "7350:4:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bool",
													"typeString": "bool"
												},
												"typeName": {
													"id": 3936,
													"name": "bool",
													"nodeType": "ElementaryTypeName",
													"src": "7350:4:11",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "7349:6:11"
									},
									"scope": 3970,
									"src": "7289:67:11",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 3940,
										"nodeType": "StructuredDocumentation",
										"src": "7362:162:11",
										"text": "@notice Allows the Governor to set a cap on the amount of liquidity that he pool can hold\n @param liquidityCap The new liquidity cap for the prize pool"
									},
									"functionSelector": "7b99adb1",
									"id": 3945,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "setLiquidityCap",
									"nameLocation": "7538:15:11",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3943,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3942,
												"mutability": "mutable",
												"name": "liquidityCap",
												"nameLocation": "7562:12:11",
												"nodeType": "VariableDeclaration",
												"scope": 3945,
												"src": "7554:20:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3941,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "7554:7:11",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "7553:22:11"
									},
									"returnParameters": {
										"id": 3944,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "7584:0:11"
									},
									"scope": 3970,
									"src": "7529:56:11",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 3946,
										"nodeType": "StructuredDocumentation",
										"src": "7591:137:11",
										"text": "@notice Sets the prize strategy of the prize pool.  Only callable by the owner.\n @param _prizeStrategy The new prize strategy."
									},
									"functionSelector": "91ca480e",
									"id": 3951,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "setPrizeStrategy",
									"nameLocation": "7742:16:11",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3949,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3948,
												"mutability": "mutable",
												"name": "_prizeStrategy",
												"nameLocation": "7767:14:11",
												"nodeType": "VariableDeclaration",
												"scope": 3951,
												"src": "7759:22:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3947,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "7759:7:11",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "7758:24:11"
									},
									"returnParameters": {
										"id": 3950,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "7791:0:11"
									},
									"scope": 3970,
									"src": "7733:59:11",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 3952,
										"nodeType": "StructuredDocumentation",
										"src": "7798:144:11",
										"text": "@notice Set prize pool ticket.\n @param ticket Address of the ticket to set.\n @return True if ticket has been successfully set."
									},
									"functionSelector": "1c65c78b",
									"id": 3960,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "setTicket",
									"nameLocation": "7956:9:11",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3956,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3955,
												"mutability": "mutable",
												"name": "ticket",
												"nameLocation": "7974:6:11",
												"nodeType": "VariableDeclaration",
												"scope": 3960,
												"src": "7966:14:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_ITicket_$4186",
													"typeString": "contract ITicket"
												},
												"typeName": {
													"id": 3954,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 3953,
														"name": "ITicket",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4186,
														"src": "7966:7:11"
													},
													"referencedDeclaration": 4186,
													"src": "7966:7:11",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_ITicket_$4186",
														"typeString": "contract ITicket"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "7965:16:11"
									},
									"returnParameters": {
										"id": 3959,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3958,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 3960,
												"src": "8000:4:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bool",
													"typeString": "bool"
												},
												"typeName": {
													"id": 3957,
													"name": "bool",
													"nodeType": "ElementaryTypeName",
													"src": "8000:4:11",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "7999:6:11"
									},
									"scope": 3970,
									"src": "7947:59:11",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 3961,
										"nodeType": "StructuredDocumentation",
										"src": "8012:221:11",
										"text": "@notice Delegate the votes for a Compound COMP-like token held by the prize pool\n @param compLike The COMP-like token held by the prize pool that should be delegated\n @param to The address to delegate to"
									},
									"functionSelector": "2f7627e3",
									"id": 3969,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "compLikeDelegate",
									"nameLocation": "8247:16:11",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3967,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3964,
												"mutability": "mutable",
												"name": "compLike",
												"nameLocation": "8274:8:11",
												"nodeType": "VariableDeclaration",
												"scope": 3969,
												"src": "8264:18:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_ICompLike_$3584",
													"typeString": "contract ICompLike"
												},
												"typeName": {
													"id": 3963,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 3962,
														"name": "ICompLike",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 3584,
														"src": "8264:9:11"
													},
													"referencedDeclaration": 3584,
													"src": "8264:9:11",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_ICompLike_$3584",
														"typeString": "contract ICompLike"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3966,
												"mutability": "mutable",
												"name": "to",
												"nameLocation": "8292:2:11",
												"nodeType": "VariableDeclaration",
												"scope": 3969,
												"src": "8284:10:11",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 3965,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "8284:7:11",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "8263:32:11"
									},
									"returnParameters": {
										"id": 3968,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "8304:0:11"
									},
									"scope": 3970,
									"src": "8238:67:11",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								}
							],
							"scope": 3971,
							"src": "143:8164:11",
							"usedErrors": []
						}
					],
					"src": "37:8271:11"
				},
				"id": 11
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IPrizePoolLiquidatorListener.sol": {
				"ast": {
					"absolutePath": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IPrizePoolLiquidatorListener.sol",
					"exportedSymbols": {
						"ExtendedSafeCastLib": [
							4290
						],
						"ICompLike": [
							3584
						],
						"IControlledToken": [
							3623
						],
						"IERC20": [
							77
						],
						"IPrizePool": [
							3970
						],
						"IPrizePoolLiquidatorListener": [
							3993
						],
						"ITicket": [
							4186
						],
						"ObservationLib": [
							4449
						],
						"OverflowSafeComparatorLib": [
							4621
						],
						"RingBufferLib": [
							4706
						],
						"SafeCast": [
							2595
						],
						"TwabLib": [
							5456
						]
					},
					"id": 3994,
					"license": "GPL-3.0",
					"nodeType": "SourceUnit",
					"nodes": [
						{
							"id": 3972,
							"literals": [
								"solidity",
								"0.8",
								".6"
							],
							"nodeType": "PragmaDirective",
							"src": "37:22:12"
						},
						{
							"absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
							"file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
							"id": 3973,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 3994,
							"sourceUnit": 78,
							"src": "61:56:12",
							"symbolAliases": [],
							"unitAlias": ""
						},
						{
							"absolutePath": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IPrizePool.sol",
							"file": "./IPrizePool.sol",
							"id": 3974,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 3994,
							"sourceUnit": 3971,
							"src": "119:26:12",
							"symbolAliases": [],
							"unitAlias": ""
						},
						{
							"absolutePath": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/ITicket.sol",
							"file": "./ITicket.sol",
							"id": 3975,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 3994,
							"sourceUnit": 4187,
							"src": "146:23:12",
							"symbolAliases": [],
							"unitAlias": ""
						},
						{
							"abstract": false,
							"baseContracts": [],
							"contractDependencies": [],
							"contractKind": "interface",
							"documentation": {
								"id": 3976,
								"nodeType": "StructuredDocumentation",
								"src": "171:40:12",
								"text": " @author PoolTogether Inc Team"
							},
							"fullyImplemented": false,
							"id": 3993,
							"linearizedBaseContracts": [
								3993
							],
							"name": "IPrizePoolLiquidatorListener",
							"nameLocation": "222:28:12",
							"nodeType": "ContractDefinition",
							"nodes": [
								{
									"functionSelector": "fd401628",
									"id": 3992,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "afterSwap",
									"nameLocation": "266:9:12",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 3990,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 3979,
												"mutability": "mutable",
												"name": "prizePool",
												"nameLocation": "287:9:12",
												"nodeType": "VariableDeclaration",
												"scope": 3992,
												"src": "276:20:12",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_IPrizePool_$3970",
													"typeString": "contract IPrizePool"
												},
												"typeName": {
													"id": 3978,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 3977,
														"name": "IPrizePool",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 3970,
														"src": "276:10:12"
													},
													"referencedDeclaration": 3970,
													"src": "276:10:12",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_IPrizePool_$3970",
														"typeString": "contract IPrizePool"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3982,
												"mutability": "mutable",
												"name": "ticket",
												"nameLocation": "306:6:12",
												"nodeType": "VariableDeclaration",
												"scope": 3992,
												"src": "298:14:12",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_ITicket_$4186",
													"typeString": "contract ITicket"
												},
												"typeName": {
													"id": 3981,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 3980,
														"name": "ITicket",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4186,
														"src": "298:7:12"
													},
													"referencedDeclaration": 4186,
													"src": "298:7:12",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_ITicket_$4186",
														"typeString": "contract ITicket"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3984,
												"mutability": "mutable",
												"name": "ticketAmount",
												"nameLocation": "322:12:12",
												"nodeType": "VariableDeclaration",
												"scope": 3992,
												"src": "314:20:12",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3983,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "314:7:12",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3987,
												"mutability": "mutable",
												"name": "token",
												"nameLocation": "343:5:12",
												"nodeType": "VariableDeclaration",
												"scope": 3992,
												"src": "336:12:12",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_IERC20_$77",
													"typeString": "contract IERC20"
												},
												"typeName": {
													"id": 3986,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 3985,
														"name": "IERC20",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 77,
														"src": "336:6:12"
													},
													"referencedDeclaration": 77,
													"src": "336:6:12",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_IERC20_$77",
														"typeString": "contract IERC20"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 3989,
												"mutability": "mutable",
												"name": "tokenAmount",
												"nameLocation": "358:11:12",
												"nodeType": "VariableDeclaration",
												"scope": 3992,
												"src": "350:19:12",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 3988,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "350:7:12",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "275:95:12"
									},
									"returnParameters": {
										"id": 3991,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "379:0:12"
									},
									"scope": 3993,
									"src": "257:123:12",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								}
							],
							"scope": 3994,
							"src": "212:170:12",
							"usedErrors": []
						}
					],
					"src": "37:345:12"
				},
				"id": 12
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/ITicket.sol": {
				"ast": {
					"absolutePath": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/ITicket.sol",
					"exportedSymbols": {
						"ExtendedSafeCastLib": [
							4290
						],
						"IControlledToken": [
							3623
						],
						"IERC20": [
							77
						],
						"ITicket": [
							4186
						],
						"ObservationLib": [
							4449
						],
						"OverflowSafeComparatorLib": [
							4621
						],
						"RingBufferLib": [
							4706
						],
						"SafeCast": [
							2595
						],
						"TwabLib": [
							5456
						]
					},
					"id": 4187,
					"license": "GPL-3.0",
					"nodeType": "SourceUnit",
					"nodes": [
						{
							"id": 3995,
							"literals": [
								"solidity",
								"0.8",
								".6"
							],
							"nodeType": "PragmaDirective",
							"src": "37:22:13"
						},
						{
							"absolutePath": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/TwabLib.sol",
							"file": "../libraries/TwabLib.sol",
							"id": 3996,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 4187,
							"sourceUnit": 5457,
							"src": "61:34:13",
							"symbolAliases": [],
							"unitAlias": ""
						},
						{
							"absolutePath": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/interfaces/IControlledToken.sol",
							"file": "./IControlledToken.sol",
							"id": 3997,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 4187,
							"sourceUnit": 3624,
							"src": "96:32:13",
							"symbolAliases": [],
							"unitAlias": ""
						},
						{
							"abstract": false,
							"baseContracts": [
								{
									"baseName": {
										"id": 3998,
										"name": "IControlledToken",
										"nodeType": "IdentifierPath",
										"referencedDeclaration": 3623,
										"src": "151:16:13"
									},
									"id": 3999,
									"nodeType": "InheritanceSpecifier",
									"src": "151:16:13"
								}
							],
							"contractDependencies": [],
							"contractKind": "interface",
							"fullyImplemented": false,
							"id": 4186,
							"linearizedBaseContracts": [
								4186,
								3623,
								77
							],
							"name": "ITicket",
							"nameLocation": "140:7:13",
							"nodeType": "ContractDefinition",
							"nodes": [
								{
									"canonicalName": "ITicket.AccountDetails",
									"id": 4006,
									"members": [
										{
											"constant": false,
											"id": 4001,
											"mutability": "mutable",
											"name": "balance",
											"nameLocation": "489:7:13",
											"nodeType": "VariableDeclaration",
											"scope": 4006,
											"src": "481:15:13",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_uint224",
												"typeString": "uint224"
											},
											"typeName": {
												"id": 4000,
												"name": "uint224",
												"nodeType": "ElementaryTypeName",
												"src": "481:7:13",
												"typeDescriptions": {
													"typeIdentifier": "t_uint224",
													"typeString": "uint224"
												}
											},
											"visibility": "internal"
										},
										{
											"constant": false,
											"id": 4003,
											"mutability": "mutable",
											"name": "nextTwabIndex",
											"nameLocation": "513:13:13",
											"nodeType": "VariableDeclaration",
											"scope": 4006,
											"src": "506:20:13",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_uint16",
												"typeString": "uint16"
											},
											"typeName": {
												"id": 4002,
												"name": "uint16",
												"nodeType": "ElementaryTypeName",
												"src": "506:6:13",
												"typeDescriptions": {
													"typeIdentifier": "t_uint16",
													"typeString": "uint16"
												}
											},
											"visibility": "internal"
										},
										{
											"constant": false,
											"id": 4005,
											"mutability": "mutable",
											"name": "cardinality",
											"nameLocation": "543:11:13",
											"nodeType": "VariableDeclaration",
											"scope": 4006,
											"src": "536:18:13",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_uint16",
												"typeString": "uint16"
											},
											"typeName": {
												"id": 4004,
												"name": "uint16",
												"nodeType": "ElementaryTypeName",
												"src": "536:6:13",
												"typeDescriptions": {
													"typeIdentifier": "t_uint16",
													"typeString": "uint16"
												}
											},
											"visibility": "internal"
										}
									],
									"name": "AccountDetails",
									"nameLocation": "456:14:13",
									"nodeType": "StructDefinition",
									"scope": 4186,
									"src": "449:112:13",
									"visibility": "public"
								},
								{
									"canonicalName": "ITicket.Account",
									"id": 4015,
									"members": [
										{
											"constant": false,
											"id": 4009,
											"mutability": "mutable",
											"name": "details",
											"nameLocation": "790:7:13",
											"nodeType": "VariableDeclaration",
											"scope": 4015,
											"src": "775:22:13",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_struct$_AccountDetails_$4006_storage_ptr",
												"typeString": "struct ITicket.AccountDetails"
											},
											"typeName": {
												"id": 4008,
												"nodeType": "UserDefinedTypeName",
												"pathNode": {
													"id": 4007,
													"name": "AccountDetails",
													"nodeType": "IdentifierPath",
													"referencedDeclaration": 4006,
													"src": "775:14:13"
												},
												"referencedDeclaration": 4006,
												"src": "775:14:13",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_AccountDetails_$4006_storage_ptr",
													"typeString": "struct ITicket.AccountDetails"
												}
											},
											"visibility": "internal"
										},
										{
											"constant": false,
											"id": 4014,
											"mutability": "mutable",
											"name": "twabs",
											"nameLocation": "841:5:13",
											"nodeType": "VariableDeclaration",
											"scope": 4015,
											"src": "807:39:13",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$65535_storage_ptr",
												"typeString": "struct ObservationLib.Observation[65535]"
											},
											"typeName": {
												"baseType": {
													"id": 4011,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 4010,
														"name": "ObservationLib.Observation",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4311,
														"src": "807:26:13"
													},
													"referencedDeclaration": 4311,
													"src": "807:26:13",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_Observation_$4311_storage_ptr",
														"typeString": "struct ObservationLib.Observation"
													}
												},
												"id": 4013,
												"length": {
													"hexValue": "3635353335",
													"id": 4012,
													"isConstant": false,
													"isLValue": false,
													"isPure": true,
													"kind": "number",
													"lValueRequested": false,
													"nodeType": "Literal",
													"src": "834:5:13",
													"typeDescriptions": {
														"typeIdentifier": "t_rational_65535_by_1",
														"typeString": "int_const 65535"
													},
													"value": "65535"
												},
												"nodeType": "ArrayTypeName",
												"src": "807:33:13",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$65535_storage_ptr",
													"typeString": "struct ObservationLib.Observation[65535]"
												}
											},
											"visibility": "internal"
										}
									],
									"name": "Account",
									"nameLocation": "757:7:13",
									"nodeType": "StructDefinition",
									"scope": 4186,
									"src": "750:103:13",
									"visibility": "public"
								},
								{
									"anonymous": false,
									"documentation": {
										"id": 4016,
										"nodeType": "StructuredDocumentation",
										"src": "859:186:13",
										"text": " @notice Emitted when TWAB balance has been delegated to another user.\n @param delegator Address of the delegator.\n @param delegate Address of the delegate."
									},
									"id": 4022,
									"name": "Delegated",
									"nameLocation": "1056:9:13",
									"nodeType": "EventDefinition",
									"parameters": {
										"id": 4021,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4018,
												"indexed": true,
												"mutability": "mutable",
												"name": "delegator",
												"nameLocation": "1082:9:13",
												"nodeType": "VariableDeclaration",
												"scope": 4022,
												"src": "1066:25:13",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 4017,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1066:7:13",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4020,
												"indexed": true,
												"mutability": "mutable",
												"name": "delegate",
												"nameLocation": "1109:8:13",
												"nodeType": "VariableDeclaration",
												"scope": 4022,
												"src": "1093:24:13",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 4019,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1093:7:13",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1065:53:13"
									},
									"src": "1050:69:13"
								},
								{
									"anonymous": false,
									"documentation": {
										"id": 4023,
										"nodeType": "StructuredDocumentation",
										"src": "1125:274:13",
										"text": " @notice Emitted when ticket is initialized.\n @param name Ticket name (eg: PoolTogether Dai Ticket (Compound)).\n @param symbol Ticket symbol (eg: PcDAI).\n @param decimals Ticket decimals.\n @param controller Token controller address."
									},
									"id": 4033,
									"name": "TicketInitialized",
									"nameLocation": "1410:17:13",
									"nodeType": "EventDefinition",
									"parameters": {
										"id": 4032,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4025,
												"indexed": false,
												"mutability": "mutable",
												"name": "name",
												"nameLocation": "1435:4:13",
												"nodeType": "VariableDeclaration",
												"scope": 4033,
												"src": "1428:11:13",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_string_memory_ptr",
													"typeString": "string"
												},
												"typeName": {
													"id": 4024,
													"name": "string",
													"nodeType": "ElementaryTypeName",
													"src": "1428:6:13",
													"typeDescriptions": {
														"typeIdentifier": "t_string_storage_ptr",
														"typeString": "string"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4027,
												"indexed": false,
												"mutability": "mutable",
												"name": "symbol",
												"nameLocation": "1448:6:13",
												"nodeType": "VariableDeclaration",
												"scope": 4033,
												"src": "1441:13:13",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_string_memory_ptr",
													"typeString": "string"
												},
												"typeName": {
													"id": 4026,
													"name": "string",
													"nodeType": "ElementaryTypeName",
													"src": "1441:6:13",
													"typeDescriptions": {
														"typeIdentifier": "t_string_storage_ptr",
														"typeString": "string"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4029,
												"indexed": false,
												"mutability": "mutable",
												"name": "decimals",
												"nameLocation": "1462:8:13",
												"nodeType": "VariableDeclaration",
												"scope": 4033,
												"src": "1456:14:13",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint8",
													"typeString": "uint8"
												},
												"typeName": {
													"id": 4028,
													"name": "uint8",
													"nodeType": "ElementaryTypeName",
													"src": "1456:5:13",
													"typeDescriptions": {
														"typeIdentifier": "t_uint8",
														"typeString": "uint8"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4031,
												"indexed": true,
												"mutability": "mutable",
												"name": "controller",
												"nameLocation": "1488:10:13",
												"nodeType": "VariableDeclaration",
												"scope": 4033,
												"src": "1472:26:13",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 4030,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1472:7:13",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1427:72:13"
									},
									"src": "1404:96:13"
								},
								{
									"anonymous": false,
									"documentation": {
										"id": 4034,
										"nodeType": "StructuredDocumentation",
										"src": "1506:246:13",
										"text": " @notice Emitted when a new TWAB has been recorded.\n @param delegate The recipient of the ticket power (may be the same as the user).\n @param newTwab Updated TWAB of a ticket holder after a successful TWAB recording."
									},
									"id": 4041,
									"name": "NewUserTwab",
									"nameLocation": "1763:11:13",
									"nodeType": "EventDefinition",
									"parameters": {
										"id": 4040,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4036,
												"indexed": true,
												"mutability": "mutable",
												"name": "delegate",
												"nameLocation": "1800:8:13",
												"nodeType": "VariableDeclaration",
												"scope": 4041,
												"src": "1784:24:13",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 4035,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1784:7:13",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4039,
												"indexed": false,
												"mutability": "mutable",
												"name": "newTwab",
												"nameLocation": "1845:7:13",
												"nodeType": "VariableDeclaration",
												"scope": 4041,
												"src": "1818:34:13",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
													"typeString": "struct ObservationLib.Observation"
												},
												"typeName": {
													"id": 4038,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 4037,
														"name": "ObservationLib.Observation",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4311,
														"src": "1818:26:13"
													},
													"referencedDeclaration": 4311,
													"src": "1818:26:13",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_Observation_$4311_storage_ptr",
														"typeString": "struct ObservationLib.Observation"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1774:84:13"
									},
									"src": "1757:102:13"
								},
								{
									"anonymous": false,
									"documentation": {
										"id": 4042,
										"nodeType": "StructuredDocumentation",
										"src": "1865:200:13",
										"text": " @notice Emitted when a new total supply TWAB has been recorded.\n @param newTotalSupplyTwab Updated TWAB of tickets total supply after a successful total supply TWAB recording."
									},
									"id": 4047,
									"name": "NewTotalSupplyTwab",
									"nameLocation": "2076:18:13",
									"nodeType": "EventDefinition",
									"parameters": {
										"id": 4046,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4045,
												"indexed": false,
												"mutability": "mutable",
												"name": "newTotalSupplyTwab",
												"nameLocation": "2122:18:13",
												"nodeType": "VariableDeclaration",
												"scope": 4047,
												"src": "2095:45:13",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
													"typeString": "struct ObservationLib.Observation"
												},
												"typeName": {
													"id": 4044,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 4043,
														"name": "ObservationLib.Observation",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4311,
														"src": "2095:26:13"
													},
													"referencedDeclaration": 4311,
													"src": "2095:26:13",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_Observation_$4311_storage_ptr",
														"typeString": "struct ObservationLib.Observation"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2094:47:13"
									},
									"src": "2070:72:13"
								},
								{
									"documentation": {
										"id": 4048,
										"nodeType": "StructuredDocumentation",
										"src": "2148:297:13",
										"text": " @notice Retrieves the address of the delegate to whom `user` has delegated their tickets.\n @dev Address of the delegate will be the zero address if `user` has not delegated their tickets.\n @param user Address of the delegator.\n @return Address of the delegate."
									},
									"functionSelector": "8d22ea2a",
									"id": 4055,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "delegateOf",
									"nameLocation": "2459:10:13",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 4051,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4050,
												"mutability": "mutable",
												"name": "user",
												"nameLocation": "2478:4:13",
												"nodeType": "VariableDeclaration",
												"scope": 4055,
												"src": "2470:12:13",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 4049,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "2470:7:13",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2469:14:13"
									},
									"returnParameters": {
										"id": 4054,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4053,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 4055,
												"src": "2507:7:13",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 4052,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "2507:7:13",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2506:9:13"
									},
									"scope": 4186,
									"src": "2450:66:13",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 4056,
										"nodeType": "StructuredDocumentation",
										"src": "2522:490:13",
										"text": " @notice Delegate time-weighted average balances to an alternative address.\n @dev    Transfers (including mints) trigger the storage of a TWAB in delegate(s) account, instead of the\ntargetted sender and/or recipient address(s).\n @dev    To reset the delegate, pass the zero address (0x000.000) as `to` parameter.\n @dev Current delegate address should be different from the new delegate address `to`.\n @param  to Recipient of delegated TWAB."
									},
									"functionSelector": "5c19a95c",
									"id": 4061,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "delegate",
									"nameLocation": "3026:8:13",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 4059,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4058,
												"mutability": "mutable",
												"name": "to",
												"nameLocation": "3043:2:13",
												"nodeType": "VariableDeclaration",
												"scope": 4061,
												"src": "3035:10:13",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 4057,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "3035:7:13",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "3034:12:13"
									},
									"returnParameters": {
										"id": 4060,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "3055:0:13"
									},
									"scope": 4186,
									"src": "3017:39:13",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 4062,
										"nodeType": "StructuredDocumentation",
										"src": "3062:168:13",
										"text": " @notice Allows the controller to delegate on a users behalf.\n @param user The user for whom to delegate\n @param delegate The new delegate"
									},
									"functionSelector": "33e39b61",
									"id": 4069,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "controllerDelegateFor",
									"nameLocation": "3244:21:13",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 4067,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4064,
												"mutability": "mutable",
												"name": "user",
												"nameLocation": "3274:4:13",
												"nodeType": "VariableDeclaration",
												"scope": 4069,
												"src": "3266:12:13",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 4063,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "3266:7:13",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4066,
												"mutability": "mutable",
												"name": "delegate",
												"nameLocation": "3288:8:13",
												"nodeType": "VariableDeclaration",
												"scope": 4069,
												"src": "3280:16:13",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 4065,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "3280:7:13",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "3265:32:13"
									},
									"returnParameters": {
										"id": 4068,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "3306:0:13"
									},
									"scope": 4186,
									"src": "3235:72:13",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 4070,
										"nodeType": "StructuredDocumentation",
										"src": "3313:362:13",
										"text": " @notice Allows a user to delegate via signature\n @param user The user who is delegating\n @param delegate The new delegate\n @param deadline The timestamp by which this must be submitted\n @param v The v portion of the ECDSA sig\n @param r The r portion of the ECDSA sig\n @param s The s portion of the ECDSA sig"
									},
									"functionSelector": "919974dc",
									"id": 4085,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "delegateWithSignature",
									"nameLocation": "3689:21:13",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 4083,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4072,
												"mutability": "mutable",
												"name": "user",
												"nameLocation": "3728:4:13",
												"nodeType": "VariableDeclaration",
												"scope": 4085,
												"src": "3720:12:13",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 4071,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "3720:7:13",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4074,
												"mutability": "mutable",
												"name": "delegate",
												"nameLocation": "3750:8:13",
												"nodeType": "VariableDeclaration",
												"scope": 4085,
												"src": "3742:16:13",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 4073,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "3742:7:13",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4076,
												"mutability": "mutable",
												"name": "deadline",
												"nameLocation": "3776:8:13",
												"nodeType": "VariableDeclaration",
												"scope": 4085,
												"src": "3768:16:13",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 4075,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "3768:7:13",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4078,
												"mutability": "mutable",
												"name": "v",
												"nameLocation": "3800:1:13",
												"nodeType": "VariableDeclaration",
												"scope": 4085,
												"src": "3794:7:13",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint8",
													"typeString": "uint8"
												},
												"typeName": {
													"id": 4077,
													"name": "uint8",
													"nodeType": "ElementaryTypeName",
													"src": "3794:5:13",
													"typeDescriptions": {
														"typeIdentifier": "t_uint8",
														"typeString": "uint8"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4080,
												"mutability": "mutable",
												"name": "r",
												"nameLocation": "3819:1:13",
												"nodeType": "VariableDeclaration",
												"scope": 4085,
												"src": "3811:9:13",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes32",
													"typeString": "bytes32"
												},
												"typeName": {
													"id": 4079,
													"name": "bytes32",
													"nodeType": "ElementaryTypeName",
													"src": "3811:7:13",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes32",
														"typeString": "bytes32"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4082,
												"mutability": "mutable",
												"name": "s",
												"nameLocation": "3838:1:13",
												"nodeType": "VariableDeclaration",
												"scope": 4085,
												"src": "3830:9:13",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes32",
													"typeString": "bytes32"
												},
												"typeName": {
													"id": 4081,
													"name": "bytes32",
													"nodeType": "ElementaryTypeName",
													"src": "3830:7:13",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes32",
														"typeString": "bytes32"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "3710:135:13"
									},
									"returnParameters": {
										"id": 4084,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "3854:0:13"
									},
									"scope": 4186,
									"src": "3680:175:13",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 4086,
										"nodeType": "StructuredDocumentation",
										"src": "3861:277:13",
										"text": " @notice Gets a users twab context.  This is a struct with their balance, next twab index, and cardinality.\n @param user The user for whom to fetch the TWAB context.\n @return The TWAB context, which includes { balance, nextTwabIndex, cardinality }"
									},
									"functionSelector": "2aceb534",
									"id": 4094,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "getAccountDetails",
									"nameLocation": "4152:17:13",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 4089,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4088,
												"mutability": "mutable",
												"name": "user",
												"nameLocation": "4178:4:13",
												"nodeType": "VariableDeclaration",
												"scope": 4094,
												"src": "4170:12:13",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 4087,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "4170:7:13",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "4169:14:13"
									},
									"returnParameters": {
										"id": 4093,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4092,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 4094,
												"src": "4207:29:13",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
													"typeString": "struct TwabLib.AccountDetails"
												},
												"typeName": {
													"id": 4091,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 4090,
														"name": "TwabLib.AccountDetails",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4730,
														"src": "4207:22:13"
													},
													"referencedDeclaration": 4730,
													"src": "4207:22:13",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_AccountDetails_$4730_storage_ptr",
														"typeString": "struct TwabLib.AccountDetails"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "4206:31:13"
									},
									"scope": 4186,
									"src": "4143:95:13",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 4095,
										"nodeType": "StructuredDocumentation",
										"src": "4244:255:13",
										"text": " @notice Gets the TWAB at a specific index for a user.\n @param user The user for whom to fetch the TWAB.\n @param index The index of the TWAB to fetch.\n @return The TWAB, which includes the twab amount and the timestamp."
									},
									"functionSelector": "36bb2a38",
									"id": 4105,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "getTwab",
									"nameLocation": "4513:7:13",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 4100,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4097,
												"mutability": "mutable",
												"name": "user",
												"nameLocation": "4529:4:13",
												"nodeType": "VariableDeclaration",
												"scope": 4105,
												"src": "4521:12:13",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 4096,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "4521:7:13",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4099,
												"mutability": "mutable",
												"name": "index",
												"nameLocation": "4542:5:13",
												"nodeType": "VariableDeclaration",
												"scope": 4105,
												"src": "4535:12:13",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint16",
													"typeString": "uint16"
												},
												"typeName": {
													"id": 4098,
													"name": "uint16",
													"nodeType": "ElementaryTypeName",
													"src": "4535:6:13",
													"typeDescriptions": {
														"typeIdentifier": "t_uint16",
														"typeString": "uint16"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "4520:28:13"
									},
									"returnParameters": {
										"id": 4104,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4103,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 4105,
												"src": "4596:33:13",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
													"typeString": "struct ObservationLib.Observation"
												},
												"typeName": {
													"id": 4102,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 4101,
														"name": "ObservationLib.Observation",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4311,
														"src": "4596:26:13"
													},
													"referencedDeclaration": 4311,
													"src": "4596:26:13",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_Observation_$4311_storage_ptr",
														"typeString": "struct ObservationLib.Observation"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "4595:35:13"
									},
									"scope": 4186,
									"src": "4504:127:13",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 4106,
										"nodeType": "StructuredDocumentation",
										"src": "4637:262:13",
										"text": " @notice Retrieves `user` TWAB balance.\n @param user Address of the user whose TWAB is being fetched.\n @param timestamp Timestamp at which we want to retrieve the TWAB balance.\n @return The TWAB balance at the given timestamp."
									},
									"functionSelector": "9ecb0370",
									"id": 4115,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "getBalanceAt",
									"nameLocation": "4913:12:13",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 4111,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4108,
												"mutability": "mutable",
												"name": "user",
												"nameLocation": "4934:4:13",
												"nodeType": "VariableDeclaration",
												"scope": 4115,
												"src": "4926:12:13",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 4107,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "4926:7:13",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4110,
												"mutability": "mutable",
												"name": "timestamp",
												"nameLocation": "4947:9:13",
												"nodeType": "VariableDeclaration",
												"scope": 4115,
												"src": "4940:16:13",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint64",
													"typeString": "uint64"
												},
												"typeName": {
													"id": 4109,
													"name": "uint64",
													"nodeType": "ElementaryTypeName",
													"src": "4940:6:13",
													"typeDescriptions": {
														"typeIdentifier": "t_uint64",
														"typeString": "uint64"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "4925:32:13"
									},
									"returnParameters": {
										"id": 4114,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4113,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 4115,
												"src": "4981:7:13",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 4112,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "4981:7:13",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "4980:9:13"
									},
									"scope": 4186,
									"src": "4904:86:13",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 4116,
										"nodeType": "StructuredDocumentation",
										"src": "4996:255:13",
										"text": " @notice Retrieves `user` TWAB balances.\n @param user Address of the user whose TWABs are being fetched.\n @param timestamps Timestamps range at which we want to retrieve the TWAB balances.\n @return `user` TWAB balances."
									},
									"functionSelector": "613ed6bd",
									"id": 4127,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "getBalancesAt",
									"nameLocation": "5265:13:13",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 4122,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4118,
												"mutability": "mutable",
												"name": "user",
												"nameLocation": "5287:4:13",
												"nodeType": "VariableDeclaration",
												"scope": 4127,
												"src": "5279:12:13",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 4117,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "5279:7:13",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4121,
												"mutability": "mutable",
												"name": "timestamps",
												"nameLocation": "5311:10:13",
												"nodeType": "VariableDeclaration",
												"scope": 4127,
												"src": "5293:28:13",
												"stateVariable": false,
												"storageLocation": "calldata",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_uint64_$dyn_calldata_ptr",
													"typeString": "uint64[]"
												},
												"typeName": {
													"baseType": {
														"id": 4119,
														"name": "uint64",
														"nodeType": "ElementaryTypeName",
														"src": "5293:6:13",
														"typeDescriptions": {
															"typeIdentifier": "t_uint64",
															"typeString": "uint64"
														}
													},
													"id": 4120,
													"nodeType": "ArrayTypeName",
													"src": "5293:8:13",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_uint64_$dyn_storage_ptr",
														"typeString": "uint64[]"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "5278:44:13"
									},
									"returnParameters": {
										"id": 4126,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4125,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 4127,
												"src": "5370:16:13",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
													"typeString": "uint256[]"
												},
												"typeName": {
													"baseType": {
														"id": 4123,
														"name": "uint256",
														"nodeType": "ElementaryTypeName",
														"src": "5370:7:13",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"id": 4124,
													"nodeType": "ArrayTypeName",
													"src": "5370:9:13",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
														"typeString": "uint256[]"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "5369:18:13"
									},
									"scope": 4186,
									"src": "5256:132:13",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 4128,
										"nodeType": "StructuredDocumentation",
										"src": "5394:338:13",
										"text": " @notice Retrieves the average balance held by a user for a given time frame.\n @param user The user whose balance is checked.\n @param startTime The start time of the time frame.\n @param endTime The end time of the time frame.\n @return The average balance that the user held during the time frame."
									},
									"functionSelector": "98b16f36",
									"id": 4139,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "getAverageBalanceBetween",
									"nameLocation": "5746:24:13",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 4135,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4130,
												"mutability": "mutable",
												"name": "user",
												"nameLocation": "5788:4:13",
												"nodeType": "VariableDeclaration",
												"scope": 4139,
												"src": "5780:12:13",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 4129,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "5780:7:13",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4132,
												"mutability": "mutable",
												"name": "startTime",
												"nameLocation": "5809:9:13",
												"nodeType": "VariableDeclaration",
												"scope": 4139,
												"src": "5802:16:13",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint64",
													"typeString": "uint64"
												},
												"typeName": {
													"id": 4131,
													"name": "uint64",
													"nodeType": "ElementaryTypeName",
													"src": "5802:6:13",
													"typeDescriptions": {
														"typeIdentifier": "t_uint64",
														"typeString": "uint64"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4134,
												"mutability": "mutable",
												"name": "endTime",
												"nameLocation": "5835:7:13",
												"nodeType": "VariableDeclaration",
												"scope": 4139,
												"src": "5828:14:13",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint64",
													"typeString": "uint64"
												},
												"typeName": {
													"id": 4133,
													"name": "uint64",
													"nodeType": "ElementaryTypeName",
													"src": "5828:6:13",
													"typeDescriptions": {
														"typeIdentifier": "t_uint64",
														"typeString": "uint64"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "5770:78:13"
									},
									"returnParameters": {
										"id": 4138,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4137,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 4139,
												"src": "5872:7:13",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 4136,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "5872:7:13",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "5871:9:13"
									},
									"scope": 4186,
									"src": "5737:144:13",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 4140,
										"nodeType": "StructuredDocumentation",
										"src": "5887:341:13",
										"text": " @notice Retrieves the average balances held by a user for a given time frame.\n @param user The user whose balance is checked.\n @param startTimes The start time of the time frame.\n @param endTimes The end time of the time frame.\n @return The average balance that the user held during the time frame."
									},
									"functionSelector": "68c7fd57",
									"id": 4154,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "getAverageBalancesBetween",
									"nameLocation": "6242:25:13",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 4149,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4142,
												"mutability": "mutable",
												"name": "user",
												"nameLocation": "6285:4:13",
												"nodeType": "VariableDeclaration",
												"scope": 4154,
												"src": "6277:12:13",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 4141,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "6277:7:13",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4145,
												"mutability": "mutable",
												"name": "startTimes",
												"nameLocation": "6317:10:13",
												"nodeType": "VariableDeclaration",
												"scope": 4154,
												"src": "6299:28:13",
												"stateVariable": false,
												"storageLocation": "calldata",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_uint64_$dyn_calldata_ptr",
													"typeString": "uint64[]"
												},
												"typeName": {
													"baseType": {
														"id": 4143,
														"name": "uint64",
														"nodeType": "ElementaryTypeName",
														"src": "6299:6:13",
														"typeDescriptions": {
															"typeIdentifier": "t_uint64",
															"typeString": "uint64"
														}
													},
													"id": 4144,
													"nodeType": "ArrayTypeName",
													"src": "6299:8:13",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_uint64_$dyn_storage_ptr",
														"typeString": "uint64[]"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4148,
												"mutability": "mutable",
												"name": "endTimes",
												"nameLocation": "6355:8:13",
												"nodeType": "VariableDeclaration",
												"scope": 4154,
												"src": "6337:26:13",
												"stateVariable": false,
												"storageLocation": "calldata",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_uint64_$dyn_calldata_ptr",
													"typeString": "uint64[]"
												},
												"typeName": {
													"baseType": {
														"id": 4146,
														"name": "uint64",
														"nodeType": "ElementaryTypeName",
														"src": "6337:6:13",
														"typeDescriptions": {
															"typeIdentifier": "t_uint64",
															"typeString": "uint64"
														}
													},
													"id": 4147,
													"nodeType": "ArrayTypeName",
													"src": "6337:8:13",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_uint64_$dyn_storage_ptr",
														"typeString": "uint64[]"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "6267:102:13"
									},
									"returnParameters": {
										"id": 4153,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4152,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 4154,
												"src": "6393:16:13",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
													"typeString": "uint256[]"
												},
												"typeName": {
													"baseType": {
														"id": 4150,
														"name": "uint256",
														"nodeType": "ElementaryTypeName",
														"src": "6393:7:13",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"id": 4151,
													"nodeType": "ArrayTypeName",
													"src": "6393:9:13",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
														"typeString": "uint256[]"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "6392:18:13"
									},
									"scope": 4186,
									"src": "6233:178:13",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 4155,
										"nodeType": "StructuredDocumentation",
										"src": "6417:253:13",
										"text": " @notice Retrieves the total supply TWAB balance at the given timestamp.\n @param timestamp Timestamp at which we want to retrieve the total supply TWAB balance.\n @return The total supply TWAB balance at the given timestamp."
									},
									"functionSelector": "2d0dd686",
									"id": 4162,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "getTotalSupplyAt",
									"nameLocation": "6684:16:13",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 4158,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4157,
												"mutability": "mutable",
												"name": "timestamp",
												"nameLocation": "6708:9:13",
												"nodeType": "VariableDeclaration",
												"scope": 4162,
												"src": "6701:16:13",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint64",
													"typeString": "uint64"
												},
												"typeName": {
													"id": 4156,
													"name": "uint64",
													"nodeType": "ElementaryTypeName",
													"src": "6701:6:13",
													"typeDescriptions": {
														"typeIdentifier": "t_uint64",
														"typeString": "uint64"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "6700:18:13"
									},
									"returnParameters": {
										"id": 4161,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4160,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 4162,
												"src": "6742:7:13",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 4159,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "6742:7:13",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "6741:9:13"
									},
									"scope": 4186,
									"src": "6675:76:13",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 4163,
										"nodeType": "StructuredDocumentation",
										"src": "6757:247:13",
										"text": " @notice Retrieves the total supply TWAB balance between the given timestamps range.\n @param timestamps Timestamps range at which we want to retrieve the total supply TWAB balance.\n @return Total supply TWAB balances."
									},
									"functionSelector": "85beb5f1",
									"id": 4172,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "getTotalSuppliesAt",
									"nameLocation": "7018:18:13",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 4167,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4166,
												"mutability": "mutable",
												"name": "timestamps",
												"nameLocation": "7055:10:13",
												"nodeType": "VariableDeclaration",
												"scope": 4172,
												"src": "7037:28:13",
												"stateVariable": false,
												"storageLocation": "calldata",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_uint64_$dyn_calldata_ptr",
													"typeString": "uint64[]"
												},
												"typeName": {
													"baseType": {
														"id": 4164,
														"name": "uint64",
														"nodeType": "ElementaryTypeName",
														"src": "7037:6:13",
														"typeDescriptions": {
															"typeIdentifier": "t_uint64",
															"typeString": "uint64"
														}
													},
													"id": 4165,
													"nodeType": "ArrayTypeName",
													"src": "7037:8:13",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_uint64_$dyn_storage_ptr",
														"typeString": "uint64[]"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "7036:30:13"
									},
									"returnParameters": {
										"id": 4171,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4170,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 4172,
												"src": "7114:16:13",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
													"typeString": "uint256[]"
												},
												"typeName": {
													"baseType": {
														"id": 4168,
														"name": "uint256",
														"nodeType": "ElementaryTypeName",
														"src": "7114:7:13",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"id": 4169,
													"nodeType": "ArrayTypeName",
													"src": "7114:9:13",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
														"typeString": "uint256[]"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "7113:18:13"
									},
									"scope": 4186,
									"src": "7009:123:13",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 4173,
										"nodeType": "StructuredDocumentation",
										"src": "7138:261:13",
										"text": " @notice Retrieves the average total supply balance for a set of given time frames.\n @param startTimes Array of start times.\n @param endTimes Array of end times.\n @return The average total supplies held during the time frame."
									},
									"functionSelector": "8e6d536a",
									"id": 4185,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "getAverageTotalSuppliesBetween",
									"nameLocation": "7413:30:13",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 4180,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4176,
												"mutability": "mutable",
												"name": "startTimes",
												"nameLocation": "7471:10:13",
												"nodeType": "VariableDeclaration",
												"scope": 4185,
												"src": "7453:28:13",
												"stateVariable": false,
												"storageLocation": "calldata",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_uint64_$dyn_calldata_ptr",
													"typeString": "uint64[]"
												},
												"typeName": {
													"baseType": {
														"id": 4174,
														"name": "uint64",
														"nodeType": "ElementaryTypeName",
														"src": "7453:6:13",
														"typeDescriptions": {
															"typeIdentifier": "t_uint64",
															"typeString": "uint64"
														}
													},
													"id": 4175,
													"nodeType": "ArrayTypeName",
													"src": "7453:8:13",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_uint64_$dyn_storage_ptr",
														"typeString": "uint64[]"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4179,
												"mutability": "mutable",
												"name": "endTimes",
												"nameLocation": "7509:8:13",
												"nodeType": "VariableDeclaration",
												"scope": 4185,
												"src": "7491:26:13",
												"stateVariable": false,
												"storageLocation": "calldata",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_uint64_$dyn_calldata_ptr",
													"typeString": "uint64[]"
												},
												"typeName": {
													"baseType": {
														"id": 4177,
														"name": "uint64",
														"nodeType": "ElementaryTypeName",
														"src": "7491:6:13",
														"typeDescriptions": {
															"typeIdentifier": "t_uint64",
															"typeString": "uint64"
														}
													},
													"id": 4178,
													"nodeType": "ArrayTypeName",
													"src": "7491:8:13",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_uint64_$dyn_storage_ptr",
														"typeString": "uint64[]"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "7443:80:13"
									},
									"returnParameters": {
										"id": 4184,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4183,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 4185,
												"src": "7547:16:13",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
													"typeString": "uint256[]"
												},
												"typeName": {
													"baseType": {
														"id": 4181,
														"name": "uint256",
														"nodeType": "ElementaryTypeName",
														"src": "7547:7:13",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"id": 4182,
													"nodeType": "ArrayTypeName",
													"src": "7547:9:13",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
														"typeString": "uint256[]"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "7546:18:13"
									},
									"scope": 4186,
									"src": "7404:161:13",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								}
							],
							"scope": 4187,
							"src": "130:7437:13",
							"usedErrors": []
						}
					],
					"src": "37:7531:13"
				},
				"id": 13
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/ExtendedSafeCastLib.sol": {
				"ast": {
					"absolutePath": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/ExtendedSafeCastLib.sol",
					"exportedSymbols": {
						"ExtendedSafeCastLib": [
							4290
						]
					},
					"id": 4291,
					"license": "GPL-3.0",
					"nodeType": "SourceUnit",
					"nodes": [
						{
							"id": 4188,
							"literals": [
								"solidity",
								"0.8",
								".6"
							],
							"nodeType": "PragmaDirective",
							"src": "37:22:14"
						},
						{
							"abstract": false,
							"baseContracts": [],
							"contractDependencies": [],
							"contractKind": "library",
							"documentation": {
								"id": 4189,
								"nodeType": "StructuredDocumentation",
								"src": "61:709:14",
								"text": " @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\n checks.\n Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n easily result in undesired exploitation or bugs, since developers usually\n assume that overflows raise errors. `SafeCast` restores this intuition by\n reverting the transaction when such an operation overflows.\n Using this library instead of the unchecked operations eliminates an entire\n class of bugs, so it's recommended to use it always.\n Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\n all math on `uint256` and `int256` and then downcasting."
							},
							"fullyImplemented": true,
							"id": 4290,
							"linearizedBaseContracts": [
								4290
							],
							"name": "ExtendedSafeCastLib",
							"nameLocation": "779:19:14",
							"nodeType": "ContractDefinition",
							"nodes": [
								{
									"body": {
										"id": 4213,
										"nodeType": "Block",
										"src": "1158:128:14",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 4204,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 4198,
																"name": "_value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 4192,
																"src": "1176:6:14",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<=",
															"rightExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 4201,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "1191:7:14",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint104_$",
																				"typeString": "type(uint104)"
																			},
																			"typeName": {
																				"id": 4200,
																				"name": "uint104",
																				"nodeType": "ElementaryTypeName",
																				"src": "1191:7:14",
																				"typeDescriptions": {}
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_type$_t_uint104_$",
																				"typeString": "type(uint104)"
																			}
																		],
																		"id": 4199,
																		"name": "type",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967269,
																		"src": "1186:4:14",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 4202,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "1186:13:14",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_meta_type_t_uint104",
																		"typeString": "type(uint104)"
																	}
																},
																"id": 4203,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "max",
																"nodeType": "MemberAccess",
																"src": "1186:17:14",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint104",
																	"typeString": "uint104"
																}
															},
															"src": "1176:27:14",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203130342062697473",
															"id": 4205,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "1205:41:14",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_5d7f3e1b7e9f9a06fded6b093c6fd1473ca0a14cc4bb683db904e803e2482981",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 104 bits\""
															},
															"value": "SafeCast: value doesn't fit in 104 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_5d7f3e1b7e9f9a06fded6b093c6fd1473ca0a14cc4bb683db904e803e2482981",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 104 bits\""
															}
														],
														"id": 4197,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "1168:7:14",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 4206,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "1168:79:14",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 4207,
												"nodeType": "ExpressionStatement",
												"src": "1168:79:14"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 4210,
															"name": "_value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4192,
															"src": "1272:6:14",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 4209,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "1264:7:14",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint104_$",
															"typeString": "type(uint104)"
														},
														"typeName": {
															"id": 4208,
															"name": "uint104",
															"nodeType": "ElementaryTypeName",
															"src": "1264:7:14",
															"typeDescriptions": {}
														}
													},
													"id": 4211,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "1264:15:14",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint104",
														"typeString": "uint104"
													}
												},
												"functionReturnParameters": 4196,
												"id": 4212,
												"nodeType": "Return",
												"src": "1257:22:14"
											}
										]
									},
									"documentation": {
										"id": 4190,
										"nodeType": "StructuredDocumentation",
										"src": "806:280:14",
										"text": " @dev Returns the downcasted uint104 from uint256, reverting on\n overflow (when the input is greater than largest uint104).\n Counterpart to Solidity's `uint104` operator.\n Requirements:\n - input must fit into 104 bits"
									},
									"id": 4214,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toUint104",
									"nameLocation": "1100:9:14",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 4193,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4192,
												"mutability": "mutable",
												"name": "_value",
												"nameLocation": "1118:6:14",
												"nodeType": "VariableDeclaration",
												"scope": 4214,
												"src": "1110:14:14",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 4191,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1110:7:14",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1109:16:14"
									},
									"returnParameters": {
										"id": 4196,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4195,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 4214,
												"src": "1149:7:14",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint104",
													"typeString": "uint104"
												},
												"typeName": {
													"id": 4194,
													"name": "uint104",
													"nodeType": "ElementaryTypeName",
													"src": "1149:7:14",
													"typeDescriptions": {
														"typeIdentifier": "t_uint104",
														"typeString": "uint104"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1148:9:14"
									},
									"scope": 4290,
									"src": "1091:195:14",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 4238,
										"nodeType": "Block",
										"src": "1644:128:14",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 4229,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 4223,
																"name": "_value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 4217,
																"src": "1662:6:14",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<=",
															"rightExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 4226,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "1677:7:14",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint208_$",
																				"typeString": "type(uint208)"
																			},
																			"typeName": {
																				"id": 4225,
																				"name": "uint208",
																				"nodeType": "ElementaryTypeName",
																				"src": "1677:7:14",
																				"typeDescriptions": {}
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_type$_t_uint208_$",
																				"typeString": "type(uint208)"
																			}
																		],
																		"id": 4224,
																		"name": "type",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967269,
																		"src": "1672:4:14",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 4227,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "1672:13:14",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_meta_type_t_uint208",
																		"typeString": "type(uint208)"
																	}
																},
																"id": 4228,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "max",
																"nodeType": "MemberAccess",
																"src": "1672:17:14",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint208",
																	"typeString": "uint208"
																}
															},
															"src": "1662:27:14",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203230382062697473",
															"id": 4230,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "1691:41:14",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_43d81217fa633fa1c6e88855de94fb990f5831ac266b0a90afa660e986ab5e23",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 208 bits\""
															},
															"value": "SafeCast: value doesn't fit in 208 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_43d81217fa633fa1c6e88855de94fb990f5831ac266b0a90afa660e986ab5e23",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 208 bits\""
															}
														],
														"id": 4222,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "1654:7:14",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 4231,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "1654:79:14",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 4232,
												"nodeType": "ExpressionStatement",
												"src": "1654:79:14"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 4235,
															"name": "_value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4217,
															"src": "1758:6:14",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 4234,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "1750:7:14",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint208_$",
															"typeString": "type(uint208)"
														},
														"typeName": {
															"id": 4233,
															"name": "uint208",
															"nodeType": "ElementaryTypeName",
															"src": "1750:7:14",
															"typeDescriptions": {}
														}
													},
													"id": 4236,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "1750:15:14",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint208",
														"typeString": "uint208"
													}
												},
												"functionReturnParameters": 4221,
												"id": 4237,
												"nodeType": "Return",
												"src": "1743:22:14"
											}
										]
									},
									"documentation": {
										"id": 4215,
										"nodeType": "StructuredDocumentation",
										"src": "1292:280:14",
										"text": " @dev Returns the downcasted uint208 from uint256, reverting on\n overflow (when the input is greater than largest uint208).\n Counterpart to Solidity's `uint208` operator.\n Requirements:\n - input must fit into 208 bits"
									},
									"id": 4239,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toUint208",
									"nameLocation": "1586:9:14",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 4218,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4217,
												"mutability": "mutable",
												"name": "_value",
												"nameLocation": "1604:6:14",
												"nodeType": "VariableDeclaration",
												"scope": 4239,
												"src": "1596:14:14",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 4216,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1596:7:14",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1595:16:14"
									},
									"returnParameters": {
										"id": 4221,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4220,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 4239,
												"src": "1635:7:14",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint208",
													"typeString": "uint208"
												},
												"typeName": {
													"id": 4219,
													"name": "uint208",
													"nodeType": "ElementaryTypeName",
													"src": "1635:7:14",
													"typeDescriptions": {
														"typeIdentifier": "t_uint208",
														"typeString": "uint208"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1634:9:14"
									},
									"scope": 4290,
									"src": "1577:195:14",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 4263,
										"nodeType": "Block",
										"src": "2130:128:14",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 4254,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 4248,
																"name": "_value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 4242,
																"src": "2148:6:14",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<=",
															"rightExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 4251,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "2163:7:14",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint224_$",
																				"typeString": "type(uint224)"
																			},
																			"typeName": {
																				"id": 4250,
																				"name": "uint224",
																				"nodeType": "ElementaryTypeName",
																				"src": "2163:7:14",
																				"typeDescriptions": {}
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_type$_t_uint224_$",
																				"typeString": "type(uint224)"
																			}
																		],
																		"id": 4249,
																		"name": "type",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967269,
																		"src": "2158:4:14",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 4252,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "2158:13:14",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_meta_type_t_uint224",
																		"typeString": "type(uint224)"
																	}
																},
																"id": 4253,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "max",
																"nodeType": "MemberAccess",
																"src": "2158:17:14",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint224",
																	"typeString": "uint224"
																}
															},
															"src": "2148:27:14",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203232342062697473",
															"id": 4255,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "2177:41:14",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_9d2acf551b2466898443b9bc3a403a4d86037386bc5a8960c1bbb0f204e69b79",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 224 bits\""
															},
															"value": "SafeCast: value doesn't fit in 224 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_9d2acf551b2466898443b9bc3a403a4d86037386bc5a8960c1bbb0f204e69b79",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 224 bits\""
															}
														],
														"id": 4247,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "2140:7:14",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 4256,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "2140:79:14",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 4257,
												"nodeType": "ExpressionStatement",
												"src": "2140:79:14"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 4260,
															"name": "_value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4242,
															"src": "2244:6:14",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 4259,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "2236:7:14",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint224_$",
															"typeString": "type(uint224)"
														},
														"typeName": {
															"id": 4258,
															"name": "uint224",
															"nodeType": "ElementaryTypeName",
															"src": "2236:7:14",
															"typeDescriptions": {}
														}
													},
													"id": 4261,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "2236:15:14",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint224",
														"typeString": "uint224"
													}
												},
												"functionReturnParameters": 4246,
												"id": 4262,
												"nodeType": "Return",
												"src": "2229:22:14"
											}
										]
									},
									"documentation": {
										"id": 4240,
										"nodeType": "StructuredDocumentation",
										"src": "1778:280:14",
										"text": " @dev Returns the downcasted uint224 from uint256, reverting on\n overflow (when the input is greater than largest uint224).\n Counterpart to Solidity's `uint224` operator.\n Requirements:\n - input must fit into 224 bits"
									},
									"id": 4264,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toUint224",
									"nameLocation": "2072:9:14",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 4243,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4242,
												"mutability": "mutable",
												"name": "_value",
												"nameLocation": "2090:6:14",
												"nodeType": "VariableDeclaration",
												"scope": 4264,
												"src": "2082:14:14",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 4241,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "2082:7:14",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2081:16:14"
									},
									"returnParameters": {
										"id": 4246,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4245,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 4264,
												"src": "2121:7:14",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint224",
													"typeString": "uint224"
												},
												"typeName": {
													"id": 4244,
													"name": "uint224",
													"nodeType": "ElementaryTypeName",
													"src": "2121:7:14",
													"typeDescriptions": {
														"typeIdentifier": "t_uint224",
														"typeString": "uint224"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2120:9:14"
									},
									"scope": 4290,
									"src": "2063:195:14",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 4288,
										"nodeType": "Block",
										"src": "2615:126:14",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 4279,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 4273,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 4267,
																"src": "2633:5:14",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "<=",
															"rightExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 4276,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "2647:7:14",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint192_$",
																				"typeString": "type(uint192)"
																			},
																			"typeName": {
																				"id": 4275,
																				"name": "uint192",
																				"nodeType": "ElementaryTypeName",
																				"src": "2647:7:14",
																				"typeDescriptions": {}
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_type$_t_uint192_$",
																				"typeString": "type(uint192)"
																			}
																		],
																		"id": 4274,
																		"name": "type",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967269,
																		"src": "2642:4:14",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 4277,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "2642:13:14",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_meta_type_t_uint192",
																		"typeString": "type(uint192)"
																	}
																},
																"id": 4278,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "max",
																"nodeType": "MemberAccess",
																"src": "2642:17:14",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint192",
																	"typeString": "uint192"
																}
															},
															"src": "2633:26:14",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203139322062697473",
															"id": 4280,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "2661:41:14",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_112978800f12a1c4f1eab82789f7b6defd49dc1c17ba270a84ffc28392fb05ae",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 192 bits\""
															},
															"value": "SafeCast: value doesn't fit in 192 bits"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_112978800f12a1c4f1eab82789f7b6defd49dc1c17ba270a84ffc28392fb05ae",
																"typeString": "literal_string \"SafeCast: value doesn't fit in 192 bits\""
															}
														],
														"id": 4272,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "2625:7:14",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 4281,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "2625:78:14",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 4282,
												"nodeType": "ExpressionStatement",
												"src": "2625:78:14"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 4285,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4267,
															"src": "2728:5:14",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 4284,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "2720:7:14",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint192_$",
															"typeString": "type(uint192)"
														},
														"typeName": {
															"id": 4283,
															"name": "uint192",
															"nodeType": "ElementaryTypeName",
															"src": "2720:7:14",
															"typeDescriptions": {}
														}
													},
													"id": 4286,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "2720:14:14",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint192",
														"typeString": "uint192"
													}
												},
												"functionReturnParameters": 4271,
												"id": 4287,
												"nodeType": "Return",
												"src": "2713:21:14"
											}
										]
									},
									"documentation": {
										"id": 4265,
										"nodeType": "StructuredDocumentation",
										"src": "2264:280:14",
										"text": " @dev Returns the downcasted uint192 from uint256, reverting on\n overflow (when the input is greater than largest uint192).\n Counterpart to Solidity's `uint192` operator.\n Requirements:\n - input must fit into 224 bits"
									},
									"id": 4289,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "toUint192",
									"nameLocation": "2558:9:14",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 4268,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4267,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "2576:5:14",
												"nodeType": "VariableDeclaration",
												"scope": 4289,
												"src": "2568:13:14",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 4266,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "2568:7:14",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2567:15:14"
									},
									"returnParameters": {
										"id": 4271,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4270,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 4289,
												"src": "2606:7:14",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint192",
													"typeString": "uint192"
												},
												"typeName": {
													"id": 4269,
													"name": "uint192",
													"nodeType": "ElementaryTypeName",
													"src": "2606:7:14",
													"typeDescriptions": {
														"typeIdentifier": "t_uint192",
														"typeString": "uint192"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2605:9:14"
									},
									"scope": 4290,
									"src": "2549:192:14",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								}
							],
							"scope": 4291,
							"src": "771:1973:14",
							"usedErrors": []
						}
					],
					"src": "37:2708:14"
				},
				"id": 14
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/ObservationLib.sol": {
				"ast": {
					"absolutePath": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/ObservationLib.sol",
					"exportedSymbols": {
						"ObservationLib": [
							4449
						],
						"OverflowSafeComparatorLib": [
							4621
						],
						"RingBufferLib": [
							4706
						],
						"SafeCast": [
							2595
						]
					},
					"id": 4450,
					"license": "GPL-3.0",
					"nodeType": "SourceUnit",
					"nodes": [
						{
							"id": 4292,
							"literals": [
								"solidity",
								"0.8",
								".6"
							],
							"nodeType": "PragmaDirective",
							"src": "37:22:15"
						},
						{
							"absolutePath": "@openzeppelin/contracts/utils/math/SafeCast.sol",
							"file": "@openzeppelin/contracts/utils/math/SafeCast.sol",
							"id": 4293,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 4450,
							"sourceUnit": 2596,
							"src": "61:57:15",
							"symbolAliases": [],
							"unitAlias": ""
						},
						{
							"absolutePath": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/OverflowSafeComparatorLib.sol",
							"file": "./OverflowSafeComparatorLib.sol",
							"id": 4294,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 4450,
							"sourceUnit": 4622,
							"src": "120:41:15",
							"symbolAliases": [],
							"unitAlias": ""
						},
						{
							"absolutePath": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/RingBufferLib.sol",
							"file": "./RingBufferLib.sol",
							"id": 4295,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 4450,
							"sourceUnit": 4707,
							"src": "162:29:15",
							"symbolAliases": [],
							"unitAlias": ""
						},
						{
							"abstract": false,
							"baseContracts": [],
							"contractDependencies": [],
							"contractKind": "library",
							"documentation": {
								"id": 4296,
								"nodeType": "StructuredDocumentation",
								"src": "193:335:15",
								"text": " @title Observation Library\n @notice This library allows one to store an array of timestamped values and efficiently binary search them.\n @dev Largely pulled from Uniswap V3 Oracle.sol: https://github.com/Uniswap/v3-core/blob/c05a0e2c8c08c460fb4d05cfdda30b3ad8deeaac/contracts/libraries/Oracle.sol\n @author PoolTogether Inc."
							},
							"fullyImplemented": true,
							"id": 4449,
							"linearizedBaseContracts": [
								4449
							],
							"name": "ObservationLib",
							"nameLocation": "537:14:15",
							"nodeType": "ContractDefinition",
							"nodes": [
								{
									"id": 4299,
									"libraryName": {
										"id": 4297,
										"name": "OverflowSafeComparatorLib",
										"nodeType": "IdentifierPath",
										"referencedDeclaration": 4621,
										"src": "564:25:15"
									},
									"nodeType": "UsingForDirective",
									"src": "558:43:15",
									"typeName": {
										"id": 4298,
										"name": "uint32",
										"nodeType": "ElementaryTypeName",
										"src": "594:6:15",
										"typeDescriptions": {
											"typeIdentifier": "t_uint32",
											"typeString": "uint32"
										}
									}
								},
								{
									"id": 4302,
									"libraryName": {
										"id": 4300,
										"name": "SafeCast",
										"nodeType": "IdentifierPath",
										"referencedDeclaration": 2595,
										"src": "612:8:15"
									},
									"nodeType": "UsingForDirective",
									"src": "606:27:15",
									"typeName": {
										"id": 4301,
										"name": "uint256",
										"nodeType": "ElementaryTypeName",
										"src": "625:7:15",
										"typeDescriptions": {
											"typeIdentifier": "t_uint256",
											"typeString": "uint256"
										}
									}
								},
								{
									"constant": true,
									"documentation": {
										"id": 4303,
										"nodeType": "StructuredDocumentation",
										"src": "639:46:15",
										"text": "@notice The maximum number of observations"
									},
									"functionSelector": "8200d873",
									"id": 4306,
									"mutability": "constant",
									"name": "MAX_CARDINALITY",
									"nameLocation": "713:15:15",
									"nodeType": "VariableDeclaration",
									"scope": 4449,
									"src": "690:49:15",
									"stateVariable": true,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_uint24",
										"typeString": "uint24"
									},
									"typeName": {
										"id": 4304,
										"name": "uint24",
										"nodeType": "ElementaryTypeName",
										"src": "690:6:15",
										"typeDescriptions": {
											"typeIdentifier": "t_uint24",
											"typeString": "uint24"
										}
									},
									"value": {
										"hexValue": "3136373737323135",
										"id": 4305,
										"isConstant": false,
										"isLValue": false,
										"isPure": true,
										"kind": "number",
										"lValueRequested": false,
										"nodeType": "Literal",
										"src": "731:8:15",
										"typeDescriptions": {
											"typeIdentifier": "t_rational_16777215_by_1",
											"typeString": "int_const 16777215"
										},
										"value": "16777215"
									},
									"visibility": "public"
								},
								{
									"canonicalName": "ObservationLib.Observation",
									"id": 4311,
									"members": [
										{
											"constant": false,
											"id": 4308,
											"mutability": "mutable",
											"name": "amount",
											"nameLocation": "964:6:15",
											"nodeType": "VariableDeclaration",
											"scope": 4311,
											"src": "956:14:15",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_uint224",
												"typeString": "uint224"
											},
											"typeName": {
												"id": 4307,
												"name": "uint224",
												"nodeType": "ElementaryTypeName",
												"src": "956:7:15",
												"typeDescriptions": {
													"typeIdentifier": "t_uint224",
													"typeString": "uint224"
												}
											},
											"visibility": "internal"
										},
										{
											"constant": false,
											"id": 4310,
											"mutability": "mutable",
											"name": "timestamp",
											"nameLocation": "987:9:15",
											"nodeType": "VariableDeclaration",
											"scope": 4311,
											"src": "980:16:15",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_uint32",
												"typeString": "uint32"
											},
											"typeName": {
												"id": 4309,
												"name": "uint32",
												"nodeType": "ElementaryTypeName",
												"src": "980:6:15",
												"typeDescriptions": {
													"typeIdentifier": "t_uint32",
													"typeString": "uint32"
												}
											},
											"visibility": "internal"
										}
									],
									"name": "Observation",
									"nameLocation": "934:11:15",
									"nodeType": "StructDefinition",
									"scope": 4449,
									"src": "927:76:15",
									"visibility": "public"
								},
								{
									"body": {
										"id": 4447,
										"nodeType": "Block",
										"src": "2709:1679:15",
										"statements": [
											{
												"assignments": [
													4337
												],
												"declarations": [
													{
														"constant": false,
														"id": 4337,
														"mutability": "mutable",
														"name": "leftSide",
														"nameLocation": "2727:8:15",
														"nodeType": "VariableDeclaration",
														"scope": 4447,
														"src": "2719:16:15",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 4336,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "2719:7:15",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 4339,
												"initialValue": {
													"id": 4338,
													"name": "_oldestObservationIndex",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 4321,
													"src": "2738:23:15",
													"typeDescriptions": {
														"typeIdentifier": "t_uint24",
														"typeString": "uint24"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "2719:42:15"
											},
											{
												"assignments": [
													4341
												],
												"declarations": [
													{
														"constant": false,
														"id": 4341,
														"mutability": "mutable",
														"name": "rightSide",
														"nameLocation": "2779:9:15",
														"nodeType": "VariableDeclaration",
														"scope": 4447,
														"src": "2771:17:15",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 4340,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "2771:7:15",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 4352,
												"initialValue": {
													"condition": {
														"commonType": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"id": 4344,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"leftExpression": {
															"id": 4342,
															"name": "_newestObservationIndex",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4319,
															"src": "2791:23:15",
															"typeDescriptions": {
																"typeIdentifier": "t_uint24",
																"typeString": "uint24"
															}
														},
														"nodeType": "BinaryOperation",
														"operator": "<",
														"rightExpression": {
															"id": 4343,
															"name": "leftSide",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4337,
															"src": "2817:8:15",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"src": "2791:34:15",
														"typeDescriptions": {
															"typeIdentifier": "t_bool",
															"typeString": "bool"
														}
													},
													"falseExpression": {
														"id": 4350,
														"name": "_newestObservationIndex",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4319,
														"src": "2882:23:15",
														"typeDescriptions": {
															"typeIdentifier": "t_uint24",
															"typeString": "uint24"
														}
													},
													"id": 4351,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"nodeType": "Conditional",
													"src": "2791:114:15",
													"trueExpression": {
														"commonType": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"id": 4349,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"leftExpression": {
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 4347,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 4345,
																"name": "leftSide",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 4337,
																"src": "2840:8:15",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "+",
															"rightExpression": {
																"id": 4346,
																"name": "_cardinality",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 4325,
																"src": "2851:12:15",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint24",
																	"typeString": "uint24"
																}
															},
															"src": "2840:23:15",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"nodeType": "BinaryOperation",
														"operator": "-",
														"rightExpression": {
															"hexValue": "31",
															"id": 4348,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "number",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "2866:1:15",
															"typeDescriptions": {
																"typeIdentifier": "t_rational_1_by_1",
																"typeString": "int_const 1"
															},
															"value": "1"
														},
														"src": "2840:27:15",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "2771:134:15"
											},
											{
												"assignments": [
													4354
												],
												"declarations": [
													{
														"constant": false,
														"id": 4354,
														"mutability": "mutable",
														"name": "currentIndex",
														"nameLocation": "2923:12:15",
														"nodeType": "VariableDeclaration",
														"scope": 4447,
														"src": "2915:20:15",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 4353,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "2915:7:15",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 4355,
												"nodeType": "VariableDeclarationStatement",
												"src": "2915:20:15"
											},
											{
												"body": {
													"id": 4445,
													"nodeType": "Block",
													"src": "2959:1423:15",
													"statements": [
														{
															"expression": {
																"id": 4364,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftHandSide": {
																	"id": 4357,
																	"name": "currentIndex",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 4354,
																	"src": "3197:12:15",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"nodeType": "Assignment",
																"operator": "=",
																"rightHandSide": {
																	"commonType": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	},
																	"id": 4363,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"lValueRequested": false,
																	"leftExpression": {
																		"components": [
																			{
																				"commonType": {
																					"typeIdentifier": "t_uint256",
																					"typeString": "uint256"
																				},
																				"id": 4360,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": false,
																				"lValueRequested": false,
																				"leftExpression": {
																					"id": 4358,
																					"name": "leftSide",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 4337,
																					"src": "3213:8:15",
																					"typeDescriptions": {
																						"typeIdentifier": "t_uint256",
																						"typeString": "uint256"
																					}
																				},
																				"nodeType": "BinaryOperation",
																				"operator": "+",
																				"rightExpression": {
																					"id": 4359,
																					"name": "rightSide",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 4341,
																					"src": "3224:9:15",
																					"typeDescriptions": {
																						"typeIdentifier": "t_uint256",
																						"typeString": "uint256"
																					}
																				},
																				"src": "3213:20:15",
																				"typeDescriptions": {
																					"typeIdentifier": "t_uint256",
																					"typeString": "uint256"
																				}
																			}
																		],
																		"id": 4361,
																		"isConstant": false,
																		"isInlineArray": false,
																		"isLValue": false,
																		"isPure": false,
																		"lValueRequested": false,
																		"nodeType": "TupleExpression",
																		"src": "3212:22:15",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		}
																	},
																	"nodeType": "BinaryOperation",
																	"operator": "/",
																	"rightExpression": {
																		"hexValue": "32",
																		"id": 4362,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "number",
																		"lValueRequested": false,
																		"nodeType": "Literal",
																		"src": "3237:1:15",
																		"typeDescriptions": {
																			"typeIdentifier": "t_rational_2_by_1",
																			"typeString": "int_const 2"
																		},
																		"value": "2"
																	},
																	"src": "3212:26:15",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"src": "3197:41:15",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"id": 4365,
															"nodeType": "ExpressionStatement",
															"src": "3197:41:15"
														},
														{
															"expression": {
																"id": 4377,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftHandSide": {
																	"id": 4366,
																	"name": "beforeOrAt",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 4331,
																	"src": "3253:10:15",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																		"typeString": "struct ObservationLib.Observation memory"
																	}
																},
																"nodeType": "Assignment",
																"operator": "=",
																"rightHandSide": {
																	"baseExpression": {
																		"id": 4367,
																		"name": "_observations",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4317,
																		"src": "3266:13:15",
																		"typeDescriptions": {
																			"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
																			"typeString": "struct ObservationLib.Observation storage ref[16777215] storage pointer"
																		}
																	},
																	"id": 4376,
																	"indexExpression": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"id": 4372,
																						"name": "currentIndex",
																						"nodeType": "Identifier",
																						"overloadedDeclarations": [],
																						"referencedDeclaration": 4354,
																						"src": "3306:12:15",
																						"typeDescriptions": {
																							"typeIdentifier": "t_uint256",
																							"typeString": "uint256"
																						}
																					},
																					{
																						"id": 4373,
																						"name": "_cardinality",
																						"nodeType": "Identifier",
																						"overloadedDeclarations": [],
																						"referencedDeclaration": 4325,
																						"src": "3320:12:15",
																						"typeDescriptions": {
																							"typeIdentifier": "t_uint24",
																							"typeString": "uint24"
																						}
																					}
																				],
																				"expression": {
																					"argumentTypes": [
																						{
																							"typeIdentifier": "t_uint256",
																							"typeString": "uint256"
																						},
																						{
																							"typeIdentifier": "t_uint24",
																							"typeString": "uint24"
																						}
																					],
																					"expression": {
																						"id": 4370,
																						"name": "RingBufferLib",
																						"nodeType": "Identifier",
																						"overloadedDeclarations": [],
																						"referencedDeclaration": 4706,
																						"src": "3287:13:15",
																						"typeDescriptions": {
																							"typeIdentifier": "t_type$_t_contract$_RingBufferLib_$4706_$",
																							"typeString": "type(library RingBufferLib)"
																						}
																					},
																					"id": 4371,
																					"isConstant": false,
																					"isLValue": false,
																					"isPure": false,
																					"lValueRequested": false,
																					"memberName": "wrap",
																					"nodeType": "MemberAccess",
																					"referencedDeclaration": 4638,
																					"src": "3287:18:15",
																					"typeDescriptions": {
																						"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
																						"typeString": "function (uint256,uint256) pure returns (uint256)"
																					}
																				},
																				"id": 4374,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": false,
																				"kind": "functionCall",
																				"lValueRequested": false,
																				"names": [],
																				"nodeType": "FunctionCall",
																				"src": "3287:46:15",
																				"tryCall": false,
																				"typeDescriptions": {
																					"typeIdentifier": "t_uint256",
																					"typeString": "uint256"
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_uint256",
																					"typeString": "uint256"
																				}
																			],
																			"id": 4369,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "3280:6:15",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint24_$",
																				"typeString": "type(uint24)"
																			},
																			"typeName": {
																				"id": 4368,
																				"name": "uint24",
																				"nodeType": "ElementaryTypeName",
																				"src": "3280:6:15",
																				"typeDescriptions": {}
																			}
																		},
																		"id": 4375,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": false,
																		"kind": "typeConversion",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "3280:54:15",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint24",
																			"typeString": "uint24"
																		}
																	},
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"nodeType": "IndexAccess",
																	"src": "3266:69:15",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_Observation_$4311_storage",
																		"typeString": "struct ObservationLib.Observation storage ref"
																	}
																},
																"src": "3253:82:15",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																	"typeString": "struct ObservationLib.Observation memory"
																}
															},
															"id": 4378,
															"nodeType": "ExpressionStatement",
															"src": "3253:82:15"
														},
														{
															"assignments": [
																4380
															],
															"declarations": [
																{
																	"constant": false,
																	"id": 4380,
																	"mutability": "mutable",
																	"name": "beforeOrAtTimestamp",
																	"nameLocation": "3356:19:15",
																	"nodeType": "VariableDeclaration",
																	"scope": 4445,
																	"src": "3349:26:15",
																	"stateVariable": false,
																	"storageLocation": "default",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint32",
																		"typeString": "uint32"
																	},
																	"typeName": {
																		"id": 4379,
																		"name": "uint32",
																		"nodeType": "ElementaryTypeName",
																		"src": "3349:6:15",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint32",
																			"typeString": "uint32"
																		}
																	},
																	"visibility": "internal"
																}
															],
															"id": 4383,
															"initialValue": {
																"expression": {
																	"id": 4381,
																	"name": "beforeOrAt",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 4331,
																	"src": "3378:10:15",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																		"typeString": "struct ObservationLib.Observation memory"
																	}
																},
																"id": 4382,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "timestamp",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 4310,
																"src": "3378:20:15",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint32",
																	"typeString": "uint32"
																}
															},
															"nodeType": "VariableDeclarationStatement",
															"src": "3349:49:15"
														},
														{
															"condition": {
																"commonType": {
																	"typeIdentifier": "t_uint32",
																	"typeString": "uint32"
																},
																"id": 4386,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 4384,
																	"name": "beforeOrAtTimestamp",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 4380,
																	"src": "3515:19:15",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint32",
																		"typeString": "uint32"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "==",
																"rightExpression": {
																	"hexValue": "30",
																	"id": 4385,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "number",
																	"lValueRequested": false,
																	"nodeType": "Literal",
																	"src": "3538:1:15",
																	"typeDescriptions": {
																		"typeIdentifier": "t_rational_0_by_1",
																		"typeString": "int_const 0"
																	},
																	"value": "0"
																},
																"src": "3515:24:15",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"id": 4395,
															"nodeType": "IfStatement",
															"src": "3511:116:15",
															"trueBody": {
																"id": 4394,
																"nodeType": "Block",
																"src": "3541:86:15",
																"statements": [
																	{
																		"expression": {
																			"id": 4391,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": false,
																			"lValueRequested": false,
																			"leftHandSide": {
																				"id": 4387,
																				"name": "leftSide",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 4337,
																				"src": "3559:8:15",
																				"typeDescriptions": {
																					"typeIdentifier": "t_uint256",
																					"typeString": "uint256"
																				}
																			},
																			"nodeType": "Assignment",
																			"operator": "=",
																			"rightHandSide": {
																				"commonType": {
																					"typeIdentifier": "t_uint256",
																					"typeString": "uint256"
																				},
																				"id": 4390,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": false,
																				"lValueRequested": false,
																				"leftExpression": {
																					"id": 4388,
																					"name": "currentIndex",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 4354,
																					"src": "3570:12:15",
																					"typeDescriptions": {
																						"typeIdentifier": "t_uint256",
																						"typeString": "uint256"
																					}
																				},
																				"nodeType": "BinaryOperation",
																				"operator": "+",
																				"rightExpression": {
																					"hexValue": "31",
																					"id": 4389,
																					"isConstant": false,
																					"isLValue": false,
																					"isPure": true,
																					"kind": "number",
																					"lValueRequested": false,
																					"nodeType": "Literal",
																					"src": "3585:1:15",
																					"typeDescriptions": {
																						"typeIdentifier": "t_rational_1_by_1",
																						"typeString": "int_const 1"
																					},
																					"value": "1"
																				},
																				"src": "3570:16:15",
																				"typeDescriptions": {
																					"typeIdentifier": "t_uint256",
																					"typeString": "uint256"
																				}
																			},
																			"src": "3559:27:15",
																			"typeDescriptions": {
																				"typeIdentifier": "t_uint256",
																				"typeString": "uint256"
																			}
																		},
																		"id": 4392,
																		"nodeType": "ExpressionStatement",
																		"src": "3559:27:15"
																	},
																	{
																		"id": 4393,
																		"nodeType": "Continue",
																		"src": "3604:8:15"
																	}
																]
															}
														},
														{
															"expression": {
																"id": 4407,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftHandSide": {
																	"id": 4396,
																	"name": "atOrAfter",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 4334,
																	"src": "3641:9:15",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																		"typeString": "struct ObservationLib.Observation memory"
																	}
																},
																"nodeType": "Assignment",
																"operator": "=",
																"rightHandSide": {
																	"baseExpression": {
																		"id": 4397,
																		"name": "_observations",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4317,
																		"src": "3653:13:15",
																		"typeDescriptions": {
																			"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
																			"typeString": "struct ObservationLib.Observation storage ref[16777215] storage pointer"
																		}
																	},
																	"id": 4406,
																	"indexExpression": {
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"id": 4402,
																						"name": "currentIndex",
																						"nodeType": "Identifier",
																						"overloadedDeclarations": [],
																						"referencedDeclaration": 4354,
																						"src": "3698:12:15",
																						"typeDescriptions": {
																							"typeIdentifier": "t_uint256",
																							"typeString": "uint256"
																						}
																					},
																					{
																						"id": 4403,
																						"name": "_cardinality",
																						"nodeType": "Identifier",
																						"overloadedDeclarations": [],
																						"referencedDeclaration": 4325,
																						"src": "3712:12:15",
																						"typeDescriptions": {
																							"typeIdentifier": "t_uint24",
																							"typeString": "uint24"
																						}
																					}
																				],
																				"expression": {
																					"argumentTypes": [
																						{
																							"typeIdentifier": "t_uint256",
																							"typeString": "uint256"
																						},
																						{
																							"typeIdentifier": "t_uint24",
																							"typeString": "uint24"
																						}
																					],
																					"expression": {
																						"id": 4400,
																						"name": "RingBufferLib",
																						"nodeType": "Identifier",
																						"overloadedDeclarations": [],
																						"referencedDeclaration": 4706,
																						"src": "3674:13:15",
																						"typeDescriptions": {
																							"typeIdentifier": "t_type$_t_contract$_RingBufferLib_$4706_$",
																							"typeString": "type(library RingBufferLib)"
																						}
																					},
																					"id": 4401,
																					"isConstant": false,
																					"isLValue": false,
																					"isPure": false,
																					"lValueRequested": false,
																					"memberName": "nextIndex",
																					"nodeType": "MemberAccess",
																					"referencedDeclaration": 4705,
																					"src": "3674:23:15",
																					"typeDescriptions": {
																						"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
																						"typeString": "function (uint256,uint256) pure returns (uint256)"
																					}
																				},
																				"id": 4404,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": false,
																				"kind": "functionCall",
																				"lValueRequested": false,
																				"names": [],
																				"nodeType": "FunctionCall",
																				"src": "3674:51:15",
																				"tryCall": false,
																				"typeDescriptions": {
																					"typeIdentifier": "t_uint256",
																					"typeString": "uint256"
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_uint256",
																					"typeString": "uint256"
																				}
																			],
																			"id": 4399,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "3667:6:15",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_uint24_$",
																				"typeString": "type(uint24)"
																			},
																			"typeName": {
																				"id": 4398,
																				"name": "uint24",
																				"nodeType": "ElementaryTypeName",
																				"src": "3667:6:15",
																				"typeDescriptions": {}
																			}
																		},
																		"id": 4405,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": false,
																		"kind": "typeConversion",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "3667:59:15",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint24",
																			"typeString": "uint24"
																		}
																	},
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"nodeType": "IndexAccess",
																	"src": "3653:74:15",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_Observation_$4311_storage",
																		"typeString": "struct ObservationLib.Observation storage ref"
																	}
																},
																"src": "3641:86:15",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																	"typeString": "struct ObservationLib.Observation memory"
																}
															},
															"id": 4408,
															"nodeType": "ExpressionStatement",
															"src": "3641:86:15"
														},
														{
															"assignments": [
																4410
															],
															"declarations": [
																{
																	"constant": false,
																	"id": 4410,
																	"mutability": "mutable",
																	"name": "targetAtOrAfter",
																	"nameLocation": "3747:15:15",
																	"nodeType": "VariableDeclaration",
																	"scope": 4445,
																	"src": "3742:20:15",
																	"stateVariable": false,
																	"storageLocation": "default",
																	"typeDescriptions": {
																		"typeIdentifier": "t_bool",
																		"typeString": "bool"
																	},
																	"typeName": {
																		"id": 4409,
																		"name": "bool",
																		"nodeType": "ElementaryTypeName",
																		"src": "3742:4:15",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bool",
																			"typeString": "bool"
																		}
																	},
																	"visibility": "internal"
																}
															],
															"id": 4416,
															"initialValue": {
																"arguments": [
																	{
																		"id": 4413,
																		"name": "_target",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4323,
																		"src": "3789:7:15",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint32",
																			"typeString": "uint32"
																		}
																	},
																	{
																		"id": 4414,
																		"name": "_time",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4327,
																		"src": "3798:5:15",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint32",
																			"typeString": "uint32"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_uint32",
																			"typeString": "uint32"
																		},
																		{
																			"typeIdentifier": "t_uint32",
																			"typeString": "uint32"
																		}
																	],
																	"expression": {
																		"id": 4411,
																		"name": "beforeOrAtTimestamp",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4380,
																		"src": "3765:19:15",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint32",
																			"typeString": "uint32"
																		}
																	},
																	"id": 4412,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "lte",
																	"nodeType": "MemberAccess",
																	"referencedDeclaration": 4562,
																	"src": "3765:23:15",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_internal_pure$_t_uint32_$_t_uint32_$_t_uint32_$returns$_t_bool_$bound_to$_t_uint32_$",
																		"typeString": "function (uint32,uint32,uint32) pure returns (bool)"
																	}
																},
																"id": 4415,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "3765:39:15",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"nodeType": "VariableDeclarationStatement",
															"src": "3742:62:15"
														},
														{
															"condition": {
																"commonType": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																},
																"id": 4424,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 4417,
																	"name": "targetAtOrAfter",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 4410,
																	"src": "3890:15:15",
																	"typeDescriptions": {
																		"typeIdentifier": "t_bool",
																		"typeString": "bool"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "&&",
																"rightExpression": {
																	"arguments": [
																		{
																			"expression": {
																				"id": 4420,
																				"name": "atOrAfter",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 4334,
																				"src": "3921:9:15",
																				"typeDescriptions": {
																					"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																					"typeString": "struct ObservationLib.Observation memory"
																				}
																			},
																			"id": 4421,
																			"isConstant": false,
																			"isLValue": true,
																			"isPure": false,
																			"lValueRequested": false,
																			"memberName": "timestamp",
																			"nodeType": "MemberAccess",
																			"referencedDeclaration": 4310,
																			"src": "3921:19:15",
																			"typeDescriptions": {
																				"typeIdentifier": "t_uint32",
																				"typeString": "uint32"
																			}
																		},
																		{
																			"id": 4422,
																			"name": "_time",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4327,
																			"src": "3942:5:15",
																			"typeDescriptions": {
																				"typeIdentifier": "t_uint32",
																				"typeString": "uint32"
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_uint32",
																				"typeString": "uint32"
																			},
																			{
																				"typeIdentifier": "t_uint32",
																				"typeString": "uint32"
																			}
																		],
																		"expression": {
																			"id": 4418,
																			"name": "_target",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4323,
																			"src": "3909:7:15",
																			"typeDescriptions": {
																				"typeIdentifier": "t_uint32",
																				"typeString": "uint32"
																			}
																		},
																		"id": 4419,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "lte",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 4562,
																		"src": "3909:11:15",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_internal_pure$_t_uint32_$_t_uint32_$_t_uint32_$returns$_t_bool_$bound_to$_t_uint32_$",
																			"typeString": "function (uint32,uint32,uint32) pure returns (bool)"
																		}
																	},
																	"id": 4423,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "3909:39:15",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_bool",
																		"typeString": "bool"
																	}
																},
																"src": "3890:58:15",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"id": 4427,
															"nodeType": "IfStatement",
															"src": "3886:102:15",
															"trueBody": {
																"id": 4426,
																"nodeType": "Block",
																"src": "3950:38:15",
																"statements": [
																	{
																		"id": 4425,
																		"nodeType": "Break",
																		"src": "3968:5:15"
																	}
																]
															}
														},
														{
															"condition": {
																"id": 4429,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"nodeType": "UnaryOperation",
																"operator": "!",
																"prefix": true,
																"src": "4137:16:15",
																"subExpression": {
																	"id": 4428,
																	"name": "targetAtOrAfter",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 4410,
																	"src": "4138:15:15",
																	"typeDescriptions": {
																		"typeIdentifier": "t_bool",
																		"typeString": "bool"
																	}
																},
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"falseBody": {
																"id": 4443,
																"nodeType": "Block",
																"src": "4222:150:15",
																"statements": [
																	{
																		"expression": {
																			"id": 4441,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": false,
																			"lValueRequested": false,
																			"leftHandSide": {
																				"id": 4437,
																				"name": "leftSide",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 4337,
																				"src": "4330:8:15",
																				"typeDescriptions": {
																					"typeIdentifier": "t_uint256",
																					"typeString": "uint256"
																				}
																			},
																			"nodeType": "Assignment",
																			"operator": "=",
																			"rightHandSide": {
																				"commonType": {
																					"typeIdentifier": "t_uint256",
																					"typeString": "uint256"
																				},
																				"id": 4440,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": false,
																				"lValueRequested": false,
																				"leftExpression": {
																					"id": 4438,
																					"name": "currentIndex",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 4354,
																					"src": "4341:12:15",
																					"typeDescriptions": {
																						"typeIdentifier": "t_uint256",
																						"typeString": "uint256"
																					}
																				},
																				"nodeType": "BinaryOperation",
																				"operator": "+",
																				"rightExpression": {
																					"hexValue": "31",
																					"id": 4439,
																					"isConstant": false,
																					"isLValue": false,
																					"isPure": true,
																					"kind": "number",
																					"lValueRequested": false,
																					"nodeType": "Literal",
																					"src": "4356:1:15",
																					"typeDescriptions": {
																						"typeIdentifier": "t_rational_1_by_1",
																						"typeString": "int_const 1"
																					},
																					"value": "1"
																				},
																				"src": "4341:16:15",
																				"typeDescriptions": {
																					"typeIdentifier": "t_uint256",
																					"typeString": "uint256"
																				}
																			},
																			"src": "4330:27:15",
																			"typeDescriptions": {
																				"typeIdentifier": "t_uint256",
																				"typeString": "uint256"
																			}
																		},
																		"id": 4442,
																		"nodeType": "ExpressionStatement",
																		"src": "4330:27:15"
																	}
																]
															},
															"id": 4444,
															"nodeType": "IfStatement",
															"src": "4133:239:15",
															"trueBody": {
																"id": 4436,
																"nodeType": "Block",
																"src": "4155:61:15",
																"statements": [
																	{
																		"expression": {
																			"id": 4434,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": false,
																			"lValueRequested": false,
																			"leftHandSide": {
																				"id": 4430,
																				"name": "rightSide",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 4341,
																				"src": "4173:9:15",
																				"typeDescriptions": {
																					"typeIdentifier": "t_uint256",
																					"typeString": "uint256"
																				}
																			},
																			"nodeType": "Assignment",
																			"operator": "=",
																			"rightHandSide": {
																				"commonType": {
																					"typeIdentifier": "t_uint256",
																					"typeString": "uint256"
																				},
																				"id": 4433,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": false,
																				"lValueRequested": false,
																				"leftExpression": {
																					"id": 4431,
																					"name": "currentIndex",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 4354,
																					"src": "4185:12:15",
																					"typeDescriptions": {
																						"typeIdentifier": "t_uint256",
																						"typeString": "uint256"
																					}
																				},
																				"nodeType": "BinaryOperation",
																				"operator": "-",
																				"rightExpression": {
																					"hexValue": "31",
																					"id": 4432,
																					"isConstant": false,
																					"isLValue": false,
																					"isPure": true,
																					"kind": "number",
																					"lValueRequested": false,
																					"nodeType": "Literal",
																					"src": "4200:1:15",
																					"typeDescriptions": {
																						"typeIdentifier": "t_rational_1_by_1",
																						"typeString": "int_const 1"
																					},
																					"value": "1"
																				},
																				"src": "4185:16:15",
																				"typeDescriptions": {
																					"typeIdentifier": "t_uint256",
																					"typeString": "uint256"
																				}
																			},
																			"src": "4173:28:15",
																			"typeDescriptions": {
																				"typeIdentifier": "t_uint256",
																				"typeString": "uint256"
																			}
																		},
																		"id": 4435,
																		"nodeType": "ExpressionStatement",
																		"src": "4173:28:15"
																	}
																]
															}
														}
													]
												},
												"condition": {
													"hexValue": "74727565",
													"id": 4356,
													"isConstant": false,
													"isLValue": false,
													"isPure": true,
													"kind": "bool",
													"lValueRequested": false,
													"nodeType": "Literal",
													"src": "2953:4:15",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													},
													"value": "true"
												},
												"id": 4446,
												"nodeType": "WhileStatement",
												"src": "2946:1436:15"
											}
										]
									},
									"documentation": {
										"id": 4312,
										"nodeType": "StructuredDocumentation",
										"src": "1009:1368:15",
										"text": " @notice Fetches Observations `beforeOrAt` and `atOrAfter` a `_target`, eg: where [`beforeOrAt`, `atOrAfter`] is satisfied.\n The result may be the same Observation, or adjacent Observations.\n @dev The answer must be contained in the array used when the target is located within the stored Observation.\n boundaries: older than the most recent Observation and younger, or the same age as, the oldest Observation.\n @dev  If `_newestObservationIndex` is less than `_oldestObservationIndex`, it means that we've wrapped around the circular buffer.\n       So the most recent observation will be at `_oldestObservationIndex + _cardinality - 1`, at the beginning of the circular buffer.\n @param _observations List of Observations to search through.\n @param _newestObservationIndex Index of the newest Observation. Right side of the circular buffer.\n @param _oldestObservationIndex Index of the oldest Observation. Left side of the circular buffer.\n @param _target Timestamp at which we are searching the Observation.\n @param _cardinality Cardinality of the circular buffer we are searching through.\n @param _time Timestamp at which we perform the binary search.\n @return beforeOrAt Observation recorded before, or at, the target.\n @return atOrAfter Observation recorded at, or after, the target."
									},
									"id": 4448,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "binarySearch",
									"nameLocation": "2391:12:15",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 4328,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4317,
												"mutability": "mutable",
												"name": "_observations",
												"nameLocation": "2450:13:15",
												"nodeType": "VariableDeclaration",
												"scope": 4448,
												"src": "2413:50:15",
												"stateVariable": false,
												"storageLocation": "storage",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
													"typeString": "struct ObservationLib.Observation[16777215]"
												},
												"typeName": {
													"baseType": {
														"id": 4314,
														"nodeType": "UserDefinedTypeName",
														"pathNode": {
															"id": 4313,
															"name": "Observation",
															"nodeType": "IdentifierPath",
															"referencedDeclaration": 4311,
															"src": "2413:11:15"
														},
														"referencedDeclaration": 4311,
														"src": "2413:11:15",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_Observation_$4311_storage_ptr",
															"typeString": "struct ObservationLib.Observation"
														}
													},
													"id": 4316,
													"length": {
														"id": 4315,
														"name": "MAX_CARDINALITY",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4306,
														"src": "2425:15:15",
														"typeDescriptions": {
															"typeIdentifier": "t_uint24",
															"typeString": "uint24"
														}
													},
													"nodeType": "ArrayTypeName",
													"src": "2413:28:15",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
														"typeString": "struct ObservationLib.Observation[16777215]"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4319,
												"mutability": "mutable",
												"name": "_newestObservationIndex",
												"nameLocation": "2480:23:15",
												"nodeType": "VariableDeclaration",
												"scope": 4448,
												"src": "2473:30:15",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint24",
													"typeString": "uint24"
												},
												"typeName": {
													"id": 4318,
													"name": "uint24",
													"nodeType": "ElementaryTypeName",
													"src": "2473:6:15",
													"typeDescriptions": {
														"typeIdentifier": "t_uint24",
														"typeString": "uint24"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4321,
												"mutability": "mutable",
												"name": "_oldestObservationIndex",
												"nameLocation": "2520:23:15",
												"nodeType": "VariableDeclaration",
												"scope": 4448,
												"src": "2513:30:15",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint24",
													"typeString": "uint24"
												},
												"typeName": {
													"id": 4320,
													"name": "uint24",
													"nodeType": "ElementaryTypeName",
													"src": "2513:6:15",
													"typeDescriptions": {
														"typeIdentifier": "t_uint24",
														"typeString": "uint24"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4323,
												"mutability": "mutable",
												"name": "_target",
												"nameLocation": "2560:7:15",
												"nodeType": "VariableDeclaration",
												"scope": 4448,
												"src": "2553:14:15",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint32",
													"typeString": "uint32"
												},
												"typeName": {
													"id": 4322,
													"name": "uint32",
													"nodeType": "ElementaryTypeName",
													"src": "2553:6:15",
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4325,
												"mutability": "mutable",
												"name": "_cardinality",
												"nameLocation": "2584:12:15",
												"nodeType": "VariableDeclaration",
												"scope": 4448,
												"src": "2577:19:15",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint24",
													"typeString": "uint24"
												},
												"typeName": {
													"id": 4324,
													"name": "uint24",
													"nodeType": "ElementaryTypeName",
													"src": "2577:6:15",
													"typeDescriptions": {
														"typeIdentifier": "t_uint24",
														"typeString": "uint24"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4327,
												"mutability": "mutable",
												"name": "_time",
												"nameLocation": "2613:5:15",
												"nodeType": "VariableDeclaration",
												"scope": 4448,
												"src": "2606:12:15",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint32",
													"typeString": "uint32"
												},
												"typeName": {
													"id": 4326,
													"name": "uint32",
													"nodeType": "ElementaryTypeName",
													"src": "2606:6:15",
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2403:221:15"
									},
									"returnParameters": {
										"id": 4335,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4331,
												"mutability": "mutable",
												"name": "beforeOrAt",
												"nameLocation": "2667:10:15",
												"nodeType": "VariableDeclaration",
												"scope": 4448,
												"src": "2648:29:15",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
													"typeString": "struct ObservationLib.Observation"
												},
												"typeName": {
													"id": 4330,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 4329,
														"name": "Observation",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4311,
														"src": "2648:11:15"
													},
													"referencedDeclaration": 4311,
													"src": "2648:11:15",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_Observation_$4311_storage_ptr",
														"typeString": "struct ObservationLib.Observation"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4334,
												"mutability": "mutable",
												"name": "atOrAfter",
												"nameLocation": "2698:9:15",
												"nodeType": "VariableDeclaration",
												"scope": 4448,
												"src": "2679:28:15",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
													"typeString": "struct ObservationLib.Observation"
												},
												"typeName": {
													"id": 4333,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 4332,
														"name": "Observation",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4311,
														"src": "2679:11:15"
													},
													"referencedDeclaration": 4311,
													"src": "2679:11:15",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_Observation_$4311_storage_ptr",
														"typeString": "struct ObservationLib.Observation"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2647:61:15"
									},
									"scope": 4449,
									"src": "2382:2006:15",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "internal"
								}
							],
							"scope": 4450,
							"src": "529:3861:15",
							"usedErrors": []
						}
					],
					"src": "37:4354:15"
				},
				"id": 15
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/OverflowSafeComparatorLib.sol": {
				"ast": {
					"absolutePath": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/OverflowSafeComparatorLib.sol",
					"exportedSymbols": {
						"OverflowSafeComparatorLib": [
							4621
						]
					},
					"id": 4622,
					"license": "GPL-3.0",
					"nodeType": "SourceUnit",
					"nodes": [
						{
							"id": 4451,
							"literals": [
								"solidity",
								"0.8",
								".6"
							],
							"nodeType": "PragmaDirective",
							"src": "37:22:16"
						},
						{
							"abstract": false,
							"baseContracts": [],
							"contractDependencies": [],
							"contractKind": "library",
							"documentation": {
								"id": 4452,
								"nodeType": "StructuredDocumentation",
								"src": "61:283:16",
								"text": "@title OverflowSafeComparatorLib library to share comparator functions between contracts\n @dev Code taken from Uniswap V3 Oracle.sol: https://github.com/Uniswap/v3-core/blob/3e88af408132fc957e3e406f65a0ce2b1ca06c3d/contracts/libraries/Oracle.sol\n @author PoolTogether Inc."
							},
							"fullyImplemented": true,
							"id": 4621,
							"linearizedBaseContracts": [
								4621
							],
							"name": "OverflowSafeComparatorLib",
							"nameLocation": "352:25:16",
							"nodeType": "ContractDefinition",
							"nodes": [
								{
									"body": {
										"id": 4506,
										"nodeType": "Block",
										"src": "923:301:16",
										"statements": [
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													},
													"id": 4470,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"commonType": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														},
														"id": 4466,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"leftExpression": {
															"id": 4464,
															"name": "_a",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4455,
															"src": "999:2:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"nodeType": "BinaryOperation",
														"operator": "<=",
														"rightExpression": {
															"id": 4465,
															"name": "_timestamp",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4459,
															"src": "1005:10:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"src": "999:16:16",
														"typeDescriptions": {
															"typeIdentifier": "t_bool",
															"typeString": "bool"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "&&",
													"rightExpression": {
														"commonType": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														},
														"id": 4469,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"leftExpression": {
															"id": 4467,
															"name": "_b",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4457,
															"src": "1019:2:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"nodeType": "BinaryOperation",
														"operator": "<=",
														"rightExpression": {
															"id": 4468,
															"name": "_timestamp",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4459,
															"src": "1025:10:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"src": "1019:16:16",
														"typeDescriptions": {
															"typeIdentifier": "t_bool",
															"typeString": "bool"
														}
													},
													"src": "999:36:16",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 4475,
												"nodeType": "IfStatement",
												"src": "995:56:16",
												"trueBody": {
													"expression": {
														"commonType": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														},
														"id": 4473,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"leftExpression": {
															"id": 4471,
															"name": "_a",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4455,
															"src": "1044:2:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"nodeType": "BinaryOperation",
														"operator": "<",
														"rightExpression": {
															"id": 4472,
															"name": "_b",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4457,
															"src": "1049:2:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"src": "1044:7:16",
														"typeDescriptions": {
															"typeIdentifier": "t_bool",
															"typeString": "bool"
														}
													},
													"functionReturnParameters": 4463,
													"id": 4474,
													"nodeType": "Return",
													"src": "1037:14:16"
												}
											},
											{
												"assignments": [
													4477
												],
												"declarations": [
													{
														"constant": false,
														"id": 4477,
														"mutability": "mutable",
														"name": "aAdjusted",
														"nameLocation": "1070:9:16",
														"nodeType": "VariableDeclaration",
														"scope": 4506,
														"src": "1062:17:16",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 4476,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "1062:7:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 4488,
												"initialValue": {
													"condition": {
														"commonType": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														},
														"id": 4480,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"leftExpression": {
															"id": 4478,
															"name": "_a",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4455,
															"src": "1082:2:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"nodeType": "BinaryOperation",
														"operator": ">",
														"rightExpression": {
															"id": 4479,
															"name": "_timestamp",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4459,
															"src": "1087:10:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"src": "1082:15:16",
														"typeDescriptions": {
															"typeIdentifier": "t_bool",
															"typeString": "bool"
														}
													},
													"falseExpression": {
														"commonType": {
															"typeIdentifier": "t_uint40",
															"typeString": "uint40"
														},
														"id": 4486,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"leftExpression": {
															"id": 4482,
															"name": "_a",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4455,
															"src": "1105:2:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"nodeType": "BinaryOperation",
														"operator": "+",
														"rightExpression": {
															"commonType": {
																"typeIdentifier": "t_rational_4294967296_by_1",
																"typeString": "int_const 4294967296"
															},
															"id": 4485,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"lValueRequested": false,
															"leftExpression": {
																"hexValue": "32",
																"id": 4483,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "1110:1:16",
																"typeDescriptions": {
																	"typeIdentifier": "t_rational_2_by_1",
																	"typeString": "int_const 2"
																},
																"value": "2"
															},
															"nodeType": "BinaryOperation",
															"operator": "**",
															"rightExpression": {
																"hexValue": "3332",
																"id": 4484,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "1113:2:16",
																"typeDescriptions": {
																	"typeIdentifier": "t_rational_32_by_1",
																	"typeString": "int_const 32"
																},
																"value": "32"
															},
															"src": "1110:5:16",
															"typeDescriptions": {
																"typeIdentifier": "t_rational_4294967296_by_1",
																"typeString": "int_const 4294967296"
															}
														},
														"src": "1105:10:16",
														"typeDescriptions": {
															"typeIdentifier": "t_uint40",
															"typeString": "uint40"
														}
													},
													"id": 4487,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"nodeType": "Conditional",
													"src": "1082:33:16",
													"trueExpression": {
														"id": 4481,
														"name": "_a",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4455,
														"src": "1100:2:16",
														"typeDescriptions": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														}
													},
													"typeDescriptions": {
														"typeIdentifier": "t_uint40",
														"typeString": "uint40"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "1062:53:16"
											},
											{
												"assignments": [
													4490
												],
												"declarations": [
													{
														"constant": false,
														"id": 4490,
														"mutability": "mutable",
														"name": "bAdjusted",
														"nameLocation": "1133:9:16",
														"nodeType": "VariableDeclaration",
														"scope": 4506,
														"src": "1125:17:16",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 4489,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "1125:7:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 4501,
												"initialValue": {
													"condition": {
														"commonType": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														},
														"id": 4493,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"leftExpression": {
															"id": 4491,
															"name": "_b",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4457,
															"src": "1145:2:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"nodeType": "BinaryOperation",
														"operator": ">",
														"rightExpression": {
															"id": 4492,
															"name": "_timestamp",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4459,
															"src": "1150:10:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"src": "1145:15:16",
														"typeDescriptions": {
															"typeIdentifier": "t_bool",
															"typeString": "bool"
														}
													},
													"falseExpression": {
														"commonType": {
															"typeIdentifier": "t_uint40",
															"typeString": "uint40"
														},
														"id": 4499,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"leftExpression": {
															"id": 4495,
															"name": "_b",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4457,
															"src": "1168:2:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"nodeType": "BinaryOperation",
														"operator": "+",
														"rightExpression": {
															"commonType": {
																"typeIdentifier": "t_rational_4294967296_by_1",
																"typeString": "int_const 4294967296"
															},
															"id": 4498,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"lValueRequested": false,
															"leftExpression": {
																"hexValue": "32",
																"id": 4496,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "1173:1:16",
																"typeDescriptions": {
																	"typeIdentifier": "t_rational_2_by_1",
																	"typeString": "int_const 2"
																},
																"value": "2"
															},
															"nodeType": "BinaryOperation",
															"operator": "**",
															"rightExpression": {
																"hexValue": "3332",
																"id": 4497,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "1176:2:16",
																"typeDescriptions": {
																	"typeIdentifier": "t_rational_32_by_1",
																	"typeString": "int_const 32"
																},
																"value": "32"
															},
															"src": "1173:5:16",
															"typeDescriptions": {
																"typeIdentifier": "t_rational_4294967296_by_1",
																"typeString": "int_const 4294967296"
															}
														},
														"src": "1168:10:16",
														"typeDescriptions": {
															"typeIdentifier": "t_uint40",
															"typeString": "uint40"
														}
													},
													"id": 4500,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"nodeType": "Conditional",
													"src": "1145:33:16",
													"trueExpression": {
														"id": 4494,
														"name": "_b",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4457,
														"src": "1163:2:16",
														"typeDescriptions": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														}
													},
													"typeDescriptions": {
														"typeIdentifier": "t_uint40",
														"typeString": "uint40"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "1125:53:16"
											},
											{
												"expression": {
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 4504,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 4502,
														"name": "aAdjusted",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4477,
														"src": "1196:9:16",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "<",
													"rightExpression": {
														"id": 4503,
														"name": "bAdjusted",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4490,
														"src": "1208:9:16",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"src": "1196:21:16",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"functionReturnParameters": 4463,
												"id": 4505,
												"nodeType": "Return",
												"src": "1189:28:16"
											}
										]
									},
									"documentation": {
										"id": 4453,
										"nodeType": "StructuredDocumentation",
										"src": "384:422:16",
										"text": "@notice 32-bit timestamps comparator.\n @dev safe for 0 or 1 overflows, `_a` and `_b` must be chronologically before or equal to time.\n @param _a A comparison timestamp from which to determine the relative position of `_timestamp`.\n @param _b Timestamp to compare against `_a`.\n @param _timestamp A timestamp truncated to 32 bits.\n @return bool Whether `_a` is chronologically < `_b`."
									},
									"id": 4507,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "lt",
									"nameLocation": "820:2:16",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 4460,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4455,
												"mutability": "mutable",
												"name": "_a",
												"nameLocation": "839:2:16",
												"nodeType": "VariableDeclaration",
												"scope": 4507,
												"src": "832:9:16",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint32",
													"typeString": "uint32"
												},
												"typeName": {
													"id": 4454,
													"name": "uint32",
													"nodeType": "ElementaryTypeName",
													"src": "832:6:16",
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4457,
												"mutability": "mutable",
												"name": "_b",
												"nameLocation": "858:2:16",
												"nodeType": "VariableDeclaration",
												"scope": 4507,
												"src": "851:9:16",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint32",
													"typeString": "uint32"
												},
												"typeName": {
													"id": 4456,
													"name": "uint32",
													"nodeType": "ElementaryTypeName",
													"src": "851:6:16",
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4459,
												"mutability": "mutable",
												"name": "_timestamp",
												"nameLocation": "877:10:16",
												"nodeType": "VariableDeclaration",
												"scope": 4507,
												"src": "870:17:16",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint32",
													"typeString": "uint32"
												},
												"typeName": {
													"id": 4458,
													"name": "uint32",
													"nodeType": "ElementaryTypeName",
													"src": "870:6:16",
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "822:71:16"
									},
									"returnParameters": {
										"id": 4463,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4462,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 4507,
												"src": "917:4:16",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bool",
													"typeString": "bool"
												},
												"typeName": {
													"id": 4461,
													"name": "bool",
													"nodeType": "ElementaryTypeName",
													"src": "917:4:16",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "916:6:16"
									},
									"scope": 4621,
									"src": "811:413:16",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 4561,
										"nodeType": "Block",
										"src": "1771:304:16",
										"statements": [
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													},
													"id": 4525,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"commonType": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														},
														"id": 4521,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"leftExpression": {
															"id": 4519,
															"name": "_a",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4510,
															"src": "1848:2:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"nodeType": "BinaryOperation",
														"operator": "<=",
														"rightExpression": {
															"id": 4520,
															"name": "_timestamp",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4514,
															"src": "1854:10:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"src": "1848:16:16",
														"typeDescriptions": {
															"typeIdentifier": "t_bool",
															"typeString": "bool"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "&&",
													"rightExpression": {
														"commonType": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														},
														"id": 4524,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"leftExpression": {
															"id": 4522,
															"name": "_b",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4512,
															"src": "1868:2:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"nodeType": "BinaryOperation",
														"operator": "<=",
														"rightExpression": {
															"id": 4523,
															"name": "_timestamp",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4514,
															"src": "1874:10:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"src": "1868:16:16",
														"typeDescriptions": {
															"typeIdentifier": "t_bool",
															"typeString": "bool"
														}
													},
													"src": "1848:36:16",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 4530,
												"nodeType": "IfStatement",
												"src": "1844:57:16",
												"trueBody": {
													"expression": {
														"commonType": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														},
														"id": 4528,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"leftExpression": {
															"id": 4526,
															"name": "_a",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4510,
															"src": "1893:2:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"nodeType": "BinaryOperation",
														"operator": "<=",
														"rightExpression": {
															"id": 4527,
															"name": "_b",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4512,
															"src": "1899:2:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"src": "1893:8:16",
														"typeDescriptions": {
															"typeIdentifier": "t_bool",
															"typeString": "bool"
														}
													},
													"functionReturnParameters": 4518,
													"id": 4529,
													"nodeType": "Return",
													"src": "1886:15:16"
												}
											},
											{
												"assignments": [
													4532
												],
												"declarations": [
													{
														"constant": false,
														"id": 4532,
														"mutability": "mutable",
														"name": "aAdjusted",
														"nameLocation": "1920:9:16",
														"nodeType": "VariableDeclaration",
														"scope": 4561,
														"src": "1912:17:16",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 4531,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "1912:7:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 4543,
												"initialValue": {
													"condition": {
														"commonType": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														},
														"id": 4535,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"leftExpression": {
															"id": 4533,
															"name": "_a",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4510,
															"src": "1932:2:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"nodeType": "BinaryOperation",
														"operator": ">",
														"rightExpression": {
															"id": 4534,
															"name": "_timestamp",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4514,
															"src": "1937:10:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"src": "1932:15:16",
														"typeDescriptions": {
															"typeIdentifier": "t_bool",
															"typeString": "bool"
														}
													},
													"falseExpression": {
														"commonType": {
															"typeIdentifier": "t_uint40",
															"typeString": "uint40"
														},
														"id": 4541,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"leftExpression": {
															"id": 4537,
															"name": "_a",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4510,
															"src": "1955:2:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"nodeType": "BinaryOperation",
														"operator": "+",
														"rightExpression": {
															"commonType": {
																"typeIdentifier": "t_rational_4294967296_by_1",
																"typeString": "int_const 4294967296"
															},
															"id": 4540,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"lValueRequested": false,
															"leftExpression": {
																"hexValue": "32",
																"id": 4538,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "1960:1:16",
																"typeDescriptions": {
																	"typeIdentifier": "t_rational_2_by_1",
																	"typeString": "int_const 2"
																},
																"value": "2"
															},
															"nodeType": "BinaryOperation",
															"operator": "**",
															"rightExpression": {
																"hexValue": "3332",
																"id": 4539,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "1963:2:16",
																"typeDescriptions": {
																	"typeIdentifier": "t_rational_32_by_1",
																	"typeString": "int_const 32"
																},
																"value": "32"
															},
															"src": "1960:5:16",
															"typeDescriptions": {
																"typeIdentifier": "t_rational_4294967296_by_1",
																"typeString": "int_const 4294967296"
															}
														},
														"src": "1955:10:16",
														"typeDescriptions": {
															"typeIdentifier": "t_uint40",
															"typeString": "uint40"
														}
													},
													"id": 4542,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"nodeType": "Conditional",
													"src": "1932:33:16",
													"trueExpression": {
														"id": 4536,
														"name": "_a",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4510,
														"src": "1950:2:16",
														"typeDescriptions": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														}
													},
													"typeDescriptions": {
														"typeIdentifier": "t_uint40",
														"typeString": "uint40"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "1912:53:16"
											},
											{
												"assignments": [
													4545
												],
												"declarations": [
													{
														"constant": false,
														"id": 4545,
														"mutability": "mutable",
														"name": "bAdjusted",
														"nameLocation": "1983:9:16",
														"nodeType": "VariableDeclaration",
														"scope": 4561,
														"src": "1975:17:16",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 4544,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "1975:7:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 4556,
												"initialValue": {
													"condition": {
														"commonType": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														},
														"id": 4548,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"leftExpression": {
															"id": 4546,
															"name": "_b",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4512,
															"src": "1995:2:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"nodeType": "BinaryOperation",
														"operator": ">",
														"rightExpression": {
															"id": 4547,
															"name": "_timestamp",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4514,
															"src": "2000:10:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"src": "1995:15:16",
														"typeDescriptions": {
															"typeIdentifier": "t_bool",
															"typeString": "bool"
														}
													},
													"falseExpression": {
														"commonType": {
															"typeIdentifier": "t_uint40",
															"typeString": "uint40"
														},
														"id": 4554,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"leftExpression": {
															"id": 4550,
															"name": "_b",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4512,
															"src": "2018:2:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"nodeType": "BinaryOperation",
														"operator": "+",
														"rightExpression": {
															"commonType": {
																"typeIdentifier": "t_rational_4294967296_by_1",
																"typeString": "int_const 4294967296"
															},
															"id": 4553,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"lValueRequested": false,
															"leftExpression": {
																"hexValue": "32",
																"id": 4551,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "2023:1:16",
																"typeDescriptions": {
																	"typeIdentifier": "t_rational_2_by_1",
																	"typeString": "int_const 2"
																},
																"value": "2"
															},
															"nodeType": "BinaryOperation",
															"operator": "**",
															"rightExpression": {
																"hexValue": "3332",
																"id": 4552,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "2026:2:16",
																"typeDescriptions": {
																	"typeIdentifier": "t_rational_32_by_1",
																	"typeString": "int_const 32"
																},
																"value": "32"
															},
															"src": "2023:5:16",
															"typeDescriptions": {
																"typeIdentifier": "t_rational_4294967296_by_1",
																"typeString": "int_const 4294967296"
															}
														},
														"src": "2018:10:16",
														"typeDescriptions": {
															"typeIdentifier": "t_uint40",
															"typeString": "uint40"
														}
													},
													"id": 4555,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"nodeType": "Conditional",
													"src": "1995:33:16",
													"trueExpression": {
														"id": 4549,
														"name": "_b",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4512,
														"src": "2013:2:16",
														"typeDescriptions": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														}
													},
													"typeDescriptions": {
														"typeIdentifier": "t_uint40",
														"typeString": "uint40"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "1975:53:16"
											},
											{
												"expression": {
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 4559,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 4557,
														"name": "aAdjusted",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4532,
														"src": "2046:9:16",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "<=",
													"rightExpression": {
														"id": 4558,
														"name": "bAdjusted",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4545,
														"src": "2059:9:16",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"src": "2046:22:16",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"functionReturnParameters": 4518,
												"id": 4560,
												"nodeType": "Return",
												"src": "2039:29:16"
											}
										]
									},
									"documentation": {
										"id": 4508,
										"nodeType": "StructuredDocumentation",
										"src": "1230:423:16",
										"text": "@notice 32-bit timestamps comparator.\n @dev safe for 0 or 1 overflows, `_a` and `_b` must be chronologically before or equal to time.\n @param _a A comparison timestamp from which to determine the relative position of `_timestamp`.\n @param _b Timestamp to compare against `_a`.\n @param _timestamp A timestamp truncated to 32 bits.\n @return bool Whether `_a` is chronologically <= `_b`."
									},
									"id": 4562,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "lte",
									"nameLocation": "1667:3:16",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 4515,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4510,
												"mutability": "mutable",
												"name": "_a",
												"nameLocation": "1687:2:16",
												"nodeType": "VariableDeclaration",
												"scope": 4562,
												"src": "1680:9:16",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint32",
													"typeString": "uint32"
												},
												"typeName": {
													"id": 4509,
													"name": "uint32",
													"nodeType": "ElementaryTypeName",
													"src": "1680:6:16",
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4512,
												"mutability": "mutable",
												"name": "_b",
												"nameLocation": "1706:2:16",
												"nodeType": "VariableDeclaration",
												"scope": 4562,
												"src": "1699:9:16",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint32",
													"typeString": "uint32"
												},
												"typeName": {
													"id": 4511,
													"name": "uint32",
													"nodeType": "ElementaryTypeName",
													"src": "1699:6:16",
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4514,
												"mutability": "mutable",
												"name": "_timestamp",
												"nameLocation": "1725:10:16",
												"nodeType": "VariableDeclaration",
												"scope": 4562,
												"src": "1718:17:16",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint32",
													"typeString": "uint32"
												},
												"typeName": {
													"id": 4513,
													"name": "uint32",
													"nodeType": "ElementaryTypeName",
													"src": "1718:6:16",
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1670:71:16"
									},
									"returnParameters": {
										"id": 4518,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4517,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 4562,
												"src": "1765:4:16",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bool",
													"typeString": "bool"
												},
												"typeName": {
													"id": 4516,
													"name": "bool",
													"nodeType": "ElementaryTypeName",
													"src": "1765:4:16",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1764:6:16"
									},
									"scope": 4621,
									"src": "1658:417:16",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 4619,
										"nodeType": "Block",
										"src": "2608:310:16",
										"statements": [
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													},
													"id": 4580,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"commonType": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														},
														"id": 4576,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"leftExpression": {
															"id": 4574,
															"name": "_a",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4565,
															"src": "2685:2:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"nodeType": "BinaryOperation",
														"operator": "<=",
														"rightExpression": {
															"id": 4575,
															"name": "_timestamp",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4569,
															"src": "2691:10:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"src": "2685:16:16",
														"typeDescriptions": {
															"typeIdentifier": "t_bool",
															"typeString": "bool"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "&&",
													"rightExpression": {
														"commonType": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														},
														"id": 4579,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"leftExpression": {
															"id": 4577,
															"name": "_b",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4567,
															"src": "2705:2:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"nodeType": "BinaryOperation",
														"operator": "<=",
														"rightExpression": {
															"id": 4578,
															"name": "_timestamp",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4569,
															"src": "2711:10:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"src": "2705:16:16",
														"typeDescriptions": {
															"typeIdentifier": "t_bool",
															"typeString": "bool"
														}
													},
													"src": "2685:36:16",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 4585,
												"nodeType": "IfStatement",
												"src": "2681:56:16",
												"trueBody": {
													"expression": {
														"commonType": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														},
														"id": 4583,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"leftExpression": {
															"id": 4581,
															"name": "_a",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4565,
															"src": "2730:2:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"nodeType": "BinaryOperation",
														"operator": "-",
														"rightExpression": {
															"id": 4582,
															"name": "_b",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4567,
															"src": "2735:2:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"src": "2730:7:16",
														"typeDescriptions": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														}
													},
													"functionReturnParameters": 4573,
													"id": 4584,
													"nodeType": "Return",
													"src": "2723:14:16"
												}
											},
											{
												"assignments": [
													4587
												],
												"declarations": [
													{
														"constant": false,
														"id": 4587,
														"mutability": "mutable",
														"name": "aAdjusted",
														"nameLocation": "2756:9:16",
														"nodeType": "VariableDeclaration",
														"scope": 4619,
														"src": "2748:17:16",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 4586,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "2748:7:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 4598,
												"initialValue": {
													"condition": {
														"commonType": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														},
														"id": 4590,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"leftExpression": {
															"id": 4588,
															"name": "_a",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4565,
															"src": "2768:2:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"nodeType": "BinaryOperation",
														"operator": ">",
														"rightExpression": {
															"id": 4589,
															"name": "_timestamp",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4569,
															"src": "2773:10:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"src": "2768:15:16",
														"typeDescriptions": {
															"typeIdentifier": "t_bool",
															"typeString": "bool"
														}
													},
													"falseExpression": {
														"commonType": {
															"typeIdentifier": "t_uint40",
															"typeString": "uint40"
														},
														"id": 4596,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"leftExpression": {
															"id": 4592,
															"name": "_a",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4565,
															"src": "2791:2:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"nodeType": "BinaryOperation",
														"operator": "+",
														"rightExpression": {
															"commonType": {
																"typeIdentifier": "t_rational_4294967296_by_1",
																"typeString": "int_const 4294967296"
															},
															"id": 4595,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"lValueRequested": false,
															"leftExpression": {
																"hexValue": "32",
																"id": 4593,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "2796:1:16",
																"typeDescriptions": {
																	"typeIdentifier": "t_rational_2_by_1",
																	"typeString": "int_const 2"
																},
																"value": "2"
															},
															"nodeType": "BinaryOperation",
															"operator": "**",
															"rightExpression": {
																"hexValue": "3332",
																"id": 4594,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "2799:2:16",
																"typeDescriptions": {
																	"typeIdentifier": "t_rational_32_by_1",
																	"typeString": "int_const 32"
																},
																"value": "32"
															},
															"src": "2796:5:16",
															"typeDescriptions": {
																"typeIdentifier": "t_rational_4294967296_by_1",
																"typeString": "int_const 4294967296"
															}
														},
														"src": "2791:10:16",
														"typeDescriptions": {
															"typeIdentifier": "t_uint40",
															"typeString": "uint40"
														}
													},
													"id": 4597,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"nodeType": "Conditional",
													"src": "2768:33:16",
													"trueExpression": {
														"id": 4591,
														"name": "_a",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4565,
														"src": "2786:2:16",
														"typeDescriptions": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														}
													},
													"typeDescriptions": {
														"typeIdentifier": "t_uint40",
														"typeString": "uint40"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "2748:53:16"
											},
											{
												"assignments": [
													4600
												],
												"declarations": [
													{
														"constant": false,
														"id": 4600,
														"mutability": "mutable",
														"name": "bAdjusted",
														"nameLocation": "2819:9:16",
														"nodeType": "VariableDeclaration",
														"scope": 4619,
														"src": "2811:17:16",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 4599,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "2811:7:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 4611,
												"initialValue": {
													"condition": {
														"commonType": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														},
														"id": 4603,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"leftExpression": {
															"id": 4601,
															"name": "_b",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4567,
															"src": "2831:2:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"nodeType": "BinaryOperation",
														"operator": ">",
														"rightExpression": {
															"id": 4602,
															"name": "_timestamp",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4569,
															"src": "2836:10:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"src": "2831:15:16",
														"typeDescriptions": {
															"typeIdentifier": "t_bool",
															"typeString": "bool"
														}
													},
													"falseExpression": {
														"commonType": {
															"typeIdentifier": "t_uint40",
															"typeString": "uint40"
														},
														"id": 4609,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"leftExpression": {
															"id": 4605,
															"name": "_b",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4567,
															"src": "2854:2:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"nodeType": "BinaryOperation",
														"operator": "+",
														"rightExpression": {
															"commonType": {
																"typeIdentifier": "t_rational_4294967296_by_1",
																"typeString": "int_const 4294967296"
															},
															"id": 4608,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"lValueRequested": false,
															"leftExpression": {
																"hexValue": "32",
																"id": 4606,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "2859:1:16",
																"typeDescriptions": {
																	"typeIdentifier": "t_rational_2_by_1",
																	"typeString": "int_const 2"
																},
																"value": "2"
															},
															"nodeType": "BinaryOperation",
															"operator": "**",
															"rightExpression": {
																"hexValue": "3332",
																"id": 4607,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "2862:2:16",
																"typeDescriptions": {
																	"typeIdentifier": "t_rational_32_by_1",
																	"typeString": "int_const 32"
																},
																"value": "32"
															},
															"src": "2859:5:16",
															"typeDescriptions": {
																"typeIdentifier": "t_rational_4294967296_by_1",
																"typeString": "int_const 4294967296"
															}
														},
														"src": "2854:10:16",
														"typeDescriptions": {
															"typeIdentifier": "t_uint40",
															"typeString": "uint40"
														}
													},
													"id": 4610,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"nodeType": "Conditional",
													"src": "2831:33:16",
													"trueExpression": {
														"id": 4604,
														"name": "_b",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4567,
														"src": "2849:2:16",
														"typeDescriptions": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														}
													},
													"typeDescriptions": {
														"typeIdentifier": "t_uint40",
														"typeString": "uint40"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "2811:53:16"
											},
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 4616,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 4614,
																"name": "aAdjusted",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 4587,
																"src": "2889:9:16",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "-",
															"rightExpression": {
																"id": 4615,
																"name": "bAdjusted",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 4600,
																"src": "2901:9:16",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"src": "2889:21:16",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 4613,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "2882:6:16",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint32_$",
															"typeString": "type(uint32)"
														},
														"typeName": {
															"id": 4612,
															"name": "uint32",
															"nodeType": "ElementaryTypeName",
															"src": "2882:6:16",
															"typeDescriptions": {}
														}
													},
													"id": 4617,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "2882:29:16",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"functionReturnParameters": 4573,
												"id": 4618,
												"nodeType": "Return",
												"src": "2875:36:16"
											}
										]
									},
									"documentation": {
										"id": 4563,
										"nodeType": "StructuredDocumentation",
										"src": "2081:400:16",
										"text": "@notice 32-bit timestamp subtractor\n @dev safe for 0 or 1 overflows, where `_a` and `_b` must be chronologically before or equal to time\n @param _a The subtraction left operand\n @param _b The subtraction right operand\n @param _timestamp The current time.  Expected to be chronologically after both.\n @return The difference between a and b, adjusted for overflow"
									},
									"id": 4620,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "checkedSub",
									"nameLocation": "2495:10:16",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 4570,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4565,
												"mutability": "mutable",
												"name": "_a",
												"nameLocation": "2522:2:16",
												"nodeType": "VariableDeclaration",
												"scope": 4620,
												"src": "2515:9:16",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint32",
													"typeString": "uint32"
												},
												"typeName": {
													"id": 4564,
													"name": "uint32",
													"nodeType": "ElementaryTypeName",
													"src": "2515:6:16",
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4567,
												"mutability": "mutable",
												"name": "_b",
												"nameLocation": "2541:2:16",
												"nodeType": "VariableDeclaration",
												"scope": 4620,
												"src": "2534:9:16",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint32",
													"typeString": "uint32"
												},
												"typeName": {
													"id": 4566,
													"name": "uint32",
													"nodeType": "ElementaryTypeName",
													"src": "2534:6:16",
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4569,
												"mutability": "mutable",
												"name": "_timestamp",
												"nameLocation": "2560:10:16",
												"nodeType": "VariableDeclaration",
												"scope": 4620,
												"src": "2553:17:16",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint32",
													"typeString": "uint32"
												},
												"typeName": {
													"id": 4568,
													"name": "uint32",
													"nodeType": "ElementaryTypeName",
													"src": "2553:6:16",
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2505:71:16"
									},
									"returnParameters": {
										"id": 4573,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4572,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 4620,
												"src": "2600:6:16",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint32",
													"typeString": "uint32"
												},
												"typeName": {
													"id": 4571,
													"name": "uint32",
													"nodeType": "ElementaryTypeName",
													"src": "2600:6:16",
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2599:8:16"
									},
									"scope": 4621,
									"src": "2486:432:16",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								}
							],
							"scope": 4622,
							"src": "344:2576:16",
							"usedErrors": []
						}
					],
					"src": "37:2884:16"
				},
				"id": 16
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/RingBufferLib.sol": {
				"ast": {
					"absolutePath": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/RingBufferLib.sol",
					"exportedSymbols": {
						"RingBufferLib": [
							4706
						]
					},
					"id": 4707,
					"license": "GPL-3.0",
					"nodeType": "SourceUnit",
					"nodes": [
						{
							"id": 4623,
							"literals": [
								"solidity",
								"0.8",
								".6"
							],
							"nodeType": "PragmaDirective",
							"src": "37:22:17"
						},
						{
							"abstract": false,
							"baseContracts": [],
							"contractDependencies": [],
							"contractKind": "library",
							"fullyImplemented": true,
							"id": 4706,
							"linearizedBaseContracts": [
								4706
							],
							"name": "RingBufferLib",
							"nameLocation": "69:13:17",
							"nodeType": "ContractDefinition",
							"nodes": [
								{
									"body": {
										"id": 4637,
										"nodeType": "Block",
										"src": "664:45:17",
										"statements": [
											{
												"expression": {
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 4635,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 4633,
														"name": "_index",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4626,
														"src": "681:6:17",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "%",
													"rightExpression": {
														"id": 4634,
														"name": "_cardinality",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4628,
														"src": "690:12:17",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"src": "681:21:17",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"functionReturnParameters": 4632,
												"id": 4636,
												"nodeType": "Return",
												"src": "674:28:17"
											}
										]
									},
									"documentation": {
										"id": 4624,
										"nodeType": "StructuredDocumentation",
										"src": "89:486:17",
										"text": " @notice Returns wrapped TWAB index.\n @dev  In order to navigate the TWAB circular buffer, we need to use the modulo operator.\n @dev  For example, if `_index` is equal to 32 and the TWAB circular buffer is of `_cardinality` 32,\n       it will return 0 and will point to the first element of the array.\n @param _index Index used to navigate through the TWAB circular buffer.\n @param _cardinality TWAB buffer cardinality.\n @return TWAB index."
									},
									"id": 4638,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "wrap",
									"nameLocation": "589:4:17",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 4629,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4626,
												"mutability": "mutable",
												"name": "_index",
												"nameLocation": "602:6:17",
												"nodeType": "VariableDeclaration",
												"scope": 4638,
												"src": "594:14:17",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 4625,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "594:7:17",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4628,
												"mutability": "mutable",
												"name": "_cardinality",
												"nameLocation": "618:12:17",
												"nodeType": "VariableDeclaration",
												"scope": 4638,
												"src": "610:20:17",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 4627,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "610:7:17",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "593:38:17"
									},
									"returnParameters": {
										"id": 4632,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4631,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 4638,
												"src": "655:7:17",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 4630,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "655:7:17",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "654:9:17"
									},
									"scope": 4706,
									"src": "580:129:17",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 4659,
										"nodeType": "Block",
										"src": "1319:75:17",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 4655,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"commonType": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																},
																"id": 4653,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 4651,
																	"name": "_index",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 4641,
																	"src": "1341:6:17",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "+",
																"rightExpression": {
																	"id": 4652,
																	"name": "_cardinality",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 4645,
																	"src": "1350:12:17",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"src": "1341:21:17",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "-",
															"rightExpression": {
																"id": 4654,
																"name": "_amount",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 4643,
																"src": "1365:7:17",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"src": "1341:31:17",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														{
															"id": 4656,
															"name": "_cardinality",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4645,
															"src": "1374:12:17",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 4650,
														"name": "wrap",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4638,
														"src": "1336:4:17",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
															"typeString": "function (uint256,uint256) pure returns (uint256)"
														}
													},
													"id": 4657,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "1336:51:17",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"functionReturnParameters": 4649,
												"id": 4658,
												"nodeType": "Return",
												"src": "1329:58:17"
											}
										]
									},
									"documentation": {
										"id": 4639,
										"nodeType": "StructuredDocumentation",
										"src": "715:466:17",
										"text": " @notice Computes the negative offset from the given index, wrapped by the cardinality.\n @dev  We add `_cardinality` to `_index` to be able to offset even if `_amount` is superior to `_cardinality`.\n @param _index The index from which to offset\n @param _amount The number of indices to offset.  This is subtracted from the given index.\n @param _cardinality The number of elements in the ring buffer\n @return Offsetted index."
									},
									"id": 4660,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "offset",
									"nameLocation": "1195:6:17",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 4646,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4641,
												"mutability": "mutable",
												"name": "_index",
												"nameLocation": "1219:6:17",
												"nodeType": "VariableDeclaration",
												"scope": 4660,
												"src": "1211:14:17",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 4640,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1211:7:17",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4643,
												"mutability": "mutable",
												"name": "_amount",
												"nameLocation": "1243:7:17",
												"nodeType": "VariableDeclaration",
												"scope": 4660,
												"src": "1235:15:17",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 4642,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1235:7:17",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4645,
												"mutability": "mutable",
												"name": "_cardinality",
												"nameLocation": "1268:12:17",
												"nodeType": "VariableDeclaration",
												"scope": 4660,
												"src": "1260:20:17",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 4644,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1260:7:17",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1201:85:17"
									},
									"returnParameters": {
										"id": 4649,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4648,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 4660,
												"src": "1310:7:17",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 4647,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1310:7:17",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1309:9:17"
									},
									"scope": 4706,
									"src": "1186:208:17",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 4686,
										"nodeType": "Block",
										"src": "1789:139:17",
										"statements": [
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 4672,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 4670,
														"name": "_cardinality",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4665,
														"src": "1803:12:17",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "==",
													"rightExpression": {
														"hexValue": "30",
														"id": 4671,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "number",
														"lValueRequested": false,
														"nodeType": "Literal",
														"src": "1819:1:17",
														"typeDescriptions": {
															"typeIdentifier": "t_rational_0_by_1",
															"typeString": "int_const 0"
														},
														"value": "0"
													},
													"src": "1803:17:17",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 4676,
												"nodeType": "IfStatement",
												"src": "1799:56:17",
												"trueBody": {
													"id": 4675,
													"nodeType": "Block",
													"src": "1822:33:17",
													"statements": [
														{
															"expression": {
																"hexValue": "30",
																"id": 4673,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "1843:1:17",
																"typeDescriptions": {
																	"typeIdentifier": "t_rational_0_by_1",
																	"typeString": "int_const 0"
																},
																"value": "0"
															},
															"functionReturnParameters": 4669,
															"id": 4674,
															"nodeType": "Return",
															"src": "1836:8:17"
														}
													]
												}
											},
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 4682,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"commonType": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																},
																"id": 4680,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 4678,
																	"name": "_nextIndex",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 4663,
																	"src": "1877:10:17",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "+",
																"rightExpression": {
																	"id": 4679,
																	"name": "_cardinality",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 4665,
																	"src": "1890:12:17",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"src": "1877:25:17",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "-",
															"rightExpression": {
																"hexValue": "31",
																"id": 4681,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "1905:1:17",
																"typeDescriptions": {
																	"typeIdentifier": "t_rational_1_by_1",
																	"typeString": "int_const 1"
																},
																"value": "1"
															},
															"src": "1877:29:17",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														{
															"id": 4683,
															"name": "_cardinality",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4665,
															"src": "1908:12:17",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 4677,
														"name": "wrap",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4638,
														"src": "1872:4:17",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
															"typeString": "function (uint256,uint256) pure returns (uint256)"
														}
													},
													"id": 4684,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "1872:49:17",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"functionReturnParameters": 4669,
												"id": 4685,
												"nodeType": "Return",
												"src": "1865:56:17"
											}
										]
									},
									"documentation": {
										"id": 4661,
										"nodeType": "StructuredDocumentation",
										"src": "1400:261:17",
										"text": "@notice Returns the index of the last recorded TWAB\n @param _nextIndex The next available twab index.  This will be recorded to next.\n @param _cardinality The cardinality of the TWAB history.\n @return The index of the last recorded TWAB"
									},
									"id": 4687,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "newestIndex",
									"nameLocation": "1675:11:17",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 4666,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4663,
												"mutability": "mutable",
												"name": "_nextIndex",
												"nameLocation": "1695:10:17",
												"nodeType": "VariableDeclaration",
												"scope": 4687,
												"src": "1687:18:17",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 4662,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1687:7:17",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4665,
												"mutability": "mutable",
												"name": "_cardinality",
												"nameLocation": "1715:12:17",
												"nodeType": "VariableDeclaration",
												"scope": 4687,
												"src": "1707:20:17",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 4664,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1707:7:17",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1686:42:17"
									},
									"returnParameters": {
										"id": 4669,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4668,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 4687,
												"src": "1776:7:17",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 4667,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1776:7:17",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1775:9:17"
									},
									"scope": 4706,
									"src": "1666:262:17",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 4704,
										"nodeType": "Block",
										"src": "2380:54:17",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 4700,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 4698,
																"name": "_index",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 4690,
																"src": "2402:6:17",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "+",
															"rightExpression": {
																"hexValue": "31",
																"id": 4699,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "2411:1:17",
																"typeDescriptions": {
																	"typeIdentifier": "t_rational_1_by_1",
																	"typeString": "int_const 1"
																},
																"value": "1"
															},
															"src": "2402:10:17",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														{
															"id": 4701,
															"name": "_cardinality",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4692,
															"src": "2414:12:17",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 4697,
														"name": "wrap",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4638,
														"src": "2397:4:17",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
															"typeString": "function (uint256,uint256) pure returns (uint256)"
														}
													},
													"id": 4702,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "2397:30:17",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"functionReturnParameters": 4696,
												"id": 4703,
												"nodeType": "Return",
												"src": "2390:37:17"
											}
										]
									},
									"documentation": {
										"id": 4688,
										"nodeType": "StructuredDocumentation",
										"src": "1934:324:17",
										"text": "@notice Computes the ring buffer index that follows the given one, wrapped by cardinality\n @param _index The index to increment\n @param _cardinality The number of elements in the Ring Buffer\n @return The next index relative to the given index.  Will wrap around to 0 if the next index == cardinality"
									},
									"id": 4705,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "nextIndex",
									"nameLocation": "2272:9:17",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 4693,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4690,
												"mutability": "mutable",
												"name": "_index",
												"nameLocation": "2290:6:17",
												"nodeType": "VariableDeclaration",
												"scope": 4705,
												"src": "2282:14:17",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 4689,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "2282:7:17",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4692,
												"mutability": "mutable",
												"name": "_cardinality",
												"nameLocation": "2306:12:17",
												"nodeType": "VariableDeclaration",
												"scope": 4705,
												"src": "2298:20:17",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 4691,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "2298:7:17",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2281:38:17"
									},
									"returnParameters": {
										"id": 4696,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4695,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 4705,
												"src": "2367:7:17",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 4694,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "2367:7:17",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2366:9:17"
									},
									"scope": 4706,
									"src": "2263:171:17",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								}
							],
							"scope": 4707,
							"src": "61:2375:17",
							"usedErrors": []
						}
					],
					"src": "37:2400:17"
				},
				"id": 17
			},
			"Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/TwabLib.sol": {
				"ast": {
					"absolutePath": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/TwabLib.sol",
					"exportedSymbols": {
						"ExtendedSafeCastLib": [
							4290
						],
						"ObservationLib": [
							4449
						],
						"OverflowSafeComparatorLib": [
							4621
						],
						"RingBufferLib": [
							4706
						],
						"SafeCast": [
							2595
						],
						"TwabLib": [
							5456
						]
					},
					"id": 5457,
					"license": "GPL-3.0",
					"nodeType": "SourceUnit",
					"nodes": [
						{
							"id": 4708,
							"literals": [
								"solidity",
								"0.8",
								".6"
							],
							"nodeType": "PragmaDirective",
							"src": "37:22:18"
						},
						{
							"absolutePath": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/ExtendedSafeCastLib.sol",
							"file": "./ExtendedSafeCastLib.sol",
							"id": 4709,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 5457,
							"sourceUnit": 4291,
							"src": "61:35:18",
							"symbolAliases": [],
							"unitAlias": ""
						},
						{
							"absolutePath": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/OverflowSafeComparatorLib.sol",
							"file": "./OverflowSafeComparatorLib.sol",
							"id": 4710,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 5457,
							"sourceUnit": 4622,
							"src": "97:41:18",
							"symbolAliases": [],
							"unitAlias": ""
						},
						{
							"absolutePath": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/RingBufferLib.sol",
							"file": "./RingBufferLib.sol",
							"id": 4711,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 5457,
							"sourceUnit": 4707,
							"src": "139:29:18",
							"symbolAliases": [],
							"unitAlias": ""
						},
						{
							"absolutePath": "Users/pierrickturelier/Documents/00-Work/00-PoolTogether/v4/v4-core/contracts/libraries/ObservationLib.sol",
							"file": "./ObservationLib.sol",
							"id": 4712,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 5457,
							"sourceUnit": 4450,
							"src": "169:30:18",
							"symbolAliases": [],
							"unitAlias": ""
						},
						{
							"abstract": false,
							"baseContracts": [],
							"contractDependencies": [],
							"contractKind": "library",
							"documentation": {
								"id": 4713,
								"nodeType": "StructuredDocumentation",
								"src": "201:732:18",
								"text": " @title  PoolTogether V4 TwabLib (Library)\n @author PoolTogether Inc Team\n @dev    Time-Weighted Average Balance Library for ERC20 tokens.\n @notice This TwabLib adds on-chain historical lookups to a user(s) time-weighted average balance.\nEach user is mapped to an Account struct containing the TWAB history (ring buffer) and\nring buffer parameters. Every token.transfer() creates a new TWAB checkpoint. The new TWAB\ncheckpoint is stored in the circular ring buffer, as either a new checkpoint or rewriting\na previous checkpoint with new parameters. The TwabLib (using existing blocktimes of 1block/15sec)\nguarantees minimum 7.4 years of search history."
							},
							"fullyImplemented": true,
							"id": 5456,
							"linearizedBaseContracts": [
								5456
							],
							"name": "TwabLib",
							"nameLocation": "942:7:18",
							"nodeType": "ContractDefinition",
							"nodes": [
								{
									"id": 4716,
									"libraryName": {
										"id": 4714,
										"name": "OverflowSafeComparatorLib",
										"nodeType": "IdentifierPath",
										"referencedDeclaration": 4621,
										"src": "962:25:18"
									},
									"nodeType": "UsingForDirective",
									"src": "956:43:18",
									"typeName": {
										"id": 4715,
										"name": "uint32",
										"nodeType": "ElementaryTypeName",
										"src": "992:6:18",
										"typeDescriptions": {
											"typeIdentifier": "t_uint32",
											"typeString": "uint32"
										}
									}
								},
								{
									"id": 4719,
									"libraryName": {
										"id": 4717,
										"name": "ExtendedSafeCastLib",
										"nodeType": "IdentifierPath",
										"referencedDeclaration": 4290,
										"src": "1010:19:18"
									},
									"nodeType": "UsingForDirective",
									"src": "1004:38:18",
									"typeName": {
										"id": 4718,
										"name": "uint256",
										"nodeType": "ElementaryTypeName",
										"src": "1034:7:18",
										"typeDescriptions": {
											"typeIdentifier": "t_uint256",
											"typeString": "uint256"
										}
									}
								},
								{
									"constant": true,
									"documentation": {
										"id": 4720,
										"nodeType": "StructuredDocumentation",
										"src": "1048:971:18",
										"text": " @notice Sets max ring buffer length in the Account.twabs Observation list.\nAs users transfer/mint/burn tickets new Observation checkpoints are\nrecorded. The current max cardinality guarantees a seven year minimum,\nof accurate historical lookups with current estimates of 1 new block\nevery 15 seconds - assuming each block contains a transfer to trigger an\nobservation write to storage.\n @dev    The user Account.AccountDetails.cardinality parameter can NOT exceed\nthe max cardinality variable. Preventing \"corrupted\" ring buffer lookup\npointers and new observation checkpoints.\nThe MAX_CARDINALITY in fact guarantees at least 7.4 years of records:\nIf 14 = block time in seconds\n(2**24) * 14 = 234881024 seconds of history\n234881024 / (365 * 24 * 60 * 60) ~= 7.44 years"
									},
									"functionSelector": "8200d873",
									"id": 4723,
									"mutability": "constant",
									"name": "MAX_CARDINALITY",
									"nameLocation": "2047:15:18",
									"nodeType": "VariableDeclaration",
									"scope": 5456,
									"src": "2024:49:18",
									"stateVariable": true,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_uint24",
										"typeString": "uint24"
									},
									"typeName": {
										"id": 4721,
										"name": "uint24",
										"nodeType": "ElementaryTypeName",
										"src": "2024:6:18",
										"typeDescriptions": {
											"typeIdentifier": "t_uint24",
											"typeString": "uint24"
										}
									},
									"value": {
										"hexValue": "3136373737323135",
										"id": 4722,
										"isConstant": false,
										"isLValue": false,
										"isPure": true,
										"kind": "number",
										"lValueRequested": false,
										"nodeType": "Literal",
										"src": "2065:8:18",
										"typeDescriptions": {
											"typeIdentifier": "t_rational_16777215_by_1",
											"typeString": "int_const 16777215"
										},
										"value": "16777215"
									},
									"visibility": "public"
								},
								{
									"canonicalName": "TwabLib.AccountDetails",
									"id": 4730,
									"members": [
										{
											"constant": false,
											"id": 4725,
											"mutability": "mutable",
											"name": "balance",
											"nameLocation": "2577:7:18",
											"nodeType": "VariableDeclaration",
											"scope": 4730,
											"src": "2569:15:18",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_uint208",
												"typeString": "uint208"
											},
											"typeName": {
												"id": 4724,
												"name": "uint208",
												"nodeType": "ElementaryTypeName",
												"src": "2569:7:18",
												"typeDescriptions": {
													"typeIdentifier": "t_uint208",
													"typeString": "uint208"
												}
											},
											"visibility": "internal"
										},
										{
											"constant": false,
											"id": 4727,
											"mutability": "mutable",
											"name": "nextTwabIndex",
											"nameLocation": "2601:13:18",
											"nodeType": "VariableDeclaration",
											"scope": 4730,
											"src": "2594:20:18",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_uint24",
												"typeString": "uint24"
											},
											"typeName": {
												"id": 4726,
												"name": "uint24",
												"nodeType": "ElementaryTypeName",
												"src": "2594:6:18",
												"typeDescriptions": {
													"typeIdentifier": "t_uint24",
													"typeString": "uint24"
												}
											},
											"visibility": "internal"
										},
										{
											"constant": false,
											"id": 4729,
											"mutability": "mutable",
											"name": "cardinality",
											"nameLocation": "2631:11:18",
											"nodeType": "VariableDeclaration",
											"scope": 4730,
											"src": "2624:18:18",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_uint24",
												"typeString": "uint24"
											},
											"typeName": {
												"id": 4728,
												"name": "uint24",
												"nodeType": "ElementaryTypeName",
												"src": "2624:6:18",
												"typeDescriptions": {
													"typeIdentifier": "t_uint24",
													"typeString": "uint24"
												}
											},
											"visibility": "internal"
										}
									],
									"name": "AccountDetails",
									"nameLocation": "2544:14:18",
									"nodeType": "StructDefinition",
									"scope": 5456,
									"src": "2537:112:18",
									"visibility": "public"
								},
								{
									"canonicalName": "TwabLib.Account",
									"id": 4739,
									"members": [
										{
											"constant": false,
											"id": 4733,
											"mutability": "mutable",
											"name": "details",
											"nameLocation": "2862:7:18",
											"nodeType": "VariableDeclaration",
											"scope": 4739,
											"src": "2847:22:18",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_struct$_AccountDetails_$4730_storage_ptr",
												"typeString": "struct TwabLib.AccountDetails"
											},
											"typeName": {
												"id": 4732,
												"nodeType": "UserDefinedTypeName",
												"pathNode": {
													"id": 4731,
													"name": "AccountDetails",
													"nodeType": "IdentifierPath",
													"referencedDeclaration": 4730,
													"src": "2847:14:18"
												},
												"referencedDeclaration": 4730,
												"src": "2847:14:18",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_AccountDetails_$4730_storage_ptr",
													"typeString": "struct TwabLib.AccountDetails"
												}
											},
											"visibility": "internal"
										},
										{
											"constant": false,
											"id": 4738,
											"mutability": "mutable",
											"name": "twabs",
											"nameLocation": "2923:5:18",
											"nodeType": "VariableDeclaration",
											"scope": 4739,
											"src": "2879:49:18",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
												"typeString": "struct ObservationLib.Observation[16777215]"
											},
											"typeName": {
												"baseType": {
													"id": 4735,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 4734,
														"name": "ObservationLib.Observation",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4311,
														"src": "2879:26:18"
													},
													"referencedDeclaration": 4311,
													"src": "2879:26:18",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_Observation_$4311_storage_ptr",
														"typeString": "struct ObservationLib.Observation"
													}
												},
												"id": 4737,
												"length": {
													"id": 4736,
													"name": "MAX_CARDINALITY",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 4723,
													"src": "2906:15:18",
													"typeDescriptions": {
														"typeIdentifier": "t_uint24",
														"typeString": "uint24"
													}
												},
												"nodeType": "ArrayTypeName",
												"src": "2879:43:18",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
													"typeString": "struct ObservationLib.Observation[16777215]"
												}
											},
											"visibility": "internal"
										}
									],
									"name": "Account",
									"nameLocation": "2829:7:18",
									"nodeType": "StructDefinition",
									"scope": 5456,
									"src": "2822:113:18",
									"visibility": "public"
								},
								{
									"body": {
										"id": 4785,
										"nodeType": "Block",
										"src": "3623:239:18",
										"statements": [
											{
												"assignments": [
													4760
												],
												"declarations": [
													{
														"constant": false,
														"id": 4760,
														"mutability": "mutable",
														"name": "_accountDetails",
														"nameLocation": "3655:15:18",
														"nodeType": "VariableDeclaration",
														"scope": 4785,
														"src": "3633:37:18",
														"stateVariable": false,
														"storageLocation": "memory",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
															"typeString": "struct TwabLib.AccountDetails"
														},
														"typeName": {
															"id": 4759,
															"nodeType": "UserDefinedTypeName",
															"pathNode": {
																"id": 4758,
																"name": "AccountDetails",
																"nodeType": "IdentifierPath",
																"referencedDeclaration": 4730,
																"src": "3633:14:18"
															},
															"referencedDeclaration": 4730,
															"src": "3633:14:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_AccountDetails_$4730_storage_ptr",
																"typeString": "struct TwabLib.AccountDetails"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 4763,
												"initialValue": {
													"expression": {
														"id": 4761,
														"name": "_account",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4743,
														"src": "3673:8:18",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_Account_$4739_storage_ptr",
															"typeString": "struct TwabLib.Account storage pointer"
														}
													},
													"id": 4762,
													"isConstant": false,
													"isLValue": true,
													"isPure": false,
													"lValueRequested": false,
													"memberName": "details",
													"nodeType": "MemberAccess",
													"referencedDeclaration": 4733,
													"src": "3673:16:18",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_AccountDetails_$4730_storage",
														"typeString": "struct TwabLib.AccountDetails storage ref"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "3633:56:18"
											},
											{
												"expression": {
													"id": 4774,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"components": [
															{
																"id": 4764,
																"name": "accountDetails",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 4751,
																"src": "3700:14:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																	"typeString": "struct TwabLib.AccountDetails memory"
																}
															},
															{
																"id": 4765,
																"name": "twab",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 4754,
																"src": "3716:4:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																	"typeString": "struct ObservationLib.Observation memory"
																}
															},
															{
																"id": 4766,
																"name": "isNew",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 4756,
																"src": "3722:5:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															}
														],
														"id": 4767,
														"isConstant": false,
														"isInlineArray": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": true,
														"nodeType": "TupleExpression",
														"src": "3699:29:18",
														"typeDescriptions": {
															"typeIdentifier": "t_tuple$_t_struct$_AccountDetails_$4730_memory_ptr_$_t_struct$_Observation_$4311_memory_ptr_$_t_bool_$",
															"typeString": "tuple(struct TwabLib.AccountDetails memory,struct ObservationLib.Observation memory,bool)"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"arguments": [
															{
																"expression": {
																	"id": 4769,
																	"name": "_account",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 4743,
																	"src": "3741:8:18",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_Account_$4739_storage_ptr",
																		"typeString": "struct TwabLib.Account storage pointer"
																	}
																},
																"id": 4770,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "twabs",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 4738,
																"src": "3741:14:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage",
																	"typeString": "struct ObservationLib.Observation storage ref[16777215] storage ref"
																}
															},
															{
																"id": 4771,
																"name": "_accountDetails",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 4760,
																"src": "3757:15:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																	"typeString": "struct TwabLib.AccountDetails memory"
																}
															},
															{
																"id": 4772,
																"name": "_currentTime",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 4747,
																"src": "3774:12:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint32",
																	"typeString": "uint32"
																}
															}
														],
														"expression": {
															"argumentTypes": [
																{
																	"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage",
																	"typeString": "struct ObservationLib.Observation storage ref[16777215] storage ref"
																},
																{
																	"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																	"typeString": "struct TwabLib.AccountDetails memory"
																},
																{
																	"typeIdentifier": "t_uint32",
																	"typeString": "uint32"
																}
															],
															"id": 4768,
															"name": "_nextTwab",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5416,
															"src": "3731:9:18",
															"typeDescriptions": {
																"typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr_$_t_struct$_AccountDetails_$4730_memory_ptr_$_t_uint32_$returns$_t_struct$_AccountDetails_$4730_memory_ptr_$_t_struct$_Observation_$4311_memory_ptr_$_t_bool_$",
																"typeString": "function (struct ObservationLib.Observation storage ref[16777215] storage pointer,struct TwabLib.AccountDetails memory,uint32) returns (struct TwabLib.AccountDetails memory,struct ObservationLib.Observation memory,bool)"
															}
														},
														"id": 4773,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"kind": "functionCall",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "3731:56:18",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_tuple$_t_struct$_AccountDetails_$4730_memory_ptr_$_t_struct$_Observation_$4311_memory_ptr_$_t_bool_$",
															"typeString": "tuple(struct TwabLib.AccountDetails memory,struct ObservationLib.Observation memory,bool)"
														}
													},
													"src": "3699:88:18",
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 4775,
												"nodeType": "ExpressionStatement",
												"src": "3699:88:18"
											},
											{
												"expression": {
													"id": 4783,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"expression": {
															"id": 4776,
															"name": "accountDetails",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4751,
															"src": "3797:14:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																"typeString": "struct TwabLib.AccountDetails memory"
															}
														},
														"id": 4778,
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": true,
														"memberName": "balance",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 4725,
														"src": "3797:22:18",
														"typeDescriptions": {
															"typeIdentifier": "t_uint208",
															"typeString": "uint208"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"commonType": {
															"typeIdentifier": "t_uint208",
															"typeString": "uint208"
														},
														"id": 4782,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"leftExpression": {
															"expression": {
																"id": 4779,
																"name": "_accountDetails",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 4760,
																"src": "3822:15:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																	"typeString": "struct TwabLib.AccountDetails memory"
																}
															},
															"id": 4780,
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "balance",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 4725,
															"src": "3822:23:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint208",
																"typeString": "uint208"
															}
														},
														"nodeType": "BinaryOperation",
														"operator": "+",
														"rightExpression": {
															"id": 4781,
															"name": "_amount",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4745,
															"src": "3848:7:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint208",
																"typeString": "uint208"
															}
														},
														"src": "3822:33:18",
														"typeDescriptions": {
															"typeIdentifier": "t_uint208",
															"typeString": "uint208"
														}
													},
													"src": "3797:58:18",
													"typeDescriptions": {
														"typeIdentifier": "t_uint208",
														"typeString": "uint208"
													}
												},
												"id": 4784,
												"nodeType": "ExpressionStatement",
												"src": "3797:58:18"
											}
										]
									},
									"documentation": {
										"id": 4740,
										"nodeType": "StructuredDocumentation",
										"src": "2941:384:18",
										"text": "@notice Increases an account's balance and records a new twab.\n @param _account The account whose balance will be increased\n @param _amount The amount to increase the balance by\n @param _currentTime The current time\n @return accountDetails The new AccountDetails\n @return twab The user's latest TWAB\n @return isNew Whether the TWAB is new"
									},
									"id": 4786,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "increaseBalance",
									"nameLocation": "3339:15:18",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 4748,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4743,
												"mutability": "mutable",
												"name": "_account",
												"nameLocation": "3380:8:18",
												"nodeType": "VariableDeclaration",
												"scope": 4786,
												"src": "3364:24:18",
												"stateVariable": false,
												"storageLocation": "storage",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_Account_$4739_storage_ptr",
													"typeString": "struct TwabLib.Account"
												},
												"typeName": {
													"id": 4742,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 4741,
														"name": "Account",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4739,
														"src": "3364:7:18"
													},
													"referencedDeclaration": 4739,
													"src": "3364:7:18",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_Account_$4739_storage_ptr",
														"typeString": "struct TwabLib.Account"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4745,
												"mutability": "mutable",
												"name": "_amount",
												"nameLocation": "3406:7:18",
												"nodeType": "VariableDeclaration",
												"scope": 4786,
												"src": "3398:15:18",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint208",
													"typeString": "uint208"
												},
												"typeName": {
													"id": 4744,
													"name": "uint208",
													"nodeType": "ElementaryTypeName",
													"src": "3398:7:18",
													"typeDescriptions": {
														"typeIdentifier": "t_uint208",
														"typeString": "uint208"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4747,
												"mutability": "mutable",
												"name": "_currentTime",
												"nameLocation": "3430:12:18",
												"nodeType": "VariableDeclaration",
												"scope": 4786,
												"src": "3423:19:18",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint32",
													"typeString": "uint32"
												},
												"typeName": {
													"id": 4746,
													"name": "uint32",
													"nodeType": "ElementaryTypeName",
													"src": "3423:6:18",
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "3354:94:18"
									},
									"returnParameters": {
										"id": 4757,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4751,
												"mutability": "mutable",
												"name": "accountDetails",
												"nameLocation": "3518:14:18",
												"nodeType": "VariableDeclaration",
												"scope": 4786,
												"src": "3496:36:18",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
													"typeString": "struct TwabLib.AccountDetails"
												},
												"typeName": {
													"id": 4750,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 4749,
														"name": "AccountDetails",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4730,
														"src": "3496:14:18"
													},
													"referencedDeclaration": 4730,
													"src": "3496:14:18",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_AccountDetails_$4730_storage_ptr",
														"typeString": "struct TwabLib.AccountDetails"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4754,
												"mutability": "mutable",
												"name": "twab",
												"nameLocation": "3580:4:18",
												"nodeType": "VariableDeclaration",
												"scope": 4786,
												"src": "3546:38:18",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
													"typeString": "struct ObservationLib.Observation"
												},
												"typeName": {
													"id": 4753,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 4752,
														"name": "ObservationLib.Observation",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4311,
														"src": "3546:26:18"
													},
													"referencedDeclaration": 4311,
													"src": "3546:26:18",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_Observation_$4311_storage_ptr",
														"typeString": "struct ObservationLib.Observation"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4756,
												"mutability": "mutable",
												"name": "isNew",
												"nameLocation": "3603:5:18",
												"nodeType": "VariableDeclaration",
												"scope": 4786,
												"src": "3598:10:18",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bool",
													"typeString": "bool"
												},
												"typeName": {
													"id": 4755,
													"name": "bool",
													"nodeType": "ElementaryTypeName",
													"src": "3598:4:18",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "3482:136:18"
									},
									"scope": 5456,
									"src": "3330:532:18",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 4840,
										"nodeType": "Block",
										"src": "4829:319:18",
										"statements": [
											{
												"assignments": [
													4809
												],
												"declarations": [
													{
														"constant": false,
														"id": 4809,
														"mutability": "mutable",
														"name": "_accountDetails",
														"nameLocation": "4861:15:18",
														"nodeType": "VariableDeclaration",
														"scope": 4840,
														"src": "4839:37:18",
														"stateVariable": false,
														"storageLocation": "memory",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
															"typeString": "struct TwabLib.AccountDetails"
														},
														"typeName": {
															"id": 4808,
															"nodeType": "UserDefinedTypeName",
															"pathNode": {
																"id": 4807,
																"name": "AccountDetails",
																"nodeType": "IdentifierPath",
																"referencedDeclaration": 4730,
																"src": "4839:14:18"
															},
															"referencedDeclaration": 4730,
															"src": "4839:14:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_AccountDetails_$4730_storage_ptr",
																"typeString": "struct TwabLib.AccountDetails"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 4812,
												"initialValue": {
													"expression": {
														"id": 4810,
														"name": "_account",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4790,
														"src": "4879:8:18",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_Account_$4739_storage_ptr",
															"typeString": "struct TwabLib.Account storage pointer"
														}
													},
													"id": 4811,
													"isConstant": false,
													"isLValue": true,
													"isPure": false,
													"lValueRequested": false,
													"memberName": "details",
													"nodeType": "MemberAccess",
													"referencedDeclaration": 4733,
													"src": "4879:16:18",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_AccountDetails_$4730_storage",
														"typeString": "struct TwabLib.AccountDetails storage ref"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "4839:56:18"
											},
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint208",
																"typeString": "uint208"
															},
															"id": 4817,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"expression": {
																	"id": 4814,
																	"name": "_accountDetails",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 4809,
																	"src": "4914:15:18",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																		"typeString": "struct TwabLib.AccountDetails memory"
																	}
																},
																"id": 4815,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "balance",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 4725,
																"src": "4914:23:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint208",
																	"typeString": "uint208"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": ">=",
															"rightExpression": {
																"id": 4816,
																"name": "_amount",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 4792,
																"src": "4941:7:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint208",
																	"typeString": "uint208"
																}
															},
															"src": "4914:34:18",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"id": 4818,
															"name": "_revertMessage",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4794,
															"src": "4950:14:18",
															"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": 4813,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "4906:7:18",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 4819,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "4906:59:18",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 4820,
												"nodeType": "ExpressionStatement",
												"src": "4906:59:18"
											},
											{
												"expression": {
													"id": 4831,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"components": [
															{
																"id": 4821,
																"name": "accountDetails",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 4800,
																"src": "4977:14:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																	"typeString": "struct TwabLib.AccountDetails memory"
																}
															},
															{
																"id": 4822,
																"name": "twab",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 4803,
																"src": "4993:4:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																	"typeString": "struct ObservationLib.Observation memory"
																}
															},
															{
																"id": 4823,
																"name": "isNew",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 4805,
																"src": "4999:5:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															}
														],
														"id": 4824,
														"isConstant": false,
														"isInlineArray": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": true,
														"nodeType": "TupleExpression",
														"src": "4976:29:18",
														"typeDescriptions": {
															"typeIdentifier": "t_tuple$_t_struct$_AccountDetails_$4730_memory_ptr_$_t_struct$_Observation_$4311_memory_ptr_$_t_bool_$",
															"typeString": "tuple(struct TwabLib.AccountDetails memory,struct ObservationLib.Observation memory,bool)"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"arguments": [
															{
																"expression": {
																	"id": 4826,
																	"name": "_account",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 4790,
																	"src": "5018:8:18",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_Account_$4739_storage_ptr",
																		"typeString": "struct TwabLib.Account storage pointer"
																	}
																},
																"id": 4827,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "twabs",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 4738,
																"src": "5018:14:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage",
																	"typeString": "struct ObservationLib.Observation storage ref[16777215] storage ref"
																}
															},
															{
																"id": 4828,
																"name": "_accountDetails",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 4809,
																"src": "5034:15:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																	"typeString": "struct TwabLib.AccountDetails memory"
																}
															},
															{
																"id": 4829,
																"name": "_currentTime",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 4796,
																"src": "5051:12:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint32",
																	"typeString": "uint32"
																}
															}
														],
														"expression": {
															"argumentTypes": [
																{
																	"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage",
																	"typeString": "struct ObservationLib.Observation storage ref[16777215] storage ref"
																},
																{
																	"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																	"typeString": "struct TwabLib.AccountDetails memory"
																},
																{
																	"typeIdentifier": "t_uint32",
																	"typeString": "uint32"
																}
															],
															"id": 4825,
															"name": "_nextTwab",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5416,
															"src": "5008:9:18",
															"typeDescriptions": {
																"typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr_$_t_struct$_AccountDetails_$4730_memory_ptr_$_t_uint32_$returns$_t_struct$_AccountDetails_$4730_memory_ptr_$_t_struct$_Observation_$4311_memory_ptr_$_t_bool_$",
																"typeString": "function (struct ObservationLib.Observation storage ref[16777215] storage pointer,struct TwabLib.AccountDetails memory,uint32) returns (struct TwabLib.AccountDetails memory,struct ObservationLib.Observation memory,bool)"
															}
														},
														"id": 4830,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"kind": "functionCall",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "5008:56:18",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_tuple$_t_struct$_AccountDetails_$4730_memory_ptr_$_t_struct$_Observation_$4311_memory_ptr_$_t_bool_$",
															"typeString": "tuple(struct TwabLib.AccountDetails memory,struct ObservationLib.Observation memory,bool)"
														}
													},
													"src": "4976:88:18",
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 4832,
												"nodeType": "ExpressionStatement",
												"src": "4976:88:18"
											},
											{
												"id": 4839,
												"nodeType": "UncheckedBlock",
												"src": "5074:68:18",
												"statements": [
													{
														"expression": {
															"id": 4837,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftHandSide": {
																"expression": {
																	"id": 4833,
																	"name": "accountDetails",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 4800,
																	"src": "5098:14:18",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																		"typeString": "struct TwabLib.AccountDetails memory"
																	}
																},
																"id": 4835,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": true,
																"memberName": "balance",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 4725,
																"src": "5098:22:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint208",
																	"typeString": "uint208"
																}
															},
															"nodeType": "Assignment",
															"operator": "-=",
															"rightHandSide": {
																"id": 4836,
																"name": "_amount",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 4792,
																"src": "5124:7:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint208",
																	"typeString": "uint208"
																}
															},
															"src": "5098:33:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint208",
																"typeString": "uint208"
															}
														},
														"id": 4838,
														"nodeType": "ExpressionStatement",
														"src": "5098:33:18"
													}
												]
											}
										]
									},
									"documentation": {
										"id": 4787,
										"nodeType": "StructuredDocumentation",
										"src": "3868:625:18",
										"text": "@notice Calculates the next TWAB checkpoint for an account with a decreasing balance.\n @dev    With Account struct and amount decreasing calculates the next TWAB observable checkpoint.\n @param _account        Account whose balance will be decreased\n @param _amount         Amount to decrease the balance by\n @param _revertMessage  Revert message for insufficient balance\n @return accountDetails Updated Account.details struct\n @return twab           TWAB observation (with decreasing average)\n @return isNew          Whether TWAB is new or calling twice in the same block"
									},
									"id": 4841,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "decreaseBalance",
									"nameLocation": "4507:15:18",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 4797,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4790,
												"mutability": "mutable",
												"name": "_account",
												"nameLocation": "4548:8:18",
												"nodeType": "VariableDeclaration",
												"scope": 4841,
												"src": "4532:24:18",
												"stateVariable": false,
												"storageLocation": "storage",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_Account_$4739_storage_ptr",
													"typeString": "struct TwabLib.Account"
												},
												"typeName": {
													"id": 4789,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 4788,
														"name": "Account",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4739,
														"src": "4532:7:18"
													},
													"referencedDeclaration": 4739,
													"src": "4532:7:18",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_Account_$4739_storage_ptr",
														"typeString": "struct TwabLib.Account"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4792,
												"mutability": "mutable",
												"name": "_amount",
												"nameLocation": "4574:7:18",
												"nodeType": "VariableDeclaration",
												"scope": 4841,
												"src": "4566:15:18",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint208",
													"typeString": "uint208"
												},
												"typeName": {
													"id": 4791,
													"name": "uint208",
													"nodeType": "ElementaryTypeName",
													"src": "4566:7:18",
													"typeDescriptions": {
														"typeIdentifier": "t_uint208",
														"typeString": "uint208"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4794,
												"mutability": "mutable",
												"name": "_revertMessage",
												"nameLocation": "4605:14:18",
												"nodeType": "VariableDeclaration",
												"scope": 4841,
												"src": "4591:28:18",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_string_memory_ptr",
													"typeString": "string"
												},
												"typeName": {
													"id": 4793,
													"name": "string",
													"nodeType": "ElementaryTypeName",
													"src": "4591:6:18",
													"typeDescriptions": {
														"typeIdentifier": "t_string_storage_ptr",
														"typeString": "string"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4796,
												"mutability": "mutable",
												"name": "_currentTime",
												"nameLocation": "4636:12:18",
												"nodeType": "VariableDeclaration",
												"scope": 4841,
												"src": "4629:19:18",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint32",
													"typeString": "uint32"
												},
												"typeName": {
													"id": 4795,
													"name": "uint32",
													"nodeType": "ElementaryTypeName",
													"src": "4629:6:18",
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "4522:132:18"
									},
									"returnParameters": {
										"id": 4806,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4800,
												"mutability": "mutable",
												"name": "accountDetails",
												"nameLocation": "4724:14:18",
												"nodeType": "VariableDeclaration",
												"scope": 4841,
												"src": "4702:36:18",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
													"typeString": "struct TwabLib.AccountDetails"
												},
												"typeName": {
													"id": 4799,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 4798,
														"name": "AccountDetails",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4730,
														"src": "4702:14:18"
													},
													"referencedDeclaration": 4730,
													"src": "4702:14:18",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_AccountDetails_$4730_storage_ptr",
														"typeString": "struct TwabLib.AccountDetails"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4803,
												"mutability": "mutable",
												"name": "twab",
												"nameLocation": "4786:4:18",
												"nodeType": "VariableDeclaration",
												"scope": 4841,
												"src": "4752:38:18",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
													"typeString": "struct ObservationLib.Observation"
												},
												"typeName": {
													"id": 4802,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 4801,
														"name": "ObservationLib.Observation",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4311,
														"src": "4752:26:18"
													},
													"referencedDeclaration": 4311,
													"src": "4752:26:18",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_Observation_$4311_storage_ptr",
														"typeString": "struct ObservationLib.Observation"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4805,
												"mutability": "mutable",
												"name": "isNew",
												"nameLocation": "4809:5:18",
												"nodeType": "VariableDeclaration",
												"scope": 4841,
												"src": "4804:10:18",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bool",
													"typeString": "bool"
												},
												"typeName": {
													"id": 4804,
													"name": "bool",
													"nodeType": "ElementaryTypeName",
													"src": "4804:4:18",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "4688:136:18"
									},
									"scope": 5456,
									"src": "4498:650:18",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 4878,
										"nodeType": "Block",
										"src": "6160:198:18",
										"statements": [
											{
												"assignments": [
													4862
												],
												"declarations": [
													{
														"constant": false,
														"id": 4862,
														"mutability": "mutable",
														"name": "endTime",
														"nameLocation": "6177:7:18",
														"nodeType": "VariableDeclaration",
														"scope": 4878,
														"src": "6170:14:18",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														},
														"typeName": {
															"id": 4861,
															"name": "uint32",
															"nodeType": "ElementaryTypeName",
															"src": "6170:6:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 4869,
												"initialValue": {
													"condition": {
														"commonType": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														},
														"id": 4865,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"leftExpression": {
															"id": 4863,
															"name": "_endTime",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4854,
															"src": "6187:8:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"nodeType": "BinaryOperation",
														"operator": ">",
														"rightExpression": {
															"id": 4864,
															"name": "_currentTime",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4856,
															"src": "6198:12:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"src": "6187:23:18",
														"typeDescriptions": {
															"typeIdentifier": "t_bool",
															"typeString": "bool"
														}
													},
													"falseExpression": {
														"id": 4867,
														"name": "_endTime",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4854,
														"src": "6228:8:18",
														"typeDescriptions": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														}
													},
													"id": 4868,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"nodeType": "Conditional",
													"src": "6187:49:18",
													"trueExpression": {
														"id": 4866,
														"name": "_currentTime",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4856,
														"src": "6213:12:18",
														"typeDescriptions": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														}
													},
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "6170:66:18"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 4871,
															"name": "_twabs",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4847,
															"src": "6292:6:18",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
																"typeString": "struct ObservationLib.Observation storage ref[16777215] storage pointer"
															}
														},
														{
															"id": 4872,
															"name": "_accountDetails",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4850,
															"src": "6300:15:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																"typeString": "struct TwabLib.AccountDetails memory"
															}
														},
														{
															"id": 4873,
															"name": "_startTime",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4852,
															"src": "6317:10:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														{
															"id": 4874,
															"name": "endTime",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4862,
															"src": "6329:7:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														{
															"id": 4875,
															"name": "_currentTime",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4856,
															"src": "6338:12:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
																"typeString": "struct ObservationLib.Observation storage ref[16777215] storage pointer"
															},
															{
																"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																"typeString": "struct TwabLib.AccountDetails memory"
															},
															{
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															},
															{
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															},
															{
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														],
														"id": 4870,
														"name": "_getAverageBalanceBetween",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 5084,
														"src": "6266:25:18",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_view$_t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr_$_t_struct$_AccountDetails_$4730_memory_ptr_$_t_uint32_$_t_uint32_$_t_uint32_$returns$_t_uint256_$",
															"typeString": "function (struct ObservationLib.Observation storage ref[16777215] storage pointer,struct TwabLib.AccountDetails memory,uint32,uint32,uint32) view returns (uint256)"
														}
													},
													"id": 4876,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "6266:85:18",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"functionReturnParameters": 4860,
												"id": 4877,
												"nodeType": "Return",
												"src": "6247:104:18"
											}
										]
									},
									"documentation": {
										"id": 4842,
										"nodeType": "StructuredDocumentation",
										"src": "5154:733:18",
										"text": "@notice Calculates the average balance held by a user for a given time frame.\n @dev    Finds the average balance between start and end timestamp epochs.\nValidates the supplied end time is within the range of elapsed time i.e. less then timestamp of now.\n @param _twabs          Individual user Observation recorded checkpoints passed as storage pointer\n @param _accountDetails User AccountDetails struct loaded in memory\n @param _startTime      Start of timestamp range as an epoch\n @param _endTime        End of timestamp range as an epoch\n @param _currentTime    Block.timestamp\n @return Average balance of user held between epoch timestamps start and end"
									},
									"id": 4879,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "getAverageBalanceBetween",
									"nameLocation": "5901:24:18",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 4857,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4847,
												"mutability": "mutable",
												"name": "_twabs",
												"nameLocation": "5987:6:18",
												"nodeType": "VariableDeclaration",
												"scope": 4879,
												"src": "5935:58:18",
												"stateVariable": false,
												"storageLocation": "storage",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
													"typeString": "struct ObservationLib.Observation[16777215]"
												},
												"typeName": {
													"baseType": {
														"id": 4844,
														"nodeType": "UserDefinedTypeName",
														"pathNode": {
															"id": 4843,
															"name": "ObservationLib.Observation",
															"nodeType": "IdentifierPath",
															"referencedDeclaration": 4311,
															"src": "5935:26:18"
														},
														"referencedDeclaration": 4311,
														"src": "5935:26:18",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_Observation_$4311_storage_ptr",
															"typeString": "struct ObservationLib.Observation"
														}
													},
													"id": 4846,
													"length": {
														"id": 4845,
														"name": "MAX_CARDINALITY",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4723,
														"src": "5962:15:18",
														"typeDescriptions": {
															"typeIdentifier": "t_uint24",
															"typeString": "uint24"
														}
													},
													"nodeType": "ArrayTypeName",
													"src": "5935:43:18",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
														"typeString": "struct ObservationLib.Observation[16777215]"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4850,
												"mutability": "mutable",
												"name": "_accountDetails",
												"nameLocation": "6025:15:18",
												"nodeType": "VariableDeclaration",
												"scope": 4879,
												"src": "6003:37:18",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
													"typeString": "struct TwabLib.AccountDetails"
												},
												"typeName": {
													"id": 4849,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 4848,
														"name": "AccountDetails",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4730,
														"src": "6003:14:18"
													},
													"referencedDeclaration": 4730,
													"src": "6003:14:18",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_AccountDetails_$4730_storage_ptr",
														"typeString": "struct TwabLib.AccountDetails"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4852,
												"mutability": "mutable",
												"name": "_startTime",
												"nameLocation": "6057:10:18",
												"nodeType": "VariableDeclaration",
												"scope": 4879,
												"src": "6050:17:18",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint32",
													"typeString": "uint32"
												},
												"typeName": {
													"id": 4851,
													"name": "uint32",
													"nodeType": "ElementaryTypeName",
													"src": "6050:6:18",
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4854,
												"mutability": "mutable",
												"name": "_endTime",
												"nameLocation": "6084:8:18",
												"nodeType": "VariableDeclaration",
												"scope": 4879,
												"src": "6077:15:18",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint32",
													"typeString": "uint32"
												},
												"typeName": {
													"id": 4853,
													"name": "uint32",
													"nodeType": "ElementaryTypeName",
													"src": "6077:6:18",
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4856,
												"mutability": "mutable",
												"name": "_currentTime",
												"nameLocation": "6109:12:18",
												"nodeType": "VariableDeclaration",
												"scope": 4879,
												"src": "6102:19:18",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint32",
													"typeString": "uint32"
												},
												"typeName": {
													"id": 4855,
													"name": "uint32",
													"nodeType": "ElementaryTypeName",
													"src": "6102:6:18",
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "5925:202:18"
									},
									"returnParameters": {
										"id": 4860,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4859,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 4879,
												"src": "6151:7:18",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 4858,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "6151:7:18",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "6150:9:18"
									},
									"scope": 5456,
									"src": "5892:466:18",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 4923,
										"nodeType": "Block",
										"src": "6836:287:18",
										"statements": [
											{
												"expression": {
													"id": 4899,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"id": 4896,
														"name": "index",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4891,
														"src": "6846:5:18",
														"typeDescriptions": {
															"typeIdentifier": "t_uint24",
															"typeString": "uint24"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"expression": {
															"id": 4897,
															"name": "_accountDetails",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4888,
															"src": "6854:15:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																"typeString": "struct TwabLib.AccountDetails memory"
															}
														},
														"id": 4898,
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "nextTwabIndex",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 4727,
														"src": "6854:29:18",
														"typeDescriptions": {
															"typeIdentifier": "t_uint24",
															"typeString": "uint24"
														}
													},
													"src": "6846:37:18",
													"typeDescriptions": {
														"typeIdentifier": "t_uint24",
														"typeString": "uint24"
													}
												},
												"id": 4900,
												"nodeType": "ExpressionStatement",
												"src": "6846:37:18"
											},
											{
												"expression": {
													"id": 4905,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"id": 4901,
														"name": "twab",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4894,
														"src": "6893:4:18",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
															"typeString": "struct ObservationLib.Observation memory"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"baseExpression": {
															"id": 4902,
															"name": "_twabs",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4885,
															"src": "6900:6:18",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
																"typeString": "struct ObservationLib.Observation storage ref[16777215] storage pointer"
															}
														},
														"id": 4904,
														"indexExpression": {
															"id": 4903,
															"name": "index",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4891,
															"src": "6907:5:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint24",
																"typeString": "uint24"
															}
														},
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": false,
														"nodeType": "IndexAccess",
														"src": "6900:13:18",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_Observation_$4311_storage",
															"typeString": "struct ObservationLib.Observation storage ref"
														}
													},
													"src": "6893:20:18",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
														"typeString": "struct ObservationLib.Observation memory"
													}
												},
												"id": 4906,
												"nodeType": "ExpressionStatement",
												"src": "6893:20:18"
											},
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													},
													"id": 4910,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"expression": {
															"id": 4907,
															"name": "twab",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4894,
															"src": "7032:4:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																"typeString": "struct ObservationLib.Observation memory"
															}
														},
														"id": 4908,
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "timestamp",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 4310,
														"src": "7032:14:18",
														"typeDescriptions": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "==",
													"rightExpression": {
														"hexValue": "30",
														"id": 4909,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "number",
														"lValueRequested": false,
														"nodeType": "Literal",
														"src": "7050:1:18",
														"typeDescriptions": {
															"typeIdentifier": "t_rational_0_by_1",
															"typeString": "int_const 0"
														},
														"value": "0"
													},
													"src": "7032:19:18",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 4922,
												"nodeType": "IfStatement",
												"src": "7028:89:18",
												"trueBody": {
													"id": 4921,
													"nodeType": "Block",
													"src": "7053:64:18",
													"statements": [
														{
															"expression": {
																"id": 4913,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftHandSide": {
																	"id": 4911,
																	"name": "index",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 4891,
																	"src": "7067:5:18",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint24",
																		"typeString": "uint24"
																	}
																},
																"nodeType": "Assignment",
																"operator": "=",
																"rightHandSide": {
																	"hexValue": "30",
																	"id": 4912,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "number",
																	"lValueRequested": false,
																	"nodeType": "Literal",
																	"src": "7075:1:18",
																	"typeDescriptions": {
																		"typeIdentifier": "t_rational_0_by_1",
																		"typeString": "int_const 0"
																	},
																	"value": "0"
																},
																"src": "7067:9:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint24",
																	"typeString": "uint24"
																}
															},
															"id": 4914,
															"nodeType": "ExpressionStatement",
															"src": "7067:9:18"
														},
														{
															"expression": {
																"id": 4919,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftHandSide": {
																	"id": 4915,
																	"name": "twab",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 4894,
																	"src": "7090:4:18",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																		"typeString": "struct ObservationLib.Observation memory"
																	}
																},
																"nodeType": "Assignment",
																"operator": "=",
																"rightHandSide": {
																	"baseExpression": {
																		"id": 4916,
																		"name": "_twabs",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4885,
																		"src": "7097:6:18",
																		"typeDescriptions": {
																			"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
																			"typeString": "struct ObservationLib.Observation storage ref[16777215] storage pointer"
																		}
																	},
																	"id": 4918,
																	"indexExpression": {
																		"hexValue": "30",
																		"id": 4917,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "number",
																		"lValueRequested": false,
																		"nodeType": "Literal",
																		"src": "7104:1:18",
																		"typeDescriptions": {
																			"typeIdentifier": "t_rational_0_by_1",
																			"typeString": "int_const 0"
																		},
																		"value": "0"
																	},
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"nodeType": "IndexAccess",
																	"src": "7097:9:18",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_Observation_$4311_storage",
																		"typeString": "struct ObservationLib.Observation storage ref"
																	}
																},
																"src": "7090:16:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																	"typeString": "struct ObservationLib.Observation memory"
																}
															},
															"id": 4920,
															"nodeType": "ExpressionStatement",
															"src": "7090:16:18"
														}
													]
												}
											}
										]
									},
									"documentation": {
										"id": 4880,
										"nodeType": "StructuredDocumentation",
										"src": "6364:249:18",
										"text": "@notice Retrieves the oldest TWAB\n @param _twabs The storage array of twabs\n @param _accountDetails The TWAB account details\n @return index The index of the oldest TWAB in the twabs array\n @return twab The oldest TWAB"
									},
									"id": 4924,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "oldestTwab",
									"nameLocation": "6627:10:18",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 4889,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4885,
												"mutability": "mutable",
												"name": "_twabs",
												"nameLocation": "6699:6:18",
												"nodeType": "VariableDeclaration",
												"scope": 4924,
												"src": "6647:58:18",
												"stateVariable": false,
												"storageLocation": "storage",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
													"typeString": "struct ObservationLib.Observation[16777215]"
												},
												"typeName": {
													"baseType": {
														"id": 4882,
														"nodeType": "UserDefinedTypeName",
														"pathNode": {
															"id": 4881,
															"name": "ObservationLib.Observation",
															"nodeType": "IdentifierPath",
															"referencedDeclaration": 4311,
															"src": "6647:26:18"
														},
														"referencedDeclaration": 4311,
														"src": "6647:26:18",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_Observation_$4311_storage_ptr",
															"typeString": "struct ObservationLib.Observation"
														}
													},
													"id": 4884,
													"length": {
														"id": 4883,
														"name": "MAX_CARDINALITY",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4723,
														"src": "6674:15:18",
														"typeDescriptions": {
															"typeIdentifier": "t_uint24",
															"typeString": "uint24"
														}
													},
													"nodeType": "ArrayTypeName",
													"src": "6647:43:18",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
														"typeString": "struct ObservationLib.Observation[16777215]"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4888,
												"mutability": "mutable",
												"name": "_accountDetails",
												"nameLocation": "6737:15:18",
												"nodeType": "VariableDeclaration",
												"scope": 4924,
												"src": "6715:37:18",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
													"typeString": "struct TwabLib.AccountDetails"
												},
												"typeName": {
													"id": 4887,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 4886,
														"name": "AccountDetails",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4730,
														"src": "6715:14:18"
													},
													"referencedDeclaration": 4730,
													"src": "6715:14:18",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_AccountDetails_$4730_storage_ptr",
														"typeString": "struct TwabLib.AccountDetails"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "6637:121:18"
									},
									"returnParameters": {
										"id": 4895,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4891,
												"mutability": "mutable",
												"name": "index",
												"nameLocation": "6789:5:18",
												"nodeType": "VariableDeclaration",
												"scope": 4924,
												"src": "6782:12:18",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint24",
													"typeString": "uint24"
												},
												"typeName": {
													"id": 4890,
													"name": "uint24",
													"nodeType": "ElementaryTypeName",
													"src": "6782:6:18",
													"typeDescriptions": {
														"typeIdentifier": "t_uint24",
														"typeString": "uint24"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4894,
												"mutability": "mutable",
												"name": "twab",
												"nameLocation": "6830:4:18",
												"nodeType": "VariableDeclaration",
												"scope": 4924,
												"src": "6796:38:18",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
													"typeString": "struct ObservationLib.Observation"
												},
												"typeName": {
													"id": 4893,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 4892,
														"name": "ObservationLib.Observation",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4311,
														"src": "6796:26:18"
													},
													"referencedDeclaration": 4311,
													"src": "6796:26:18",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_Observation_$4311_storage_ptr",
														"typeString": "struct ObservationLib.Observation"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "6781:54:18"
									},
									"scope": 5456,
									"src": "6618:505:18",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 4959,
										"nodeType": "Block",
										"src": "7601:136:18",
										"statements": [
											{
												"expression": {
													"id": 4951,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"id": 4941,
														"name": "index",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4936,
														"src": "7611:5:18",
														"typeDescriptions": {
															"typeIdentifier": "t_uint24",
															"typeString": "uint24"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"arguments": [
															{
																"arguments": [
																	{
																		"expression": {
																			"id": 4946,
																			"name": "_accountDetails",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4933,
																			"src": "7652:15:18",
																			"typeDescriptions": {
																				"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																				"typeString": "struct TwabLib.AccountDetails memory"
																			}
																		},
																		"id": 4947,
																		"isConstant": false,
																		"isLValue": true,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "nextTwabIndex",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 4727,
																		"src": "7652:29:18",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint24",
																			"typeString": "uint24"
																		}
																	},
																	{
																		"id": 4948,
																		"name": "MAX_CARDINALITY",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4723,
																		"src": "7683:15:18",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint24",
																			"typeString": "uint24"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_uint24",
																			"typeString": "uint24"
																		},
																		{
																			"typeIdentifier": "t_uint24",
																			"typeString": "uint24"
																		}
																	],
																	"expression": {
																		"id": 4944,
																		"name": "RingBufferLib",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4706,
																		"src": "7626:13:18",
																		"typeDescriptions": {
																			"typeIdentifier": "t_type$_t_contract$_RingBufferLib_$4706_$",
																			"typeString": "type(library RingBufferLib)"
																		}
																	},
																	"id": 4945,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "newestIndex",
																	"nodeType": "MemberAccess",
																	"referencedDeclaration": 4687,
																	"src": "7626:25:18",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
																		"typeString": "function (uint256,uint256) pure returns (uint256)"
																	}
																},
																"id": 4949,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "7626:73:18",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															}
														],
														"expression": {
															"argumentTypes": [
																{
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															],
															"id": 4943,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"lValueRequested": false,
															"nodeType": "ElementaryTypeNameExpression",
															"src": "7619:6:18",
															"typeDescriptions": {
																"typeIdentifier": "t_type$_t_uint24_$",
																"typeString": "type(uint24)"
															},
															"typeName": {
																"id": 4942,
																"name": "uint24",
																"nodeType": "ElementaryTypeName",
																"src": "7619:6:18",
																"typeDescriptions": {}
															}
														},
														"id": 4950,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"kind": "typeConversion",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "7619:81:18",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_uint24",
															"typeString": "uint24"
														}
													},
													"src": "7611:89:18",
													"typeDescriptions": {
														"typeIdentifier": "t_uint24",
														"typeString": "uint24"
													}
												},
												"id": 4952,
												"nodeType": "ExpressionStatement",
												"src": "7611:89:18"
											},
											{
												"expression": {
													"id": 4957,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"id": 4953,
														"name": "twab",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4939,
														"src": "7710:4:18",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
															"typeString": "struct ObservationLib.Observation memory"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"baseExpression": {
															"id": 4954,
															"name": "_twabs",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4930,
															"src": "7717:6:18",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
																"typeString": "struct ObservationLib.Observation storage ref[16777215] storage pointer"
															}
														},
														"id": 4956,
														"indexExpression": {
															"id": 4955,
															"name": "index",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4936,
															"src": "7724:5:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint24",
																"typeString": "uint24"
															}
														},
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": false,
														"nodeType": "IndexAccess",
														"src": "7717:13:18",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_Observation_$4311_storage",
															"typeString": "struct ObservationLib.Observation storage ref"
														}
													},
													"src": "7710:20:18",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
														"typeString": "struct ObservationLib.Observation memory"
													}
												},
												"id": 4958,
												"nodeType": "ExpressionStatement",
												"src": "7710:20:18"
											}
										]
									},
									"documentation": {
										"id": 4925,
										"nodeType": "StructuredDocumentation",
										"src": "7129:249:18",
										"text": "@notice Retrieves the newest TWAB\n @param _twabs The storage array of twabs\n @param _accountDetails The TWAB account details\n @return index The index of the newest TWAB in the twabs array\n @return twab The newest TWAB"
									},
									"id": 4960,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "newestTwab",
									"nameLocation": "7392:10:18",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 4934,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4930,
												"mutability": "mutable",
												"name": "_twabs",
												"nameLocation": "7464:6:18",
												"nodeType": "VariableDeclaration",
												"scope": 4960,
												"src": "7412:58:18",
												"stateVariable": false,
												"storageLocation": "storage",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
													"typeString": "struct ObservationLib.Observation[16777215]"
												},
												"typeName": {
													"baseType": {
														"id": 4927,
														"nodeType": "UserDefinedTypeName",
														"pathNode": {
															"id": 4926,
															"name": "ObservationLib.Observation",
															"nodeType": "IdentifierPath",
															"referencedDeclaration": 4311,
															"src": "7412:26:18"
														},
														"referencedDeclaration": 4311,
														"src": "7412:26:18",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_Observation_$4311_storage_ptr",
															"typeString": "struct ObservationLib.Observation"
														}
													},
													"id": 4929,
													"length": {
														"id": 4928,
														"name": "MAX_CARDINALITY",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4723,
														"src": "7439:15:18",
														"typeDescriptions": {
															"typeIdentifier": "t_uint24",
															"typeString": "uint24"
														}
													},
													"nodeType": "ArrayTypeName",
													"src": "7412:43:18",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
														"typeString": "struct ObservationLib.Observation[16777215]"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4933,
												"mutability": "mutable",
												"name": "_accountDetails",
												"nameLocation": "7502:15:18",
												"nodeType": "VariableDeclaration",
												"scope": 4960,
												"src": "7480:37:18",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
													"typeString": "struct TwabLib.AccountDetails"
												},
												"typeName": {
													"id": 4932,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 4931,
														"name": "AccountDetails",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4730,
														"src": "7480:14:18"
													},
													"referencedDeclaration": 4730,
													"src": "7480:14:18",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_AccountDetails_$4730_storage_ptr",
														"typeString": "struct TwabLib.AccountDetails"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "7402:121:18"
									},
									"returnParameters": {
										"id": 4940,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4936,
												"mutability": "mutable",
												"name": "index",
												"nameLocation": "7554:5:18",
												"nodeType": "VariableDeclaration",
												"scope": 4960,
												"src": "7547:12:18",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint24",
													"typeString": "uint24"
												},
												"typeName": {
													"id": 4935,
													"name": "uint24",
													"nodeType": "ElementaryTypeName",
													"src": "7547:6:18",
													"typeDescriptions": {
														"typeIdentifier": "t_uint24",
														"typeString": "uint24"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4939,
												"mutability": "mutable",
												"name": "twab",
												"nameLocation": "7595:4:18",
												"nodeType": "VariableDeclaration",
												"scope": 4960,
												"src": "7561:38:18",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
													"typeString": "struct ObservationLib.Observation"
												},
												"typeName": {
													"id": 4938,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 4937,
														"name": "ObservationLib.Observation",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4311,
														"src": "7561:26:18"
													},
													"referencedDeclaration": 4311,
													"src": "7561:26:18",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_Observation_$4311_storage_ptr",
														"typeString": "struct ObservationLib.Observation"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "7546:54:18"
									},
									"scope": 5456,
									"src": "7383:354:18",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 4994,
										"nodeType": "Block",
										"src": "8271:177:18",
										"statements": [
											{
												"assignments": [
													4979
												],
												"declarations": [
													{
														"constant": false,
														"id": 4979,
														"mutability": "mutable",
														"name": "timeToTarget",
														"nameLocation": "8288:12:18",
														"nodeType": "VariableDeclaration",
														"scope": 4994,
														"src": "8281:19:18",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														},
														"typeName": {
															"id": 4978,
															"name": "uint32",
															"nodeType": "ElementaryTypeName",
															"src": "8281:6:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 4986,
												"initialValue": {
													"condition": {
														"commonType": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														},
														"id": 4982,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"leftExpression": {
															"id": 4980,
															"name": "_targetTime",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4971,
															"src": "8303:11:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"nodeType": "BinaryOperation",
														"operator": ">",
														"rightExpression": {
															"id": 4981,
															"name": "_currentTime",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4973,
															"src": "8317:12:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"src": "8303:26:18",
														"typeDescriptions": {
															"typeIdentifier": "t_bool",
															"typeString": "bool"
														}
													},
													"falseExpression": {
														"id": 4984,
														"name": "_targetTime",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4971,
														"src": "8347:11:18",
														"typeDescriptions": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														}
													},
													"id": 4985,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"nodeType": "Conditional",
													"src": "8303:55:18",
													"trueExpression": {
														"id": 4983,
														"name": "_currentTime",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4973,
														"src": "8332:12:18",
														"typeDescriptions": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														}
													},
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "8281:77:18"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 4988,
															"name": "_twabs",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4966,
															"src": "8389:6:18",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
																"typeString": "struct ObservationLib.Observation storage ref[16777215] storage pointer"
															}
														},
														{
															"id": 4989,
															"name": "_accountDetails",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4969,
															"src": "8397:15:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																"typeString": "struct TwabLib.AccountDetails memory"
															}
														},
														{
															"id": 4990,
															"name": "timeToTarget",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4979,
															"src": "8414:12:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														{
															"id": 4991,
															"name": "_currentTime",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4973,
															"src": "8428:12:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
																"typeString": "struct ObservationLib.Observation storage ref[16777215] storage pointer"
															},
															{
																"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																"typeString": "struct TwabLib.AccountDetails memory"
															},
															{
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															},
															{
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														],
														"id": 4987,
														"name": "_getBalanceAt",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 5191,
														"src": "8375:13:18",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_view$_t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr_$_t_struct$_AccountDetails_$4730_memory_ptr_$_t_uint32_$_t_uint32_$returns$_t_uint256_$",
															"typeString": "function (struct ObservationLib.Observation storage ref[16777215] storage pointer,struct TwabLib.AccountDetails memory,uint32,uint32) view returns (uint256)"
														}
													},
													"id": 4992,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "8375:66:18",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"functionReturnParameters": 4977,
												"id": 4993,
												"nodeType": "Return",
												"src": "8368:73:18"
											}
										]
									},
									"documentation": {
										"id": 4961,
										"nodeType": "StructuredDocumentation",
										"src": "7743:291:18",
										"text": "@notice Retrieves amount at `_targetTime` timestamp\n @param _twabs List of TWABs to search through.\n @param _accountDetails Accounts details\n @param _targetTime Timestamp at which the reserved TWAB should be for.\n @return uint256 TWAB amount at `_targetTime`."
									},
									"id": 4995,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "getBalanceAt",
									"nameLocation": "8048:12:18",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 4974,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4966,
												"mutability": "mutable",
												"name": "_twabs",
												"nameLocation": "8122:6:18",
												"nodeType": "VariableDeclaration",
												"scope": 4995,
												"src": "8070:58:18",
												"stateVariable": false,
												"storageLocation": "storage",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
													"typeString": "struct ObservationLib.Observation[16777215]"
												},
												"typeName": {
													"baseType": {
														"id": 4963,
														"nodeType": "UserDefinedTypeName",
														"pathNode": {
															"id": 4962,
															"name": "ObservationLib.Observation",
															"nodeType": "IdentifierPath",
															"referencedDeclaration": 4311,
															"src": "8070:26:18"
														},
														"referencedDeclaration": 4311,
														"src": "8070:26:18",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_Observation_$4311_storage_ptr",
															"typeString": "struct ObservationLib.Observation"
														}
													},
													"id": 4965,
													"length": {
														"id": 4964,
														"name": "MAX_CARDINALITY",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4723,
														"src": "8097:15:18",
														"typeDescriptions": {
															"typeIdentifier": "t_uint24",
															"typeString": "uint24"
														}
													},
													"nodeType": "ArrayTypeName",
													"src": "8070:43:18",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
														"typeString": "struct ObservationLib.Observation[16777215]"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4969,
												"mutability": "mutable",
												"name": "_accountDetails",
												"nameLocation": "8160:15:18",
												"nodeType": "VariableDeclaration",
												"scope": 4995,
												"src": "8138:37:18",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
													"typeString": "struct TwabLib.AccountDetails"
												},
												"typeName": {
													"id": 4968,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 4967,
														"name": "AccountDetails",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4730,
														"src": "8138:14:18"
													},
													"referencedDeclaration": 4730,
													"src": "8138:14:18",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_AccountDetails_$4730_storage_ptr",
														"typeString": "struct TwabLib.AccountDetails"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4971,
												"mutability": "mutable",
												"name": "_targetTime",
												"nameLocation": "8192:11:18",
												"nodeType": "VariableDeclaration",
												"scope": 4995,
												"src": "8185:18:18",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint32",
													"typeString": "uint32"
												},
												"typeName": {
													"id": 4970,
													"name": "uint32",
													"nodeType": "ElementaryTypeName",
													"src": "8185:6:18",
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 4973,
												"mutability": "mutable",
												"name": "_currentTime",
												"nameLocation": "8220:12:18",
												"nodeType": "VariableDeclaration",
												"scope": 4995,
												"src": "8213:19:18",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint32",
													"typeString": "uint32"
												},
												"typeName": {
													"id": 4972,
													"name": "uint32",
													"nodeType": "ElementaryTypeName",
													"src": "8213:6:18",
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "8060:178:18"
									},
									"returnParameters": {
										"id": 4977,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 4976,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 4995,
												"src": "8262:7:18",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 4975,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "8262:7:18",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "8261:9:18"
									},
									"scope": 5456,
									"src": "8039:409:18",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 5083,
										"nodeType": "Block",
										"src": "9002:1047:18",
										"statements": [
											{
												"assignments": [
													5016,
													5019
												],
												"declarations": [
													{
														"constant": false,
														"id": 5016,
														"mutability": "mutable",
														"name": "oldestTwabIndex",
														"nameLocation": "9020:15:18",
														"nodeType": "VariableDeclaration",
														"scope": 5083,
														"src": "9013:22:18",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint24",
															"typeString": "uint24"
														},
														"typeName": {
															"id": 5015,
															"name": "uint24",
															"nodeType": "ElementaryTypeName",
															"src": "9013:6:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint24",
																"typeString": "uint24"
															}
														},
														"visibility": "internal"
													},
													{
														"constant": false,
														"id": 5019,
														"mutability": "mutable",
														"name": "oldTwab",
														"nameLocation": "9071:7:18",
														"nodeType": "VariableDeclaration",
														"scope": 5083,
														"src": "9037:41:18",
														"stateVariable": false,
														"storageLocation": "memory",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
															"typeString": "struct ObservationLib.Observation"
														},
														"typeName": {
															"id": 5018,
															"nodeType": "UserDefinedTypeName",
															"pathNode": {
																"id": 5017,
																"name": "ObservationLib.Observation",
																"nodeType": "IdentifierPath",
																"referencedDeclaration": 4311,
																"src": "9037:26:18"
															},
															"referencedDeclaration": 4311,
															"src": "9037:26:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_Observation_$4311_storage_ptr",
																"typeString": "struct ObservationLib.Observation"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 5024,
												"initialValue": {
													"arguments": [
														{
															"id": 5021,
															"name": "_twabs",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5001,
															"src": "9106:6:18",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
																"typeString": "struct ObservationLib.Observation storage ref[16777215] storage pointer"
															}
														},
														{
															"id": 5022,
															"name": "_accountDetails",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5004,
															"src": "9126:15:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																"typeString": "struct TwabLib.AccountDetails memory"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
																"typeString": "struct ObservationLib.Observation storage ref[16777215] storage pointer"
															},
															{
																"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																"typeString": "struct TwabLib.AccountDetails memory"
															}
														],
														"id": 5020,
														"name": "oldestTwab",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4924,
														"src": "9082:10:18",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_view$_t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr_$_t_struct$_AccountDetails_$4730_memory_ptr_$returns$_t_uint24_$_t_struct$_Observation_$4311_memory_ptr_$",
															"typeString": "function (struct ObservationLib.Observation storage ref[16777215] storage pointer,struct TwabLib.AccountDetails memory) view returns (uint24,struct ObservationLib.Observation memory)"
														}
													},
													"id": 5023,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "9082:69:18",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$_t_uint24_$_t_struct$_Observation_$4311_memory_ptr_$",
														"typeString": "tuple(uint24,struct ObservationLib.Observation memory)"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "9012:139:18"
											},
											{
												"assignments": [
													5026,
													5029
												],
												"declarations": [
													{
														"constant": false,
														"id": 5026,
														"mutability": "mutable",
														"name": "newestTwabIndex",
														"nameLocation": "9170:15:18",
														"nodeType": "VariableDeclaration",
														"scope": 5083,
														"src": "9163:22:18",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint24",
															"typeString": "uint24"
														},
														"typeName": {
															"id": 5025,
															"name": "uint24",
															"nodeType": "ElementaryTypeName",
															"src": "9163:6:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint24",
																"typeString": "uint24"
															}
														},
														"visibility": "internal"
													},
													{
														"constant": false,
														"id": 5029,
														"mutability": "mutable",
														"name": "newTwab",
														"nameLocation": "9221:7:18",
														"nodeType": "VariableDeclaration",
														"scope": 5083,
														"src": "9187:41:18",
														"stateVariable": false,
														"storageLocation": "memory",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
															"typeString": "struct ObservationLib.Observation"
														},
														"typeName": {
															"id": 5028,
															"nodeType": "UserDefinedTypeName",
															"pathNode": {
																"id": 5027,
																"name": "ObservationLib.Observation",
																"nodeType": "IdentifierPath",
																"referencedDeclaration": 4311,
																"src": "9187:26:18"
															},
															"referencedDeclaration": 4311,
															"src": "9187:26:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_Observation_$4311_storage_ptr",
																"typeString": "struct ObservationLib.Observation"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 5034,
												"initialValue": {
													"arguments": [
														{
															"id": 5031,
															"name": "_twabs",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5001,
															"src": "9256:6:18",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
																"typeString": "struct ObservationLib.Observation storage ref[16777215] storage pointer"
															}
														},
														{
															"id": 5032,
															"name": "_accountDetails",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5004,
															"src": "9276:15:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																"typeString": "struct TwabLib.AccountDetails memory"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
																"typeString": "struct ObservationLib.Observation storage ref[16777215] storage pointer"
															},
															{
																"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																"typeString": "struct TwabLib.AccountDetails memory"
															}
														],
														"id": 5030,
														"name": "newestTwab",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4960,
														"src": "9232:10:18",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_view$_t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr_$_t_struct$_AccountDetails_$4730_memory_ptr_$returns$_t_uint24_$_t_struct$_Observation_$4311_memory_ptr_$",
															"typeString": "function (struct ObservationLib.Observation storage ref[16777215] storage pointer,struct TwabLib.AccountDetails memory) view returns (uint24,struct ObservationLib.Observation memory)"
														}
													},
													"id": 5033,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "9232:69:18",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$_t_uint24_$_t_struct$_Observation_$4311_memory_ptr_$",
														"typeString": "tuple(uint24,struct ObservationLib.Observation memory)"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "9162:139:18"
											},
											{
												"assignments": [
													5039
												],
												"declarations": [
													{
														"constant": false,
														"id": 5039,
														"mutability": "mutable",
														"name": "startTwab",
														"nameLocation": "9346:9:18",
														"nodeType": "VariableDeclaration",
														"scope": 5083,
														"src": "9312:43:18",
														"stateVariable": false,
														"storageLocation": "memory",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
															"typeString": "struct ObservationLib.Observation"
														},
														"typeName": {
															"id": 5038,
															"nodeType": "UserDefinedTypeName",
															"pathNode": {
																"id": 5037,
																"name": "ObservationLib.Observation",
																"nodeType": "IdentifierPath",
																"referencedDeclaration": 4311,
																"src": "9312:26:18"
															},
															"referencedDeclaration": 4311,
															"src": "9312:26:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_Observation_$4311_storage_ptr",
																"typeString": "struct ObservationLib.Observation"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 5050,
												"initialValue": {
													"arguments": [
														{
															"id": 5041,
															"name": "_twabs",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5001,
															"src": "9386:6:18",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
																"typeString": "struct ObservationLib.Observation storage ref[16777215] storage pointer"
															}
														},
														{
															"id": 5042,
															"name": "_accountDetails",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5004,
															"src": "9406:15:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																"typeString": "struct TwabLib.AccountDetails memory"
															}
														},
														{
															"id": 5043,
															"name": "newTwab",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5029,
															"src": "9435:7:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																"typeString": "struct ObservationLib.Observation memory"
															}
														},
														{
															"id": 5044,
															"name": "oldTwab",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5019,
															"src": "9456:7:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																"typeString": "struct ObservationLib.Observation memory"
															}
														},
														{
															"id": 5045,
															"name": "newestTwabIndex",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5026,
															"src": "9477:15:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint24",
																"typeString": "uint24"
															}
														},
														{
															"id": 5046,
															"name": "oldestTwabIndex",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5016,
															"src": "9506:15:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint24",
																"typeString": "uint24"
															}
														},
														{
															"id": 5047,
															"name": "_startTime",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5006,
															"src": "9535:10:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														{
															"id": 5048,
															"name": "_currentTime",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5010,
															"src": "9559:12:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
																"typeString": "struct ObservationLib.Observation storage ref[16777215] storage pointer"
															},
															{
																"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																"typeString": "struct TwabLib.AccountDetails memory"
															},
															{
																"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																"typeString": "struct ObservationLib.Observation memory"
															},
															{
																"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																"typeString": "struct ObservationLib.Observation memory"
															},
															{
																"typeIdentifier": "t_uint24",
																"typeString": "uint24"
															},
															{
																"typeIdentifier": "t_uint24",
																"typeString": "uint24"
															},
															{
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															},
															{
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														],
														"id": 5040,
														"name": "_calculateTwab",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 5309,
														"src": "9358:14:18",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_view$_t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr_$_t_struct$_AccountDetails_$4730_memory_ptr_$_t_struct$_Observation_$4311_memory_ptr_$_t_struct$_Observation_$4311_memory_ptr_$_t_uint24_$_t_uint24_$_t_uint32_$_t_uint32_$returns$_t_struct$_Observation_$4311_memory_ptr_$",
															"typeString": "function (struct ObservationLib.Observation storage ref[16777215] storage pointer,struct TwabLib.AccountDetails memory,struct ObservationLib.Observation memory,struct ObservationLib.Observation memory,uint24,uint24,uint32,uint32) view returns (struct ObservationLib.Observation memory)"
														}
													},
													"id": 5049,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "9358:223:18",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
														"typeString": "struct ObservationLib.Observation memory"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "9312:269:18"
											},
											{
												"assignments": [
													5055
												],
												"declarations": [
													{
														"constant": false,
														"id": 5055,
														"mutability": "mutable",
														"name": "endTwab",
														"nameLocation": "9626:7:18",
														"nodeType": "VariableDeclaration",
														"scope": 5083,
														"src": "9592:41:18",
														"stateVariable": false,
														"storageLocation": "memory",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
															"typeString": "struct ObservationLib.Observation"
														},
														"typeName": {
															"id": 5054,
															"nodeType": "UserDefinedTypeName",
															"pathNode": {
																"id": 5053,
																"name": "ObservationLib.Observation",
																"nodeType": "IdentifierPath",
																"referencedDeclaration": 4311,
																"src": "9592:26:18"
															},
															"referencedDeclaration": 4311,
															"src": "9592:26:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_Observation_$4311_storage_ptr",
																"typeString": "struct ObservationLib.Observation"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 5066,
												"initialValue": {
													"arguments": [
														{
															"id": 5057,
															"name": "_twabs",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5001,
															"src": "9664:6:18",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
																"typeString": "struct ObservationLib.Observation storage ref[16777215] storage pointer"
															}
														},
														{
															"id": 5058,
															"name": "_accountDetails",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5004,
															"src": "9684:15:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																"typeString": "struct TwabLib.AccountDetails memory"
															}
														},
														{
															"id": 5059,
															"name": "newTwab",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5029,
															"src": "9713:7:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																"typeString": "struct ObservationLib.Observation memory"
															}
														},
														{
															"id": 5060,
															"name": "oldTwab",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5019,
															"src": "9734:7:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																"typeString": "struct ObservationLib.Observation memory"
															}
														},
														{
															"id": 5061,
															"name": "newestTwabIndex",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5026,
															"src": "9755:15:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint24",
																"typeString": "uint24"
															}
														},
														{
															"id": 5062,
															"name": "oldestTwabIndex",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5016,
															"src": "9784:15:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint24",
																"typeString": "uint24"
															}
														},
														{
															"id": 5063,
															"name": "_endTime",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5008,
															"src": "9813:8:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														{
															"id": 5064,
															"name": "_currentTime",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5010,
															"src": "9835:12:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
																"typeString": "struct ObservationLib.Observation storage ref[16777215] storage pointer"
															},
															{
																"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																"typeString": "struct TwabLib.AccountDetails memory"
															},
															{
																"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																"typeString": "struct ObservationLib.Observation memory"
															},
															{
																"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																"typeString": "struct ObservationLib.Observation memory"
															},
															{
																"typeIdentifier": "t_uint24",
																"typeString": "uint24"
															},
															{
																"typeIdentifier": "t_uint24",
																"typeString": "uint24"
															},
															{
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															},
															{
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														],
														"id": 5056,
														"name": "_calculateTwab",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 5309,
														"src": "9636:14:18",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_view$_t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr_$_t_struct$_AccountDetails_$4730_memory_ptr_$_t_struct$_Observation_$4311_memory_ptr_$_t_struct$_Observation_$4311_memory_ptr_$_t_uint24_$_t_uint24_$_t_uint32_$_t_uint32_$returns$_t_struct$_Observation_$4311_memory_ptr_$",
															"typeString": "function (struct ObservationLib.Observation storage ref[16777215] storage pointer,struct TwabLib.AccountDetails memory,struct ObservationLib.Observation memory,struct ObservationLib.Observation memory,uint24,uint24,uint32,uint32) view returns (struct ObservationLib.Observation memory)"
														}
													},
													"id": 5065,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "9636:221:18",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
														"typeString": "struct ObservationLib.Observation memory"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "9592:265:18"
											},
											{
												"expression": {
													"commonType": {
														"typeIdentifier": "t_uint224",
														"typeString": "uint224"
													},
													"id": 5081,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"components": [
															{
																"commonType": {
																	"typeIdentifier": "t_uint224",
																	"typeString": "uint224"
																},
																"id": 5071,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"expression": {
																		"id": 5067,
																		"name": "endTwab",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 5055,
																		"src": "9915:7:18",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																			"typeString": "struct ObservationLib.Observation memory"
																		}
																	},
																	"id": 5068,
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "amount",
																	"nodeType": "MemberAccess",
																	"referencedDeclaration": 4308,
																	"src": "9915:14:18",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint224",
																		"typeString": "uint224"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "-",
																"rightExpression": {
																	"expression": {
																		"id": 5069,
																		"name": "startTwab",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 5039,
																		"src": "9932:9:18",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																			"typeString": "struct ObservationLib.Observation memory"
																		}
																	},
																	"id": 5070,
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "amount",
																	"nodeType": "MemberAccess",
																	"referencedDeclaration": 4308,
																	"src": "9932:16:18",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint224",
																		"typeString": "uint224"
																	}
																},
																"src": "9915:33:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint224",
																	"typeString": "uint224"
																}
															}
														],
														"id": 5072,
														"isConstant": false,
														"isInlineArray": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"nodeType": "TupleExpression",
														"src": "9914:35:18",
														"typeDescriptions": {
															"typeIdentifier": "t_uint224",
															"typeString": "uint224"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "/",
													"rightExpression": {
														"arguments": [
															{
																"expression": {
																	"id": 5075,
																	"name": "endTwab",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 5055,
																	"src": "9989:7:18",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																		"typeString": "struct ObservationLib.Observation memory"
																	}
																},
																"id": 5076,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "timestamp",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 4310,
																"src": "9989:17:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint32",
																	"typeString": "uint32"
																}
															},
															{
																"expression": {
																	"id": 5077,
																	"name": "startTwab",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 5039,
																	"src": "10008:9:18",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																		"typeString": "struct ObservationLib.Observation memory"
																	}
																},
																"id": 5078,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "timestamp",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 4310,
																"src": "10008:19:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint32",
																	"typeString": "uint32"
																}
															},
															{
																"id": 5079,
																"name": "_currentTime",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 5010,
																"src": "10029:12:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint32",
																	"typeString": "uint32"
																}
															}
														],
														"expression": {
															"argumentTypes": [
																{
																	"typeIdentifier": "t_uint32",
																	"typeString": "uint32"
																},
																{
																	"typeIdentifier": "t_uint32",
																	"typeString": "uint32"
																},
																{
																	"typeIdentifier": "t_uint32",
																	"typeString": "uint32"
																}
															],
															"expression": {
																"id": 5073,
																"name": "OverflowSafeComparatorLib",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 4621,
																"src": "9952:25:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_type$_t_contract$_OverflowSafeComparatorLib_$4621_$",
																	"typeString": "type(library OverflowSafeComparatorLib)"
																}
															},
															"id": 5074,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "checkedSub",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 4620,
															"src": "9952:36:18",
															"typeDescriptions": {
																"typeIdentifier": "t_function_internal_pure$_t_uint32_$_t_uint32_$_t_uint32_$returns$_t_uint32_$",
																"typeString": "function (uint32,uint32,uint32) pure returns (uint32)"
															}
														},
														"id": 5080,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"kind": "functionCall",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "9952:90:18",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														}
													},
													"src": "9914:128:18",
													"typeDescriptions": {
														"typeIdentifier": "t_uint224",
														"typeString": "uint224"
													}
												},
												"functionReturnParameters": 5014,
												"id": 5082,
												"nodeType": "Return",
												"src": "9907:135:18"
											}
										]
									},
									"documentation": {
										"id": 4996,
										"nodeType": "StructuredDocumentation",
										"src": "8454:275:18",
										"text": "@notice Calculates the average balance held by a user for a given time frame.\n @param _startTime The start time of the time frame.\n @param _endTime The end time of the time frame.\n @return The average balance that the user held during the time frame."
									},
									"id": 5084,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "_getAverageBalanceBetween",
									"nameLocation": "8743:25:18",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 5011,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 5001,
												"mutability": "mutable",
												"name": "_twabs",
												"nameLocation": "8830:6:18",
												"nodeType": "VariableDeclaration",
												"scope": 5084,
												"src": "8778:58:18",
												"stateVariable": false,
												"storageLocation": "storage",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
													"typeString": "struct ObservationLib.Observation[16777215]"
												},
												"typeName": {
													"baseType": {
														"id": 4998,
														"nodeType": "UserDefinedTypeName",
														"pathNode": {
															"id": 4997,
															"name": "ObservationLib.Observation",
															"nodeType": "IdentifierPath",
															"referencedDeclaration": 4311,
															"src": "8778:26:18"
														},
														"referencedDeclaration": 4311,
														"src": "8778:26:18",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_Observation_$4311_storage_ptr",
															"typeString": "struct ObservationLib.Observation"
														}
													},
													"id": 5000,
													"length": {
														"id": 4999,
														"name": "MAX_CARDINALITY",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4723,
														"src": "8805:15:18",
														"typeDescriptions": {
															"typeIdentifier": "t_uint24",
															"typeString": "uint24"
														}
													},
													"nodeType": "ArrayTypeName",
													"src": "8778:43:18",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
														"typeString": "struct ObservationLib.Observation[16777215]"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 5004,
												"mutability": "mutable",
												"name": "_accountDetails",
												"nameLocation": "8868:15:18",
												"nodeType": "VariableDeclaration",
												"scope": 5084,
												"src": "8846:37:18",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
													"typeString": "struct TwabLib.AccountDetails"
												},
												"typeName": {
													"id": 5003,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 5002,
														"name": "AccountDetails",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4730,
														"src": "8846:14:18"
													},
													"referencedDeclaration": 4730,
													"src": "8846:14:18",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_AccountDetails_$4730_storage_ptr",
														"typeString": "struct TwabLib.AccountDetails"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 5006,
												"mutability": "mutable",
												"name": "_startTime",
												"nameLocation": "8900:10:18",
												"nodeType": "VariableDeclaration",
												"scope": 5084,
												"src": "8893:17:18",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint32",
													"typeString": "uint32"
												},
												"typeName": {
													"id": 5005,
													"name": "uint32",
													"nodeType": "ElementaryTypeName",
													"src": "8893:6:18",
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 5008,
												"mutability": "mutable",
												"name": "_endTime",
												"nameLocation": "8927:8:18",
												"nodeType": "VariableDeclaration",
												"scope": 5084,
												"src": "8920:15:18",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint32",
													"typeString": "uint32"
												},
												"typeName": {
													"id": 5007,
													"name": "uint32",
													"nodeType": "ElementaryTypeName",
													"src": "8920:6:18",
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 5010,
												"mutability": "mutable",
												"name": "_currentTime",
												"nameLocation": "8952:12:18",
												"nodeType": "VariableDeclaration",
												"scope": 5084,
												"src": "8945:19:18",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint32",
													"typeString": "uint32"
												},
												"typeName": {
													"id": 5009,
													"name": "uint32",
													"nodeType": "ElementaryTypeName",
													"src": "8945:6:18",
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "8768:202:18"
									},
									"returnParameters": {
										"id": 5014,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 5013,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 5084,
												"src": "8993:7:18",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 5012,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "8993:7:18",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "8992:9:18"
									},
									"scope": 5456,
									"src": "8734:1315:18",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "private"
								},
								{
									"body": {
										"id": 5190,
										"nodeType": "Block",
										"src": "10913:1537:18",
										"statements": [
											{
												"assignments": [
													5103
												],
												"declarations": [
													{
														"constant": false,
														"id": 5103,
														"mutability": "mutable",
														"name": "newestTwabIndex",
														"nameLocation": "10930:15:18",
														"nodeType": "VariableDeclaration",
														"scope": 5190,
														"src": "10923:22:18",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint24",
															"typeString": "uint24"
														},
														"typeName": {
															"id": 5102,
															"name": "uint24",
															"nodeType": "ElementaryTypeName",
															"src": "10923:6:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint24",
																"typeString": "uint24"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 5104,
												"nodeType": "VariableDeclarationStatement",
												"src": "10923:22:18"
											},
											{
												"assignments": [
													5109
												],
												"declarations": [
													{
														"constant": false,
														"id": 5109,
														"mutability": "mutable",
														"name": "afterOrAt",
														"nameLocation": "10989:9:18",
														"nodeType": "VariableDeclaration",
														"scope": 5190,
														"src": "10955:43:18",
														"stateVariable": false,
														"storageLocation": "memory",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
															"typeString": "struct ObservationLib.Observation"
														},
														"typeName": {
															"id": 5108,
															"nodeType": "UserDefinedTypeName",
															"pathNode": {
																"id": 5107,
																"name": "ObservationLib.Observation",
																"nodeType": "IdentifierPath",
																"referencedDeclaration": 4311,
																"src": "10955:26:18"
															},
															"referencedDeclaration": 4311,
															"src": "10955:26:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_Observation_$4311_storage_ptr",
																"typeString": "struct ObservationLib.Observation"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 5110,
												"nodeType": "VariableDeclarationStatement",
												"src": "10955:43:18"
											},
											{
												"assignments": [
													5115
												],
												"declarations": [
													{
														"constant": false,
														"id": 5115,
														"mutability": "mutable",
														"name": "beforeOrAt",
														"nameLocation": "11042:10:18",
														"nodeType": "VariableDeclaration",
														"scope": 5190,
														"src": "11008:44:18",
														"stateVariable": false,
														"storageLocation": "memory",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
															"typeString": "struct ObservationLib.Observation"
														},
														"typeName": {
															"id": 5114,
															"nodeType": "UserDefinedTypeName",
															"pathNode": {
																"id": 5113,
																"name": "ObservationLib.Observation",
																"nodeType": "IdentifierPath",
																"referencedDeclaration": 4311,
																"src": "11008:26:18"
															},
															"referencedDeclaration": 4311,
															"src": "11008:26:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_Observation_$4311_storage_ptr",
																"typeString": "struct ObservationLib.Observation"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 5116,
												"nodeType": "VariableDeclarationStatement",
												"src": "11008:44:18"
											},
											{
												"expression": {
													"id": 5124,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"components": [
															{
																"id": 5117,
																"name": "newestTwabIndex",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 5103,
																"src": "11063:15:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint24",
																	"typeString": "uint24"
																}
															},
															{
																"id": 5118,
																"name": "beforeOrAt",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 5115,
																"src": "11080:10:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																	"typeString": "struct ObservationLib.Observation memory"
																}
															}
														],
														"id": 5119,
														"isConstant": false,
														"isInlineArray": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": true,
														"nodeType": "TupleExpression",
														"src": "11062:29:18",
														"typeDescriptions": {
															"typeIdentifier": "t_tuple$_t_uint24_$_t_struct$_Observation_$4311_memory_ptr_$",
															"typeString": "tuple(uint24,struct ObservationLib.Observation memory)"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"arguments": [
															{
																"id": 5121,
																"name": "_twabs",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 5090,
																"src": "11105:6:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
																	"typeString": "struct ObservationLib.Observation storage ref[16777215] storage pointer"
																}
															},
															{
																"id": 5122,
																"name": "_accountDetails",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 5093,
																"src": "11113:15:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																	"typeString": "struct TwabLib.AccountDetails memory"
																}
															}
														],
														"expression": {
															"argumentTypes": [
																{
																	"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
																	"typeString": "struct ObservationLib.Observation storage ref[16777215] storage pointer"
																},
																{
																	"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																	"typeString": "struct TwabLib.AccountDetails memory"
																}
															],
															"id": 5120,
															"name": "newestTwab",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4960,
															"src": "11094:10:18",
															"typeDescriptions": {
																"typeIdentifier": "t_function_internal_view$_t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr_$_t_struct$_AccountDetails_$4730_memory_ptr_$returns$_t_uint24_$_t_struct$_Observation_$4311_memory_ptr_$",
																"typeString": "function (struct ObservationLib.Observation storage ref[16777215] storage pointer,struct TwabLib.AccountDetails memory) view returns (uint24,struct ObservationLib.Observation memory)"
															}
														},
														"id": 5123,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"kind": "functionCall",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "11094:35:18",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_tuple$_t_uint24_$_t_struct$_Observation_$4311_memory_ptr_$",
															"typeString": "tuple(uint24,struct ObservationLib.Observation memory)"
														}
													},
													"src": "11062:67:18",
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 5125,
												"nodeType": "ExpressionStatement",
												"src": "11062:67:18"
											},
											{
												"condition": {
													"arguments": [
														{
															"id": 5129,
															"name": "_targetTime",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5095,
															"src": "11280:11:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														{
															"id": 5130,
															"name": "_currentTime",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5097,
															"src": "11293:12:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															},
															{
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														],
														"expression": {
															"expression": {
																"id": 5126,
																"name": "beforeOrAt",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 5115,
																"src": "11255:10:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																	"typeString": "struct ObservationLib.Observation memory"
																}
															},
															"id": 5127,
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "timestamp",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 4310,
															"src": "11255:20:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"id": 5128,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "lte",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 4562,
														"src": "11255:24:18",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_pure$_t_uint32_$_t_uint32_$_t_uint32_$returns$_t_bool_$bound_to$_t_uint32_$",
															"typeString": "function (uint32,uint32,uint32) pure returns (bool)"
														}
													},
													"id": 5131,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "11255:51:18",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 5136,
												"nodeType": "IfStatement",
												"src": "11251:112:18",
												"trueBody": {
													"id": 5135,
													"nodeType": "Block",
													"src": "11308:55:18",
													"statements": [
														{
															"expression": {
																"expression": {
																	"id": 5132,
																	"name": "_accountDetails",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 5093,
																	"src": "11329:15:18",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																		"typeString": "struct TwabLib.AccountDetails memory"
																	}
																},
																"id": 5133,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "balance",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 4725,
																"src": "11329:23:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint208",
																	"typeString": "uint208"
																}
															},
															"functionReturnParameters": 5101,
															"id": 5134,
															"nodeType": "Return",
															"src": "11322:30:18"
														}
													]
												}
											},
											{
												"assignments": [
													5138
												],
												"declarations": [
													{
														"constant": false,
														"id": 5138,
														"mutability": "mutable",
														"name": "oldestTwabIndex",
														"nameLocation": "11380:15:18",
														"nodeType": "VariableDeclaration",
														"scope": 5190,
														"src": "11373:22:18",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint24",
															"typeString": "uint24"
														},
														"typeName": {
															"id": 5137,
															"name": "uint24",
															"nodeType": "ElementaryTypeName",
															"src": "11373:6:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint24",
																"typeString": "uint24"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 5139,
												"nodeType": "VariableDeclarationStatement",
												"src": "11373:22:18"
											},
											{
												"expression": {
													"id": 5147,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"components": [
															{
																"id": 5140,
																"name": "oldestTwabIndex",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 5138,
																"src": "11452:15:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint24",
																	"typeString": "uint24"
																}
															},
															{
																"id": 5141,
																"name": "beforeOrAt",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 5115,
																"src": "11469:10:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																	"typeString": "struct ObservationLib.Observation memory"
																}
															}
														],
														"id": 5142,
														"isConstant": false,
														"isInlineArray": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": true,
														"nodeType": "TupleExpression",
														"src": "11451:29:18",
														"typeDescriptions": {
															"typeIdentifier": "t_tuple$_t_uint24_$_t_struct$_Observation_$4311_memory_ptr_$",
															"typeString": "tuple(uint24,struct ObservationLib.Observation memory)"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"arguments": [
															{
																"id": 5144,
																"name": "_twabs",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 5090,
																"src": "11494:6:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
																	"typeString": "struct ObservationLib.Observation storage ref[16777215] storage pointer"
																}
															},
															{
																"id": 5145,
																"name": "_accountDetails",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 5093,
																"src": "11502:15:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																	"typeString": "struct TwabLib.AccountDetails memory"
																}
															}
														],
														"expression": {
															"argumentTypes": [
																{
																	"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
																	"typeString": "struct ObservationLib.Observation storage ref[16777215] storage pointer"
																},
																{
																	"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																	"typeString": "struct TwabLib.AccountDetails memory"
																}
															],
															"id": 5143,
															"name": "oldestTwab",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4924,
															"src": "11483:10:18",
															"typeDescriptions": {
																"typeIdentifier": "t_function_internal_view$_t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr_$_t_struct$_AccountDetails_$4730_memory_ptr_$returns$_t_uint24_$_t_struct$_Observation_$4311_memory_ptr_$",
																"typeString": "function (struct ObservationLib.Observation storage ref[16777215] storage pointer,struct TwabLib.AccountDetails memory) view returns (uint24,struct ObservationLib.Observation memory)"
															}
														},
														"id": 5146,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"kind": "functionCall",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "11483:35:18",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_tuple$_t_uint24_$_t_struct$_Observation_$4311_memory_ptr_$",
															"typeString": "tuple(uint24,struct ObservationLib.Observation memory)"
														}
													},
													"src": "11451:67:18",
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 5148,
												"nodeType": "ExpressionStatement",
												"src": "11451:67:18"
											},
											{
												"condition": {
													"arguments": [
														{
															"expression": {
																"id": 5151,
																"name": "beforeOrAt",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 5115,
																"src": "11639:10:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																	"typeString": "struct ObservationLib.Observation memory"
																}
															},
															"id": 5152,
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "timestamp",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 4310,
															"src": "11639:20:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														{
															"id": 5153,
															"name": "_currentTime",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5097,
															"src": "11661:12:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															},
															{
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														],
														"expression": {
															"id": 5149,
															"name": "_targetTime",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5095,
															"src": "11624:11:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"id": 5150,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "lt",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 4507,
														"src": "11624:14:18",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_pure$_t_uint32_$_t_uint32_$_t_uint32_$returns$_t_bool_$bound_to$_t_uint32_$",
															"typeString": "function (uint32,uint32,uint32) pure returns (bool)"
														}
													},
													"id": 5154,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "11624:50:18",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 5158,
												"nodeType": "IfStatement",
												"src": "11620:89:18",
												"trueBody": {
													"id": 5157,
													"nodeType": "Block",
													"src": "11676:33:18",
													"statements": [
														{
															"expression": {
																"hexValue": "30",
																"id": 5155,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "11697:1:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_rational_0_by_1",
																	"typeString": "int_const 0"
																},
																"value": "0"
															},
															"functionReturnParameters": 5101,
															"id": 5156,
															"nodeType": "Return",
															"src": "11690:8:18"
														}
													]
												}
											},
											{
												"expression": {
													"id": 5172,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"components": [
															{
																"id": 5159,
																"name": "beforeOrAt",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 5115,
																"src": "11772:10:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																	"typeString": "struct ObservationLib.Observation memory"
																}
															},
															{
																"id": 5160,
																"name": "afterOrAt",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 5109,
																"src": "11784:9:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																	"typeString": "struct ObservationLib.Observation memory"
																}
															}
														],
														"id": 5161,
														"isConstant": false,
														"isInlineArray": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": true,
														"nodeType": "TupleExpression",
														"src": "11771:23:18",
														"typeDescriptions": {
															"typeIdentifier": "t_tuple$_t_struct$_Observation_$4311_memory_ptr_$_t_struct$_Observation_$4311_memory_ptr_$",
															"typeString": "tuple(struct ObservationLib.Observation memory,struct ObservationLib.Observation memory)"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"arguments": [
															{
																"id": 5164,
																"name": "_twabs",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 5090,
																"src": "11838:6:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
																	"typeString": "struct ObservationLib.Observation storage ref[16777215] storage pointer"
																}
															},
															{
																"id": 5165,
																"name": "newestTwabIndex",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 5103,
																"src": "11858:15:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint24",
																	"typeString": "uint24"
																}
															},
															{
																"id": 5166,
																"name": "oldestTwabIndex",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 5138,
																"src": "11887:15:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint24",
																	"typeString": "uint24"
																}
															},
															{
																"id": 5167,
																"name": "_targetTime",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 5095,
																"src": "11916:11:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint32",
																	"typeString": "uint32"
																}
															},
															{
																"expression": {
																	"id": 5168,
																	"name": "_accountDetails",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 5093,
																	"src": "11941:15:18",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																		"typeString": "struct TwabLib.AccountDetails memory"
																	}
																},
																"id": 5169,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "cardinality",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 4729,
																"src": "11941:27:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint24",
																	"typeString": "uint24"
																}
															},
															{
																"id": 5170,
																"name": "_currentTime",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 5097,
																"src": "11982:12:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint32",
																	"typeString": "uint32"
																}
															}
														],
														"expression": {
															"argumentTypes": [
																{
																	"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
																	"typeString": "struct ObservationLib.Observation storage ref[16777215] storage pointer"
																},
																{
																	"typeIdentifier": "t_uint24",
																	"typeString": "uint24"
																},
																{
																	"typeIdentifier": "t_uint24",
																	"typeString": "uint24"
																},
																{
																	"typeIdentifier": "t_uint32",
																	"typeString": "uint32"
																},
																{
																	"typeIdentifier": "t_uint24",
																	"typeString": "uint24"
																},
																{
																	"typeIdentifier": "t_uint32",
																	"typeString": "uint32"
																}
															],
															"expression": {
																"id": 5162,
																"name": "ObservationLib",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 4449,
																"src": "11797:14:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_type$_t_contract$_ObservationLib_$4449_$",
																	"typeString": "type(library ObservationLib)"
																}
															},
															"id": 5163,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "binarySearch",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 4448,
															"src": "11797:27:18",
															"typeDescriptions": {
																"typeIdentifier": "t_function_internal_view$_t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr_$_t_uint24_$_t_uint24_$_t_uint32_$_t_uint24_$_t_uint32_$returns$_t_struct$_Observation_$4311_memory_ptr_$_t_struct$_Observation_$4311_memory_ptr_$",
																"typeString": "function (struct ObservationLib.Observation storage ref[16777215] storage pointer,uint24,uint24,uint32,uint24,uint32) view returns (struct ObservationLib.Observation memory,struct ObservationLib.Observation memory)"
															}
														},
														"id": 5171,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"kind": "functionCall",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "11797:207:18",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_tuple$_t_struct$_Observation_$4311_memory_ptr_$_t_struct$_Observation_$4311_memory_ptr_$",
															"typeString": "tuple(struct ObservationLib.Observation memory,struct ObservationLib.Observation memory)"
														}
													},
													"src": "11771:233:18",
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 5173,
												"nodeType": "ExpressionStatement",
												"src": "11771:233:18"
											},
											{
												"expression": {
													"commonType": {
														"typeIdentifier": "t_uint224",
														"typeString": "uint224"
													},
													"id": 5188,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"components": [
															{
																"commonType": {
																	"typeIdentifier": "t_uint224",
																	"typeString": "uint224"
																},
																"id": 5178,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"expression": {
																		"id": 5174,
																		"name": "afterOrAt",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 5109,
																		"src": "12310:9:18",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																			"typeString": "struct ObservationLib.Observation memory"
																		}
																	},
																	"id": 5175,
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "amount",
																	"nodeType": "MemberAccess",
																	"referencedDeclaration": 4308,
																	"src": "12310:16:18",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint224",
																		"typeString": "uint224"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "-",
																"rightExpression": {
																	"expression": {
																		"id": 5176,
																		"name": "beforeOrAt",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 5115,
																		"src": "12329:10:18",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																			"typeString": "struct ObservationLib.Observation memory"
																		}
																	},
																	"id": 5177,
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "amount",
																	"nodeType": "MemberAccess",
																	"referencedDeclaration": 4308,
																	"src": "12329:17:18",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint224",
																		"typeString": "uint224"
																	}
																},
																"src": "12310:36:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint224",
																	"typeString": "uint224"
																}
															}
														],
														"id": 5179,
														"isConstant": false,
														"isInlineArray": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"nodeType": "TupleExpression",
														"src": "12309:38:18",
														"typeDescriptions": {
															"typeIdentifier": "t_uint224",
															"typeString": "uint224"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "/",
													"rightExpression": {
														"arguments": [
															{
																"expression": {
																	"id": 5182,
																	"name": "afterOrAt",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 5109,
																	"src": "12387:9:18",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																		"typeString": "struct ObservationLib.Observation memory"
																	}
																},
																"id": 5183,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "timestamp",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 4310,
																"src": "12387:19:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint32",
																	"typeString": "uint32"
																}
															},
															{
																"expression": {
																	"id": 5184,
																	"name": "beforeOrAt",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 5115,
																	"src": "12408:10:18",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																		"typeString": "struct ObservationLib.Observation memory"
																	}
																},
																"id": 5185,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "timestamp",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 4310,
																"src": "12408:20:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint32",
																	"typeString": "uint32"
																}
															},
															{
																"id": 5186,
																"name": "_currentTime",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 5097,
																"src": "12430:12:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint32",
																	"typeString": "uint32"
																}
															}
														],
														"expression": {
															"argumentTypes": [
																{
																	"typeIdentifier": "t_uint32",
																	"typeString": "uint32"
																},
																{
																	"typeIdentifier": "t_uint32",
																	"typeString": "uint32"
																},
																{
																	"typeIdentifier": "t_uint32",
																	"typeString": "uint32"
																}
															],
															"expression": {
																"id": 5180,
																"name": "OverflowSafeComparatorLib",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 4621,
																"src": "12350:25:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_type$_t_contract$_OverflowSafeComparatorLib_$4621_$",
																	"typeString": "type(library OverflowSafeComparatorLib)"
																}
															},
															"id": 5181,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "checkedSub",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 4620,
															"src": "12350:36:18",
															"typeDescriptions": {
																"typeIdentifier": "t_function_internal_pure$_t_uint32_$_t_uint32_$_t_uint32_$returns$_t_uint32_$",
																"typeString": "function (uint32,uint32,uint32) pure returns (uint32)"
															}
														},
														"id": 5187,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"kind": "functionCall",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "12350:93:18",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														}
													},
													"src": "12309:134:18",
													"typeDescriptions": {
														"typeIdentifier": "t_uint224",
														"typeString": "uint224"
													}
												},
												"functionReturnParameters": 5101,
												"id": 5189,
												"nodeType": "Return",
												"src": "12290:153:18"
											}
										]
									},
									"documentation": {
										"id": 5085,
										"nodeType": "StructuredDocumentation",
										"src": "10055:621:18",
										"text": "@notice Searches TWAB history and calculate the difference between amount(s)/timestamp(s) to return average balance\nbetween the Observations closes to the supplied targetTime.\n @param _twabs          Individual user Observation recorded checkpoints passed as storage pointer\n @param _accountDetails User AccountDetails struct loaded in memory\n @param _targetTime     Target timestamp to filter Observations in the ring buffer binary search\n @param _currentTime    Block.timestamp\n @return uint256 Time-weighted average amount between two closest observations."
									},
									"id": 5191,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "_getBalanceAt",
									"nameLocation": "10690:13:18",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 5098,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 5090,
												"mutability": "mutable",
												"name": "_twabs",
												"nameLocation": "10765:6:18",
												"nodeType": "VariableDeclaration",
												"scope": 5191,
												"src": "10713:58:18",
												"stateVariable": false,
												"storageLocation": "storage",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
													"typeString": "struct ObservationLib.Observation[16777215]"
												},
												"typeName": {
													"baseType": {
														"id": 5087,
														"nodeType": "UserDefinedTypeName",
														"pathNode": {
															"id": 5086,
															"name": "ObservationLib.Observation",
															"nodeType": "IdentifierPath",
															"referencedDeclaration": 4311,
															"src": "10713:26:18"
														},
														"referencedDeclaration": 4311,
														"src": "10713:26:18",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_Observation_$4311_storage_ptr",
															"typeString": "struct ObservationLib.Observation"
														}
													},
													"id": 5089,
													"length": {
														"id": 5088,
														"name": "MAX_CARDINALITY",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4723,
														"src": "10740:15:18",
														"typeDescriptions": {
															"typeIdentifier": "t_uint24",
															"typeString": "uint24"
														}
													},
													"nodeType": "ArrayTypeName",
													"src": "10713:43:18",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
														"typeString": "struct ObservationLib.Observation[16777215]"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 5093,
												"mutability": "mutable",
												"name": "_accountDetails",
												"nameLocation": "10803:15:18",
												"nodeType": "VariableDeclaration",
												"scope": 5191,
												"src": "10781:37:18",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
													"typeString": "struct TwabLib.AccountDetails"
												},
												"typeName": {
													"id": 5092,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 5091,
														"name": "AccountDetails",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4730,
														"src": "10781:14:18"
													},
													"referencedDeclaration": 4730,
													"src": "10781:14:18",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_AccountDetails_$4730_storage_ptr",
														"typeString": "struct TwabLib.AccountDetails"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 5095,
												"mutability": "mutable",
												"name": "_targetTime",
												"nameLocation": "10835:11:18",
												"nodeType": "VariableDeclaration",
												"scope": 5191,
												"src": "10828:18:18",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint32",
													"typeString": "uint32"
												},
												"typeName": {
													"id": 5094,
													"name": "uint32",
													"nodeType": "ElementaryTypeName",
													"src": "10828:6:18",
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 5097,
												"mutability": "mutable",
												"name": "_currentTime",
												"nameLocation": "10863:12:18",
												"nodeType": "VariableDeclaration",
												"scope": 5191,
												"src": "10856:19:18",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint32",
													"typeString": "uint32"
												},
												"typeName": {
													"id": 5096,
													"name": "uint32",
													"nodeType": "ElementaryTypeName",
													"src": "10856:6:18",
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "10703:178:18"
									},
									"returnParameters": {
										"id": 5101,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 5100,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 5191,
												"src": "10904:7:18",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 5099,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "10904:7:18",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "10903:9:18"
									},
									"scope": 5456,
									"src": "10681:1769:18",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "private"
								},
								{
									"body": {
										"id": 5308,
										"nodeType": "Block",
										"src": "14173:1465:18",
										"statements": [
											{
												"condition": {
													"arguments": [
														{
															"id": 5223,
															"name": "_targetTimestamp",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5212,
															"src": "14312:16:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														{
															"id": 5224,
															"name": "_time",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5214,
															"src": "14330:5:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															},
															{
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														],
														"expression": {
															"expression": {
																"id": 5220,
																"name": "_newestTwab",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 5203,
																"src": "14287:11:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																	"typeString": "struct ObservationLib.Observation memory"
																}
															},
															"id": 5221,
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "timestamp",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 4310,
															"src": "14287:21:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"id": 5222,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "lt",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 4507,
														"src": "14287:24:18",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_pure$_t_uint32_$_t_uint32_$_t_uint32_$returns$_t_bool_$bound_to$_t_uint32_$",
															"typeString": "function (uint32,uint32,uint32) pure returns (bool)"
														}
													},
													"id": 5225,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "14287:49:18",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 5234,
												"nodeType": "IfStatement",
												"src": "14283:159:18",
												"trueBody": {
													"id": 5233,
													"nodeType": "Block",
													"src": "14338:104:18",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"id": 5227,
																		"name": "_newestTwab",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 5203,
																		"src": "14376:11:18",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																			"typeString": "struct ObservationLib.Observation memory"
																		}
																	},
																	{
																		"expression": {
																			"id": 5228,
																			"name": "_accountDetails",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 5200,
																			"src": "14389:15:18",
																			"typeDescriptions": {
																				"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																				"typeString": "struct TwabLib.AccountDetails memory"
																			}
																		},
																		"id": 5229,
																		"isConstant": false,
																		"isLValue": true,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "balance",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 4725,
																		"src": "14389:23:18",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint208",
																			"typeString": "uint208"
																		}
																	},
																	{
																		"id": 5230,
																		"name": "_targetTimestamp",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 5212,
																		"src": "14414:16:18",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint32",
																			"typeString": "uint32"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																			"typeString": "struct ObservationLib.Observation memory"
																		},
																		{
																			"typeIdentifier": "t_uint208",
																			"typeString": "uint208"
																		},
																		{
																			"typeIdentifier": "t_uint32",
																			"typeString": "uint32"
																		}
																	],
																	"id": 5226,
																	"name": "_computeNextTwab",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 5341,
																	"src": "14359:16:18",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_internal_pure$_t_struct$_Observation_$4311_memory_ptr_$_t_uint224_$_t_uint32_$returns$_t_struct$_Observation_$4311_memory_ptr_$",
																		"typeString": "function (struct ObservationLib.Observation memory,uint224,uint32) pure returns (struct ObservationLib.Observation memory)"
																	}
																},
																"id": 5231,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "14359:72:18",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																	"typeString": "struct ObservationLib.Observation memory"
																}
															},
															"functionReturnParameters": 5219,
															"id": 5232,
															"nodeType": "Return",
															"src": "14352:79:18"
														}
													]
												}
											},
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													},
													"id": 5238,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"expression": {
															"id": 5235,
															"name": "_newestTwab",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5203,
															"src": "14456:11:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																"typeString": "struct ObservationLib.Observation memory"
															}
														},
														"id": 5236,
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "timestamp",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 4310,
														"src": "14456:21:18",
														"typeDescriptions": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "==",
													"rightExpression": {
														"id": 5237,
														"name": "_targetTimestamp",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 5212,
														"src": "14481:16:18",
														"typeDescriptions": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														}
													},
													"src": "14456:41:18",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 5242,
												"nodeType": "IfStatement",
												"src": "14452:90:18",
												"trueBody": {
													"id": 5241,
													"nodeType": "Block",
													"src": "14499:43:18",
													"statements": [
														{
															"expression": {
																"id": 5239,
																"name": "_newestTwab",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 5203,
																"src": "14520:11:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																	"typeString": "struct ObservationLib.Observation memory"
																}
															},
															"functionReturnParameters": 5219,
															"id": 5240,
															"nodeType": "Return",
															"src": "14513:18:18"
														}
													]
												}
											},
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													},
													"id": 5246,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"expression": {
															"id": 5243,
															"name": "_oldestTwab",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5206,
															"src": "14556:11:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																"typeString": "struct ObservationLib.Observation memory"
															}
														},
														"id": 5244,
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "timestamp",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 4310,
														"src": "14556:21:18",
														"typeDescriptions": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "==",
													"rightExpression": {
														"id": 5245,
														"name": "_targetTimestamp",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 5212,
														"src": "14581:16:18",
														"typeDescriptions": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														}
													},
													"src": "14556:41:18",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 5250,
												"nodeType": "IfStatement",
												"src": "14552:90:18",
												"trueBody": {
													"id": 5249,
													"nodeType": "Block",
													"src": "14599:43:18",
													"statements": [
														{
															"expression": {
																"id": 5247,
																"name": "_oldestTwab",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 5206,
																"src": "14620:11:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																	"typeString": "struct ObservationLib.Observation memory"
																}
															},
															"functionReturnParameters": 5219,
															"id": 5248,
															"nodeType": "Return",
															"src": "14613:18:18"
														}
													]
												}
											},
											{
												"condition": {
													"arguments": [
														{
															"expression": {
																"id": 5253,
																"name": "_oldestTwab",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 5206,
																"src": "14774:11:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																	"typeString": "struct ObservationLib.Observation memory"
																}
															},
															"id": 5254,
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "timestamp",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 4310,
															"src": "14774:21:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														{
															"id": 5255,
															"name": "_time",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5214,
															"src": "14797:5:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															},
															{
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														],
														"expression": {
															"id": 5251,
															"name": "_targetTimestamp",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5212,
															"src": "14754:16:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														"id": 5252,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "lt",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 4507,
														"src": "14754:19:18",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_pure$_t_uint32_$_t_uint32_$_t_uint32_$returns$_t_bool_$bound_to$_t_uint32_$",
															"typeString": "function (uint32,uint32,uint32) pure returns (bool)"
														}
													},
													"id": 5256,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "14754:49:18",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 5264,
												"nodeType": "IfStatement",
												"src": "14750:157:18",
												"trueBody": {
													"id": 5263,
													"nodeType": "Block",
													"src": "14805:102:18",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"hexValue": "30",
																		"id": 5259,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "number",
																		"lValueRequested": false,
																		"nodeType": "Literal",
																		"src": "14863:1:18",
																		"typeDescriptions": {
																			"typeIdentifier": "t_rational_0_by_1",
																			"typeString": "int_const 0"
																		},
																		"value": "0"
																	},
																	{
																		"id": 5260,
																		"name": "_targetTimestamp",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 5212,
																		"src": "14877:16:18",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint32",
																			"typeString": "uint32"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_rational_0_by_1",
																			"typeString": "int_const 0"
																		},
																		{
																			"typeIdentifier": "t_uint32",
																			"typeString": "uint32"
																		}
																	],
																	"expression": {
																		"id": 5257,
																		"name": "ObservationLib",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4449,
																		"src": "14826:14:18",
																		"typeDescriptions": {
																			"typeIdentifier": "t_type$_t_contract$_ObservationLib_$4449_$",
																			"typeString": "type(library ObservationLib)"
																		}
																	},
																	"id": 5258,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "Observation",
																	"nodeType": "MemberAccess",
																	"referencedDeclaration": 4311,
																	"src": "14826:26:18",
																	"typeDescriptions": {
																		"typeIdentifier": "t_type$_t_struct$_Observation_$4311_storage_ptr_$",
																		"typeString": "type(struct ObservationLib.Observation storage pointer)"
																	}
																},
																"id": 5261,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "structConstructorCall",
																"lValueRequested": false,
																"names": [
																	"amount",
																	"timestamp"
																],
																"nodeType": "FunctionCall",
																"src": "14826:70:18",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																	"typeString": "struct ObservationLib.Observation memory"
																}
															},
															"functionReturnParameters": 5219,
															"id": 5262,
															"nodeType": "Return",
															"src": "14819:77:18"
														}
													]
												}
											},
											{
												"assignments": [
													5269,
													5272
												],
												"declarations": [
													{
														"constant": false,
														"id": 5269,
														"mutability": "mutable",
														"name": "beforeOrAtStart",
														"nameLocation": "15032:15:18",
														"nodeType": "VariableDeclaration",
														"scope": 5308,
														"src": "14998:49:18",
														"stateVariable": false,
														"storageLocation": "memory",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
															"typeString": "struct ObservationLib.Observation"
														},
														"typeName": {
															"id": 5268,
															"nodeType": "UserDefinedTypeName",
															"pathNode": {
																"id": 5267,
																"name": "ObservationLib.Observation",
																"nodeType": "IdentifierPath",
																"referencedDeclaration": 4311,
																"src": "14998:26:18"
															},
															"referencedDeclaration": 4311,
															"src": "14998:26:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_Observation_$4311_storage_ptr",
																"typeString": "struct ObservationLib.Observation"
															}
														},
														"visibility": "internal"
													},
													{
														"constant": false,
														"id": 5272,
														"mutability": "mutable",
														"name": "afterOrAtStart",
														"nameLocation": "15095:14:18",
														"nodeType": "VariableDeclaration",
														"scope": 5308,
														"src": "15061:48:18",
														"stateVariable": false,
														"storageLocation": "memory",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
															"typeString": "struct ObservationLib.Observation"
														},
														"typeName": {
															"id": 5271,
															"nodeType": "UserDefinedTypeName",
															"pathNode": {
																"id": 5270,
																"name": "ObservationLib.Observation",
																"nodeType": "IdentifierPath",
																"referencedDeclaration": 4311,
																"src": "15061:26:18"
															},
															"referencedDeclaration": 4311,
															"src": "15061:26:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_Observation_$4311_storage_ptr",
																"typeString": "struct ObservationLib.Observation"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 5283,
												"initialValue": {
													"arguments": [
														{
															"id": 5275,
															"name": "_twabs",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5197,
															"src": "15167:6:18",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
																"typeString": "struct ObservationLib.Observation storage ref[16777215] storage pointer"
															}
														},
														{
															"id": 5276,
															"name": "_newestTwabIndex",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5208,
															"src": "15191:16:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint24",
																"typeString": "uint24"
															}
														},
														{
															"id": 5277,
															"name": "_oldestTwabIndex",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5210,
															"src": "15225:16:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint24",
																"typeString": "uint24"
															}
														},
														{
															"id": 5278,
															"name": "_targetTimestamp",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5212,
															"src": "15259:16:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														},
														{
															"expression": {
																"id": 5279,
																"name": "_accountDetails",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 5200,
																"src": "15293:15:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																	"typeString": "struct TwabLib.AccountDetails memory"
																}
															},
															"id": 5280,
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "cardinality",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 4729,
															"src": "15293:27:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint24",
																"typeString": "uint24"
															}
														},
														{
															"id": 5281,
															"name": "_time",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5214,
															"src": "15338:5:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
																"typeString": "struct ObservationLib.Observation storage ref[16777215] storage pointer"
															},
															{
																"typeIdentifier": "t_uint24",
																"typeString": "uint24"
															},
															{
																"typeIdentifier": "t_uint24",
																"typeString": "uint24"
															},
															{
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															},
															{
																"typeIdentifier": "t_uint24",
																"typeString": "uint24"
															},
															{
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														],
														"expression": {
															"id": 5273,
															"name": "ObservationLib",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4449,
															"src": "15122:14:18",
															"typeDescriptions": {
																"typeIdentifier": "t_type$_t_contract$_ObservationLib_$4449_$",
																"typeString": "type(library ObservationLib)"
															}
														},
														"id": 5274,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "binarySearch",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 4448,
														"src": "15122:27:18",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_view$_t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr_$_t_uint24_$_t_uint24_$_t_uint32_$_t_uint24_$_t_uint32_$returns$_t_struct$_Observation_$4311_memory_ptr_$_t_struct$_Observation_$4311_memory_ptr_$",
															"typeString": "function (struct ObservationLib.Observation storage ref[16777215] storage pointer,uint24,uint24,uint32,uint24,uint32) view returns (struct ObservationLib.Observation memory,struct ObservationLib.Observation memory)"
														}
													},
													"id": 5282,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "15122:235:18",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$_t_struct$_Observation_$4311_memory_ptr_$_t_struct$_Observation_$4311_memory_ptr_$",
														"typeString": "tuple(struct ObservationLib.Observation memory,struct ObservationLib.Observation memory)"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "14984:373:18"
											},
											{
												"assignments": [
													5285
												],
												"declarations": [
													{
														"constant": false,
														"id": 5285,
														"mutability": "mutable",
														"name": "heldBalance",
														"nameLocation": "15376:11:18",
														"nodeType": "VariableDeclaration",
														"scope": 5308,
														"src": "15368:19:18",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint224",
															"typeString": "uint224"
														},
														"typeName": {
															"id": 5284,
															"name": "uint224",
															"nodeType": "ElementaryTypeName",
															"src": "15368:7:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint224",
																"typeString": "uint224"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 5301,
												"initialValue": {
													"commonType": {
														"typeIdentifier": "t_uint224",
														"typeString": "uint224"
													},
													"id": 5300,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"components": [
															{
																"commonType": {
																	"typeIdentifier": "t_uint224",
																	"typeString": "uint224"
																},
																"id": 5290,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"expression": {
																		"id": 5286,
																		"name": "afterOrAtStart",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 5272,
																		"src": "15391:14:18",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																			"typeString": "struct ObservationLib.Observation memory"
																		}
																	},
																	"id": 5287,
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "amount",
																	"nodeType": "MemberAccess",
																	"referencedDeclaration": 4308,
																	"src": "15391:21:18",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint224",
																		"typeString": "uint224"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "-",
																"rightExpression": {
																	"expression": {
																		"id": 5288,
																		"name": "beforeOrAtStart",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 5269,
																		"src": "15415:15:18",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																			"typeString": "struct ObservationLib.Observation memory"
																		}
																	},
																	"id": 5289,
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "amount",
																	"nodeType": "MemberAccess",
																	"referencedDeclaration": 4308,
																	"src": "15415:22:18",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint224",
																		"typeString": "uint224"
																	}
																},
																"src": "15391:46:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint224",
																	"typeString": "uint224"
																}
															}
														],
														"id": 5291,
														"isConstant": false,
														"isInlineArray": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"nodeType": "TupleExpression",
														"src": "15390:48:18",
														"typeDescriptions": {
															"typeIdentifier": "t_uint224",
															"typeString": "uint224"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "/",
													"rightExpression": {
														"arguments": [
															{
																"expression": {
																	"id": 5294,
																	"name": "afterOrAtStart",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 5272,
																	"src": "15490:14:18",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																		"typeString": "struct ObservationLib.Observation memory"
																	}
																},
																"id": 5295,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "timestamp",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 4310,
																"src": "15490:24:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint32",
																	"typeString": "uint32"
																}
															},
															{
																"expression": {
																	"id": 5296,
																	"name": "beforeOrAtStart",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 5269,
																	"src": "15516:15:18",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																		"typeString": "struct ObservationLib.Observation memory"
																	}
																},
																"id": 5297,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "timestamp",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 4310,
																"src": "15516:25:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint32",
																	"typeString": "uint32"
																}
															},
															{
																"id": 5298,
																"name": "_time",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 5214,
																"src": "15543:5:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint32",
																	"typeString": "uint32"
																}
															}
														],
														"expression": {
															"argumentTypes": [
																{
																	"typeIdentifier": "t_uint32",
																	"typeString": "uint32"
																},
																{
																	"typeIdentifier": "t_uint32",
																	"typeString": "uint32"
																},
																{
																	"typeIdentifier": "t_uint32",
																	"typeString": "uint32"
																}
															],
															"expression": {
																"id": 5292,
																"name": "OverflowSafeComparatorLib",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 4621,
																"src": "15453:25:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_type$_t_contract$_OverflowSafeComparatorLib_$4621_$",
																	"typeString": "type(library OverflowSafeComparatorLib)"
																}
															},
															"id": 5293,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "checkedSub",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 4620,
															"src": "15453:36:18",
															"typeDescriptions": {
																"typeIdentifier": "t_function_internal_pure$_t_uint32_$_t_uint32_$_t_uint32_$returns$_t_uint32_$",
																"typeString": "function (uint32,uint32,uint32) pure returns (uint32)"
															}
														},
														"id": 5299,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"kind": "functionCall",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "15453:96:18",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														}
													},
													"src": "15390:159:18",
													"typeDescriptions": {
														"typeIdentifier": "t_uint224",
														"typeString": "uint224"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "15368:181:18"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 5303,
															"name": "beforeOrAtStart",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5269,
															"src": "15584:15:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																"typeString": "struct ObservationLib.Observation memory"
															}
														},
														{
															"id": 5304,
															"name": "heldBalance",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5285,
															"src": "15601:11:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint224",
																"typeString": "uint224"
															}
														},
														{
															"id": 5305,
															"name": "_targetTimestamp",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5212,
															"src": "15614:16:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																"typeString": "struct ObservationLib.Observation memory"
															},
															{
																"typeIdentifier": "t_uint224",
																"typeString": "uint224"
															},
															{
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														],
														"id": 5302,
														"name": "_computeNextTwab",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 5341,
														"src": "15567:16:18",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_pure$_t_struct$_Observation_$4311_memory_ptr_$_t_uint224_$_t_uint32_$returns$_t_struct$_Observation_$4311_memory_ptr_$",
															"typeString": "function (struct ObservationLib.Observation memory,uint224,uint32) pure returns (struct ObservationLib.Observation memory)"
														}
													},
													"id": 5306,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "15567:64:18",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
														"typeString": "struct ObservationLib.Observation memory"
													}
												},
												"functionReturnParameters": 5219,
												"id": 5307,
												"nodeType": "Return",
												"src": "15560:71:18"
											}
										]
									},
									"documentation": {
										"id": 5192,
										"nodeType": "StructuredDocumentation",
										"src": "12456:1279:18",
										"text": "@notice Calculates a user TWAB for a target timestamp using the historical TWAB records.\nThe balance is linearly interpolated: amount differences / timestamp differences\nusing the simple (after.amount - before.amount / end.timestamp - start.timestamp) formula.\n/** @dev    Binary search in _calculateTwab fails when searching out of bounds. Thus, before\nsearching we exclude target timestamps out of range of newest/oldest TWAB(s).\nIF a search is before or after the range we \"extrapolate\" a Observation from the expected state.\n @param _twabs           Individual user Observation recorded checkpoints passed as storage pointer\n @param _accountDetails  User AccountDetails struct loaded in memory\n @param _newestTwab      Newest TWAB in history (end of ring buffer)\n @param _oldestTwab      Olderst TWAB in history (end of ring buffer)\n @param _newestTwabIndex Pointer in ring buffer to newest TWAB\n @param _oldestTwabIndex Pointer in ring buffer to oldest TWAB\n @param _targetTimestamp Epoch timestamp to calculate for time (T) in the TWAB\n @param _time            Block.timestamp\n @return accountDetails Updated Account.details struct"
									},
									"id": 5309,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "_calculateTwab",
									"nameLocation": "13749:14:18",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 5215,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 5197,
												"mutability": "mutable",
												"name": "_twabs",
												"nameLocation": "13825:6:18",
												"nodeType": "VariableDeclaration",
												"scope": 5309,
												"src": "13773:58:18",
												"stateVariable": false,
												"storageLocation": "storage",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
													"typeString": "struct ObservationLib.Observation[16777215]"
												},
												"typeName": {
													"baseType": {
														"id": 5194,
														"nodeType": "UserDefinedTypeName",
														"pathNode": {
															"id": 5193,
															"name": "ObservationLib.Observation",
															"nodeType": "IdentifierPath",
															"referencedDeclaration": 4311,
															"src": "13773:26:18"
														},
														"referencedDeclaration": 4311,
														"src": "13773:26:18",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_Observation_$4311_storage_ptr",
															"typeString": "struct ObservationLib.Observation"
														}
													},
													"id": 5196,
													"length": {
														"id": 5195,
														"name": "MAX_CARDINALITY",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4723,
														"src": "13800:15:18",
														"typeDescriptions": {
															"typeIdentifier": "t_uint24",
															"typeString": "uint24"
														}
													},
													"nodeType": "ArrayTypeName",
													"src": "13773:43:18",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
														"typeString": "struct ObservationLib.Observation[16777215]"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 5200,
												"mutability": "mutable",
												"name": "_accountDetails",
												"nameLocation": "13863:15:18",
												"nodeType": "VariableDeclaration",
												"scope": 5309,
												"src": "13841:37:18",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
													"typeString": "struct TwabLib.AccountDetails"
												},
												"typeName": {
													"id": 5199,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 5198,
														"name": "AccountDetails",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4730,
														"src": "13841:14:18"
													},
													"referencedDeclaration": 4730,
													"src": "13841:14:18",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_AccountDetails_$4730_storage_ptr",
														"typeString": "struct TwabLib.AccountDetails"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 5203,
												"mutability": "mutable",
												"name": "_newestTwab",
												"nameLocation": "13922:11:18",
												"nodeType": "VariableDeclaration",
												"scope": 5309,
												"src": "13888:45:18",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
													"typeString": "struct ObservationLib.Observation"
												},
												"typeName": {
													"id": 5202,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 5201,
														"name": "ObservationLib.Observation",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4311,
														"src": "13888:26:18"
													},
													"referencedDeclaration": 4311,
													"src": "13888:26:18",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_Observation_$4311_storage_ptr",
														"typeString": "struct ObservationLib.Observation"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 5206,
												"mutability": "mutable",
												"name": "_oldestTwab",
												"nameLocation": "13977:11:18",
												"nodeType": "VariableDeclaration",
												"scope": 5309,
												"src": "13943:45:18",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
													"typeString": "struct ObservationLib.Observation"
												},
												"typeName": {
													"id": 5205,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 5204,
														"name": "ObservationLib.Observation",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4311,
														"src": "13943:26:18"
													},
													"referencedDeclaration": 4311,
													"src": "13943:26:18",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_Observation_$4311_storage_ptr",
														"typeString": "struct ObservationLib.Observation"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 5208,
												"mutability": "mutable",
												"name": "_newestTwabIndex",
												"nameLocation": "14005:16:18",
												"nodeType": "VariableDeclaration",
												"scope": 5309,
												"src": "13998:23:18",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint24",
													"typeString": "uint24"
												},
												"typeName": {
													"id": 5207,
													"name": "uint24",
													"nodeType": "ElementaryTypeName",
													"src": "13998:6:18",
													"typeDescriptions": {
														"typeIdentifier": "t_uint24",
														"typeString": "uint24"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 5210,
												"mutability": "mutable",
												"name": "_oldestTwabIndex",
												"nameLocation": "14038:16:18",
												"nodeType": "VariableDeclaration",
												"scope": 5309,
												"src": "14031:23:18",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint24",
													"typeString": "uint24"
												},
												"typeName": {
													"id": 5209,
													"name": "uint24",
													"nodeType": "ElementaryTypeName",
													"src": "14031:6:18",
													"typeDescriptions": {
														"typeIdentifier": "t_uint24",
														"typeString": "uint24"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 5212,
												"mutability": "mutable",
												"name": "_targetTimestamp",
												"nameLocation": "14071:16:18",
												"nodeType": "VariableDeclaration",
												"scope": 5309,
												"src": "14064:23:18",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint32",
													"typeString": "uint32"
												},
												"typeName": {
													"id": 5211,
													"name": "uint32",
													"nodeType": "ElementaryTypeName",
													"src": "14064:6:18",
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 5214,
												"mutability": "mutable",
												"name": "_time",
												"nameLocation": "14104:5:18",
												"nodeType": "VariableDeclaration",
												"scope": 5309,
												"src": "14097:12:18",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint32",
													"typeString": "uint32"
												},
												"typeName": {
													"id": 5213,
													"name": "uint32",
													"nodeType": "ElementaryTypeName",
													"src": "14097:6:18",
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "13763:352:18"
									},
									"returnParameters": {
										"id": 5219,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 5218,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 5309,
												"src": "14138:33:18",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
													"typeString": "struct ObservationLib.Observation"
												},
												"typeName": {
													"id": 5217,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 5216,
														"name": "ObservationLib.Observation",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4311,
														"src": "14138:26:18"
													},
													"referencedDeclaration": 4311,
													"src": "14138:26:18",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_Observation_$4311_storage_ptr",
														"typeString": "struct ObservationLib.Observation"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "14137:35:18"
									},
									"scope": 5456,
									"src": "13740:1898:18",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "private"
								},
								{
									"body": {
										"id": 5340,
										"nodeType": "Block",
										"src": "16302:360:18",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint224",
																"typeString": "uint224"
															},
															"id": 5336,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"expression": {
																	"id": 5325,
																	"name": "_currentTwab",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 5313,
																	"src": "16477:12:18",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																		"typeString": "struct ObservationLib.Observation memory"
																	}
																},
																"id": 5326,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "amount",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 4308,
																"src": "16477:19:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint224",
																	"typeString": "uint224"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "+",
															"rightExpression": {
																"commonType": {
																	"typeIdentifier": "t_uint224",
																	"typeString": "uint224"
																},
																"id": 5335,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 5327,
																	"name": "_currentBalance",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 5315,
																	"src": "16519:15:18",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint224",
																		"typeString": "uint224"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "*",
																"rightExpression": {
																	"components": [
																		{
																			"arguments": [
																				{
																					"expression": {
																						"id": 5330,
																						"name": "_currentTwab",
																						"nodeType": "Identifier",
																						"overloadedDeclarations": [],
																						"referencedDeclaration": 5313,
																						"src": "16575:12:18",
																						"typeDescriptions": {
																							"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																							"typeString": "struct ObservationLib.Observation memory"
																						}
																					},
																					"id": 5331,
																					"isConstant": false,
																					"isLValue": true,
																					"isPure": false,
																					"lValueRequested": false,
																					"memberName": "timestamp",
																					"nodeType": "MemberAccess",
																					"referencedDeclaration": 4310,
																					"src": "16575:22:18",
																					"typeDescriptions": {
																						"typeIdentifier": "t_uint32",
																						"typeString": "uint32"
																					}
																				},
																				{
																					"id": 5332,
																					"name": "_time",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 5317,
																					"src": "16599:5:18",
																					"typeDescriptions": {
																						"typeIdentifier": "t_uint32",
																						"typeString": "uint32"
																					}
																				}
																			],
																			"expression": {
																				"argumentTypes": [
																					{
																						"typeIdentifier": "t_uint32",
																						"typeString": "uint32"
																					},
																					{
																						"typeIdentifier": "t_uint32",
																						"typeString": "uint32"
																					}
																				],
																				"expression": {
																					"id": 5328,
																					"name": "_time",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 5317,
																					"src": "16558:5:18",
																					"typeDescriptions": {
																						"typeIdentifier": "t_uint32",
																						"typeString": "uint32"
																					}
																				},
																				"id": 5329,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": false,
																				"lValueRequested": false,
																				"memberName": "checkedSub",
																				"nodeType": "MemberAccess",
																				"referencedDeclaration": 4620,
																				"src": "16558:16:18",
																				"typeDescriptions": {
																					"typeIdentifier": "t_function_internal_pure$_t_uint32_$_t_uint32_$_t_uint32_$returns$_t_uint32_$bound_to$_t_uint32_$",
																					"typeString": "function (uint32,uint32,uint32) pure returns (uint32)"
																				}
																			},
																			"id": 5333,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": false,
																			"kind": "functionCall",
																			"lValueRequested": false,
																			"names": [],
																			"nodeType": "FunctionCall",
																			"src": "16558:47:18",
																			"tryCall": false,
																			"typeDescriptions": {
																				"typeIdentifier": "t_uint32",
																				"typeString": "uint32"
																			}
																		}
																	],
																	"id": 5334,
																	"isConstant": false,
																	"isInlineArray": false,
																	"isLValue": false,
																	"isPure": false,
																	"lValueRequested": false,
																	"nodeType": "TupleExpression",
																	"src": "16557:49:18",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint32",
																		"typeString": "uint32"
																	}
																},
																"src": "16519:87:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint224",
																	"typeString": "uint224"
																}
															},
															"src": "16477:129:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint224",
																"typeString": "uint224"
															}
														},
														{
															"id": 5337,
															"name": "_time",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5317,
															"src": "16635:5:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint224",
																"typeString": "uint224"
															},
															{
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														],
														"expression": {
															"id": 5323,
															"name": "ObservationLib",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4449,
															"src": "16424:14:18",
															"typeDescriptions": {
																"typeIdentifier": "t_type$_t_contract$_ObservationLib_$4449_$",
																"typeString": "type(library ObservationLib)"
															}
														},
														"id": 5324,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "Observation",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 4311,
														"src": "16424:26:18",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_struct$_Observation_$4311_storage_ptr_$",
															"typeString": "type(struct ObservationLib.Observation storage pointer)"
														}
													},
													"id": 5338,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "structConstructorCall",
													"lValueRequested": false,
													"names": [
														"amount",
														"timestamp"
													],
													"nodeType": "FunctionCall",
													"src": "16424:231:18",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
														"typeString": "struct ObservationLib.Observation memory"
													}
												},
												"functionReturnParameters": 5322,
												"id": 5339,
												"nodeType": "Return",
												"src": "16405:250:18"
											}
										]
									},
									"documentation": {
										"id": 5310,
										"nodeType": "StructuredDocumentation",
										"src": "15644:453:18",
										"text": " @notice Calculates the next TWAB using the newestTwab and updated balance.\n @dev    Storage of the TWAB obersation is managed by the calling function and not _computeNextTwab.\n @param _currentTwab    Newest Observation in the Account.twabs list\n @param _currentBalance User balance at time of most recent (newest) checkpoint write\n @param _time           Current block.timestamp\n @return TWAB Observation"
									},
									"id": 5341,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "_computeNextTwab",
									"nameLocation": "16111:16:18",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 5318,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 5313,
												"mutability": "mutable",
												"name": "_currentTwab",
												"nameLocation": "16171:12:18",
												"nodeType": "VariableDeclaration",
												"scope": 5341,
												"src": "16137:46:18",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
													"typeString": "struct ObservationLib.Observation"
												},
												"typeName": {
													"id": 5312,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 5311,
														"name": "ObservationLib.Observation",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4311,
														"src": "16137:26:18"
													},
													"referencedDeclaration": 4311,
													"src": "16137:26:18",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_Observation_$4311_storage_ptr",
														"typeString": "struct ObservationLib.Observation"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 5315,
												"mutability": "mutable",
												"name": "_currentBalance",
												"nameLocation": "16201:15:18",
												"nodeType": "VariableDeclaration",
												"scope": 5341,
												"src": "16193:23:18",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint224",
													"typeString": "uint224"
												},
												"typeName": {
													"id": 5314,
													"name": "uint224",
													"nodeType": "ElementaryTypeName",
													"src": "16193:7:18",
													"typeDescriptions": {
														"typeIdentifier": "t_uint224",
														"typeString": "uint224"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 5317,
												"mutability": "mutable",
												"name": "_time",
												"nameLocation": "16233:5:18",
												"nodeType": "VariableDeclaration",
												"scope": 5341,
												"src": "16226:12:18",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint32",
													"typeString": "uint32"
												},
												"typeName": {
													"id": 5316,
													"name": "uint32",
													"nodeType": "ElementaryTypeName",
													"src": "16226:6:18",
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "16127:117:18"
									},
									"returnParameters": {
										"id": 5322,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 5321,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 5341,
												"src": "16267:33:18",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
													"typeString": "struct ObservationLib.Observation"
												},
												"typeName": {
													"id": 5320,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 5319,
														"name": "ObservationLib.Observation",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4311,
														"src": "16267:26:18"
													},
													"referencedDeclaration": 4311,
													"src": "16267:26:18",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_Observation_$4311_storage_ptr",
														"typeString": "struct ObservationLib.Observation"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "16266:35:18"
									},
									"scope": 5456,
									"src": "16102:560:18",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "private"
								},
								{
									"body": {
										"id": 5415,
										"nodeType": "Block",
										"src": "17576:627:18",
										"statements": [
											{
												"assignments": [
													null,
													5367
												],
												"declarations": [
													null,
													{
														"constant": false,
														"id": 5367,
														"mutability": "mutable",
														"name": "_newestTwab",
														"nameLocation": "17623:11:18",
														"nodeType": "VariableDeclaration",
														"scope": 5415,
														"src": "17589:45:18",
														"stateVariable": false,
														"storageLocation": "memory",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
															"typeString": "struct ObservationLib.Observation"
														},
														"typeName": {
															"id": 5366,
															"nodeType": "UserDefinedTypeName",
															"pathNode": {
																"id": 5365,
																"name": "ObservationLib.Observation",
																"nodeType": "IdentifierPath",
																"referencedDeclaration": 4311,
																"src": "17589:26:18"
															},
															"referencedDeclaration": 4311,
															"src": "17589:26:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_Observation_$4311_storage_ptr",
																"typeString": "struct ObservationLib.Observation"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 5372,
												"initialValue": {
													"arguments": [
														{
															"id": 5369,
															"name": "_twabs",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5347,
															"src": "17649:6:18",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
																"typeString": "struct ObservationLib.Observation storage ref[16777215] storage pointer"
															}
														},
														{
															"id": 5370,
															"name": "_accountDetails",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5350,
															"src": "17657:15:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																"typeString": "struct TwabLib.AccountDetails memory"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
																"typeString": "struct ObservationLib.Observation storage ref[16777215] storage pointer"
															},
															{
																"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																"typeString": "struct TwabLib.AccountDetails memory"
															}
														],
														"id": 5368,
														"name": "newestTwab",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4960,
														"src": "17638:10:18",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_view$_t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr_$_t_struct$_AccountDetails_$4730_memory_ptr_$returns$_t_uint24_$_t_struct$_Observation_$4311_memory_ptr_$",
															"typeString": "function (struct ObservationLib.Observation storage ref[16777215] storage pointer,struct TwabLib.AccountDetails memory) view returns (uint24,struct ObservationLib.Observation memory)"
														}
													},
													"id": 5371,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "17638:35:18",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$_t_uint24_$_t_struct$_Observation_$4311_memory_ptr_$",
														"typeString": "tuple(uint24,struct ObservationLib.Observation memory)"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "17586:87:18"
											},
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													},
													"id": 5376,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"expression": {
															"id": 5373,
															"name": "_newestTwab",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5367,
															"src": "17734:11:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																"typeString": "struct ObservationLib.Observation memory"
															}
														},
														"id": 5374,
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "timestamp",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 4310,
														"src": "17734:21:18",
														"typeDescriptions": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "==",
													"rightExpression": {
														"id": 5375,
														"name": "_currentTime",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 5352,
														"src": "17759:12:18",
														"typeDescriptions": {
															"typeIdentifier": "t_uint32",
															"typeString": "uint32"
														}
													},
													"src": "17734:37:18",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 5383,
												"nodeType": "IfStatement",
												"src": "17730:112:18",
												"trueBody": {
													"id": 5382,
													"nodeType": "Block",
													"src": "17773:69:18",
													"statements": [
														{
															"expression": {
																"components": [
																	{
																		"id": 5377,
																		"name": "_accountDetails",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 5350,
																		"src": "17795:15:18",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																			"typeString": "struct TwabLib.AccountDetails memory"
																		}
																	},
																	{
																		"id": 5378,
																		"name": "_newestTwab",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 5367,
																		"src": "17812:11:18",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																			"typeString": "struct ObservationLib.Observation memory"
																		}
																	},
																	{
																		"hexValue": "66616c7365",
																		"id": 5379,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "bool",
																		"lValueRequested": false,
																		"nodeType": "Literal",
																		"src": "17825:5:18",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bool",
																			"typeString": "bool"
																		},
																		"value": "false"
																	}
																],
																"id": 5380,
																"isConstant": false,
																"isInlineArray": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"nodeType": "TupleExpression",
																"src": "17794:37:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_tuple$_t_struct$_AccountDetails_$4730_memory_ptr_$_t_struct$_Observation_$4311_memory_ptr_$_t_bool_$",
																	"typeString": "tuple(struct TwabLib.AccountDetails memory,struct ObservationLib.Observation memory,bool)"
																}
															},
															"functionReturnParameters": 5362,
															"id": 5381,
															"nodeType": "Return",
															"src": "17787:44:18"
														}
													]
												}
											},
											{
												"assignments": [
													5388
												],
												"declarations": [
													{
														"constant": false,
														"id": 5388,
														"mutability": "mutable",
														"name": "newTwab",
														"nameLocation": "17886:7:18",
														"nodeType": "VariableDeclaration",
														"scope": 5415,
														"src": "17852:41:18",
														"stateVariable": false,
														"storageLocation": "memory",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
															"typeString": "struct ObservationLib.Observation"
														},
														"typeName": {
															"id": 5387,
															"nodeType": "UserDefinedTypeName",
															"pathNode": {
																"id": 5386,
																"name": "ObservationLib.Observation",
																"nodeType": "IdentifierPath",
																"referencedDeclaration": 4311,
																"src": "17852:26:18"
															},
															"referencedDeclaration": 4311,
															"src": "17852:26:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_Observation_$4311_storage_ptr",
																"typeString": "struct ObservationLib.Observation"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 5395,
												"initialValue": {
													"arguments": [
														{
															"id": 5390,
															"name": "_newestTwab",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5367,
															"src": "17926:11:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																"typeString": "struct ObservationLib.Observation memory"
															}
														},
														{
															"expression": {
																"id": 5391,
																"name": "_accountDetails",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 5350,
																"src": "17951:15:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																	"typeString": "struct TwabLib.AccountDetails memory"
																}
															},
															"id": 5392,
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "balance",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 4725,
															"src": "17951:23:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint208",
																"typeString": "uint208"
															}
														},
														{
															"id": 5393,
															"name": "_currentTime",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5352,
															"src": "17988:12:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																"typeString": "struct ObservationLib.Observation memory"
															},
															{
																"typeIdentifier": "t_uint208",
																"typeString": "uint208"
															},
															{
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														],
														"id": 5389,
														"name": "_computeNextTwab",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 5341,
														"src": "17896:16:18",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_pure$_t_struct$_Observation_$4311_memory_ptr_$_t_uint224_$_t_uint32_$returns$_t_struct$_Observation_$4311_memory_ptr_$",
															"typeString": "function (struct ObservationLib.Observation memory,uint224,uint32) pure returns (struct ObservationLib.Observation memory)"
														}
													},
													"id": 5394,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "17896:114:18",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
														"typeString": "struct ObservationLib.Observation memory"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "17852:158:18"
											},
											{
												"expression": {
													"id": 5401,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"baseExpression": {
															"id": 5396,
															"name": "_twabs",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5347,
															"src": "18021:6:18",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
																"typeString": "struct ObservationLib.Observation storage ref[16777215] storage pointer"
															}
														},
														"id": 5399,
														"indexExpression": {
															"expression": {
																"id": 5397,
																"name": "_accountDetails",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 5350,
																"src": "18028:15:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																	"typeString": "struct TwabLib.AccountDetails memory"
																}
															},
															"id": 5398,
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "nextTwabIndex",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 4727,
															"src": "18028:29:18",
															"typeDescriptions": {
																"typeIdentifier": "t_uint24",
																"typeString": "uint24"
															}
														},
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": true,
														"nodeType": "IndexAccess",
														"src": "18021:37:18",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_Observation_$4311_storage",
															"typeString": "struct ObservationLib.Observation storage ref"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"id": 5400,
														"name": "newTwab",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 5388,
														"src": "18061:7:18",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
															"typeString": "struct ObservationLib.Observation memory"
														}
													},
													"src": "18021:47:18",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_Observation_$4311_storage",
														"typeString": "struct ObservationLib.Observation storage ref"
													}
												},
												"id": 5402,
												"nodeType": "ExpressionStatement",
												"src": "18021:47:18"
											},
											{
												"assignments": [
													5405
												],
												"declarations": [
													{
														"constant": false,
														"id": 5405,
														"mutability": "mutable",
														"name": "nextAccountDetails",
														"nameLocation": "18101:18:18",
														"nodeType": "VariableDeclaration",
														"scope": 5415,
														"src": "18079:40:18",
														"stateVariable": false,
														"storageLocation": "memory",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
															"typeString": "struct TwabLib.AccountDetails"
														},
														"typeName": {
															"id": 5404,
															"nodeType": "UserDefinedTypeName",
															"pathNode": {
																"id": 5403,
																"name": "AccountDetails",
																"nodeType": "IdentifierPath",
																"referencedDeclaration": 4730,
																"src": "18079:14:18"
															},
															"referencedDeclaration": 4730,
															"src": "18079:14:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_AccountDetails_$4730_storage_ptr",
																"typeString": "struct TwabLib.AccountDetails"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 5409,
												"initialValue": {
													"arguments": [
														{
															"id": 5407,
															"name": "_accountDetails",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5350,
															"src": "18127:15:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																"typeString": "struct TwabLib.AccountDetails memory"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																"typeString": "struct TwabLib.AccountDetails memory"
															}
														],
														"id": 5406,
														"name": "push",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 5455,
														"src": "18122:4:18",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_pure$_t_struct$_AccountDetails_$4730_memory_ptr_$returns$_t_struct$_AccountDetails_$4730_memory_ptr_$",
															"typeString": "function (struct TwabLib.AccountDetails memory) pure returns (struct TwabLib.AccountDetails memory)"
														}
													},
													"id": 5408,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "18122:21:18",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
														"typeString": "struct TwabLib.AccountDetails memory"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "18079:64:18"
											},
											{
												"expression": {
													"components": [
														{
															"id": 5410,
															"name": "nextAccountDetails",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5405,
															"src": "18162:18:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																"typeString": "struct TwabLib.AccountDetails memory"
															}
														},
														{
															"id": 5411,
															"name": "newTwab",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5388,
															"src": "18182:7:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
																"typeString": "struct ObservationLib.Observation memory"
															}
														},
														{
															"hexValue": "74727565",
															"id": 5412,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "bool",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "18191:4:18",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															"value": "true"
														}
													],
													"id": 5413,
													"isConstant": false,
													"isInlineArray": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"nodeType": "TupleExpression",
													"src": "18161:35:18",
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$_t_struct$_AccountDetails_$4730_memory_ptr_$_t_struct$_Observation_$4311_memory_ptr_$_t_bool_$",
														"typeString": "tuple(struct TwabLib.AccountDetails memory,struct ObservationLib.Observation memory,bool)"
													}
												},
												"functionReturnParameters": 5362,
												"id": 5414,
												"nodeType": "Return",
												"src": "18154:42:18"
											}
										]
									},
									"documentation": {
										"id": 5342,
										"nodeType": "StructuredDocumentation",
										"src": "16668:561:18",
										"text": "@notice Sets a new TWAB Observation at the next available index and returns the new account details.\n @dev Note that if _currentTime is before the last observation timestamp, it appears as an overflow\n @param _twabs The twabs array to insert into\n @param _accountDetails The current account details\n @param _currentTime The current time\n @return accountDetails The new account details\n @return twab The newest twab (may or may not be brand-new)\n @return isNew Whether the newest twab was created by this call"
									},
									"id": 5416,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "_nextTwab",
									"nameLocation": "17243:9:18",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 5353,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 5347,
												"mutability": "mutable",
												"name": "_twabs",
												"nameLocation": "17314:6:18",
												"nodeType": "VariableDeclaration",
												"scope": 5416,
												"src": "17262:58:18",
												"stateVariable": false,
												"storageLocation": "storage",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
													"typeString": "struct ObservationLib.Observation[16777215]"
												},
												"typeName": {
													"baseType": {
														"id": 5344,
														"nodeType": "UserDefinedTypeName",
														"pathNode": {
															"id": 5343,
															"name": "ObservationLib.Observation",
															"nodeType": "IdentifierPath",
															"referencedDeclaration": 4311,
															"src": "17262:26:18"
														},
														"referencedDeclaration": 4311,
														"src": "17262:26:18",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_Observation_$4311_storage_ptr",
															"typeString": "struct ObservationLib.Observation"
														}
													},
													"id": 5346,
													"length": {
														"id": 5345,
														"name": "MAX_CARDINALITY",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4723,
														"src": "17289:15:18",
														"typeDescriptions": {
															"typeIdentifier": "t_uint24",
															"typeString": "uint24"
														}
													},
													"nodeType": "ArrayTypeName",
													"src": "17262:43:18",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_struct$_Observation_$4311_storage_$16777215_storage_ptr",
														"typeString": "struct ObservationLib.Observation[16777215]"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 5350,
												"mutability": "mutable",
												"name": "_accountDetails",
												"nameLocation": "17352:15:18",
												"nodeType": "VariableDeclaration",
												"scope": 5416,
												"src": "17330:37:18",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
													"typeString": "struct TwabLib.AccountDetails"
												},
												"typeName": {
													"id": 5349,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 5348,
														"name": "AccountDetails",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4730,
														"src": "17330:14:18"
													},
													"referencedDeclaration": 4730,
													"src": "17330:14:18",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_AccountDetails_$4730_storage_ptr",
														"typeString": "struct TwabLib.AccountDetails"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 5352,
												"mutability": "mutable",
												"name": "_currentTime",
												"nameLocation": "17384:12:18",
												"nodeType": "VariableDeclaration",
												"scope": 5416,
												"src": "17377:19:18",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint32",
													"typeString": "uint32"
												},
												"typeName": {
													"id": 5351,
													"name": "uint32",
													"nodeType": "ElementaryTypeName",
													"src": "17377:6:18",
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "17252:150:18"
									},
									"returnParameters": {
										"id": 5362,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 5356,
												"mutability": "mutable",
												"name": "accountDetails",
												"nameLocation": "17471:14:18",
												"nodeType": "VariableDeclaration",
												"scope": 5416,
												"src": "17449:36:18",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
													"typeString": "struct TwabLib.AccountDetails"
												},
												"typeName": {
													"id": 5355,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 5354,
														"name": "AccountDetails",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4730,
														"src": "17449:14:18"
													},
													"referencedDeclaration": 4730,
													"src": "17449:14:18",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_AccountDetails_$4730_storage_ptr",
														"typeString": "struct TwabLib.AccountDetails"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 5359,
												"mutability": "mutable",
												"name": "twab",
												"nameLocation": "17533:4:18",
												"nodeType": "VariableDeclaration",
												"scope": 5416,
												"src": "17499:38:18",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_Observation_$4311_memory_ptr",
													"typeString": "struct ObservationLib.Observation"
												},
												"typeName": {
													"id": 5358,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 5357,
														"name": "ObservationLib.Observation",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4311,
														"src": "17499:26:18"
													},
													"referencedDeclaration": 4311,
													"src": "17499:26:18",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_Observation_$4311_storage_ptr",
														"typeString": "struct ObservationLib.Observation"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 5361,
												"mutability": "mutable",
												"name": "isNew",
												"nameLocation": "17556:5:18",
												"nodeType": "VariableDeclaration",
												"scope": 5416,
												"src": "17551:10:18",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bool",
													"typeString": "bool"
												},
												"typeName": {
													"id": 5360,
													"name": "bool",
													"nodeType": "ElementaryTypeName",
													"src": "17551:4:18",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "17435:136:18"
									},
									"scope": 5456,
									"src": "17234:969:18",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "private"
								},
								{
									"body": {
										"id": 5454,
										"nodeType": "Block",
										"src": "18585:739:18",
										"statements": [
											{
												"expression": {
													"id": 5438,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"expression": {
															"id": 5426,
															"name": "_accountDetails",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5420,
															"src": "18595:15:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																"typeString": "struct TwabLib.AccountDetails memory"
															}
														},
														"id": 5428,
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": true,
														"memberName": "nextTwabIndex",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 4727,
														"src": "18595:29:18",
														"typeDescriptions": {
															"typeIdentifier": "t_uint24",
															"typeString": "uint24"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"arguments": [
															{
																"arguments": [
																	{
																		"expression": {
																			"id": 5433,
																			"name": "_accountDetails",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 5420,
																			"src": "18671:15:18",
																			"typeDescriptions": {
																				"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																				"typeString": "struct TwabLib.AccountDetails memory"
																			}
																		},
																		"id": 5434,
																		"isConstant": false,
																		"isLValue": true,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "nextTwabIndex",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 4727,
																		"src": "18671:29:18",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint24",
																			"typeString": "uint24"
																		}
																	},
																	{
																		"id": 5435,
																		"name": "MAX_CARDINALITY",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4723,
																		"src": "18702:15:18",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint24",
																			"typeString": "uint24"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_uint24",
																			"typeString": "uint24"
																		},
																		{
																			"typeIdentifier": "t_uint24",
																			"typeString": "uint24"
																		}
																	],
																	"expression": {
																		"id": 5431,
																		"name": "RingBufferLib",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4706,
																		"src": "18647:13:18",
																		"typeDescriptions": {
																			"typeIdentifier": "t_type$_t_contract$_RingBufferLib_$4706_$",
																			"typeString": "type(library RingBufferLib)"
																		}
																	},
																	"id": 5432,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "nextIndex",
																	"nodeType": "MemberAccess",
																	"referencedDeclaration": 4705,
																	"src": "18647:23:18",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
																		"typeString": "function (uint256,uint256) pure returns (uint256)"
																	}
																},
																"id": 5436,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "18647:71:18",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															}
														],
														"expression": {
															"argumentTypes": [
																{
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															],
															"id": 5430,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"lValueRequested": false,
															"nodeType": "ElementaryTypeNameExpression",
															"src": "18627:6:18",
															"typeDescriptions": {
																"typeIdentifier": "t_type$_t_uint24_$",
																"typeString": "type(uint24)"
															},
															"typeName": {
																"id": 5429,
																"name": "uint24",
																"nodeType": "ElementaryTypeName",
																"src": "18627:6:18",
																"typeDescriptions": {}
															}
														},
														"id": 5437,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"kind": "typeConversion",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "18627:101:18",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_uint24",
															"typeString": "uint24"
														}
													},
													"src": "18595:133:18",
													"typeDescriptions": {
														"typeIdentifier": "t_uint24",
														"typeString": "uint24"
													}
												},
												"id": 5439,
												"nodeType": "ExpressionStatement",
												"src": "18595:133:18"
											},
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_uint24",
														"typeString": "uint24"
													},
													"id": 5443,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"expression": {
															"id": 5440,
															"name": "_accountDetails",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 5420,
															"src": "19181:15:18",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																"typeString": "struct TwabLib.AccountDetails memory"
															}
														},
														"id": 5441,
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "cardinality",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 4729,
														"src": "19181:27:18",
														"typeDescriptions": {
															"typeIdentifier": "t_uint24",
															"typeString": "uint24"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "<",
													"rightExpression": {
														"id": 5442,
														"name": "MAX_CARDINALITY",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 4723,
														"src": "19211:15:18",
														"typeDescriptions": {
															"typeIdentifier": "t_uint24",
															"typeString": "uint24"
														}
													},
													"src": "19181:45:18",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 5451,
												"nodeType": "IfStatement",
												"src": "19177:108:18",
												"trueBody": {
													"id": 5450,
													"nodeType": "Block",
													"src": "19228:57:18",
													"statements": [
														{
															"expression": {
																"id": 5448,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftHandSide": {
																	"expression": {
																		"id": 5444,
																		"name": "_accountDetails",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 5420,
																		"src": "19242:15:18",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
																			"typeString": "struct TwabLib.AccountDetails memory"
																		}
																	},
																	"id": 5446,
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": true,
																	"memberName": "cardinality",
																	"nodeType": "MemberAccess",
																	"referencedDeclaration": 4729,
																	"src": "19242:27:18",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint24",
																		"typeString": "uint24"
																	}
																},
																"nodeType": "Assignment",
																"operator": "+=",
																"rightHandSide": {
																	"hexValue": "31",
																	"id": 5447,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "number",
																	"lValueRequested": false,
																	"nodeType": "Literal",
																	"src": "19273:1:18",
																	"typeDescriptions": {
																		"typeIdentifier": "t_rational_1_by_1",
																		"typeString": "int_const 1"
																	},
																	"value": "1"
																},
																"src": "19242:32:18",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint24",
																	"typeString": "uint24"
																}
															},
															"id": 5449,
															"nodeType": "ExpressionStatement",
															"src": "19242:32:18"
														}
													]
												}
											},
											{
												"expression": {
													"id": 5452,
													"name": "_accountDetails",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 5420,
													"src": "19302:15:18",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
														"typeString": "struct TwabLib.AccountDetails memory"
													}
												},
												"functionReturnParameters": 5425,
												"id": 5453,
												"nodeType": "Return",
												"src": "19295:22:18"
											}
										]
									},
									"documentation": {
										"id": 5417,
										"nodeType": "StructuredDocumentation",
										"src": "18209:244:18",
										"text": "@notice \"Pushes\" a new element on the AccountDetails ring buffer, and returns the new AccountDetails\n @param _accountDetails The account details from which to pull the cardinality and next index\n @return The new AccountDetails"
									},
									"id": 5455,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "push",
									"nameLocation": "18467:4:18",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 5421,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 5420,
												"mutability": "mutable",
												"name": "_accountDetails",
												"nameLocation": "18494:15:18",
												"nodeType": "VariableDeclaration",
												"scope": 5455,
												"src": "18472:37:18",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
													"typeString": "struct TwabLib.AccountDetails"
												},
												"typeName": {
													"id": 5419,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 5418,
														"name": "AccountDetails",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4730,
														"src": "18472:14:18"
													},
													"referencedDeclaration": 4730,
													"src": "18472:14:18",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_AccountDetails_$4730_storage_ptr",
														"typeString": "struct TwabLib.AccountDetails"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "18471:39:18"
									},
									"returnParameters": {
										"id": 5425,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 5424,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 5455,
												"src": "18558:21:18",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_AccountDetails_$4730_memory_ptr",
													"typeString": "struct TwabLib.AccountDetails"
												},
												"typeName": {
													"id": 5423,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 5422,
														"name": "AccountDetails",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 4730,
														"src": "18558:14:18"
													},
													"referencedDeclaration": 4730,
													"src": "18558:14:18",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_AccountDetails_$4730_storage_ptr",
														"typeString": "struct TwabLib.AccountDetails"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "18557:23:18"
									},
									"scope": 5456,
									"src": "18458:866:18",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								}
							],
							"scope": 5457,
							"src": "934:18392:18",
							"usedErrors": []
						}
					],
					"src": "37:19290:18"
				},
				"id": 18
			}
		}
	}
}