```\n    function claimable(uint256 categoryId, uint256 vestingId, address user)\n        public\n        view\n        returns (uint256 claimableAmount)\n    {\n        UserVesting memory userVesting = userVestings[categoryId][vestingId][user];\n\n        VestingInfo memory info = vestingInfos[categoryId][vestingId];\n\n        uint64 startTime = userVesting.startTime + info.initialReleasePeriod;\n\n        if (startTime > block.timestamp) {\n            return 0;\n        }\n\n        uint256 totalAmount = userVesting.amount;\n\n        uint256 initialRelease = (totalAmount * info.initialReleasePct) / DENOMINATOR;\n\n        startTime += info.cliff;\n\n        if (startTime > block.timestamp) {\n            return initialRelease;\n        }\n```\n