```\n        IPoolTokensContainer(anchor).burn(\_poolToken, msg.sender, \_amount);\n\n        // calculate how much liquidity to remove\n        // if the entire supply is liquidated, the entire staked amount should be sent, otherwise\n        // the price is based on the ratio between the pool token supply and the staked balance\n        uint256 reserveAmount = 0;\n        if (\_amount == initialPoolSupply)\n            reserveAmount = balance;\n        else\n            reserveAmount = \_amount.mul(balance).div(initialPoolSupply);\n\n        // sync the reserve balance / staked balance\n        reserves[reserveToken].balance = reserves[reserveToken].balance.sub(reserveAmount);\n        uint256 newStakedBalance = stakedBalances[reserveToken].sub(reserveAmount);\n        stakedBalances[reserveToken] = newStakedBalance;\n```\n