def METHOD_NAME(mod_code: Program, spendable_cat_list: List[SpendableCAT]) -> SpendBundle:
    """
    Given a list of `SpendableCAT` objects, create a `SpendBundle` that spends all those coins.
    Note that no signing is done here, so it falls on the caller to sign the resultant bundle.
    """
    N = len(spendable_cat_list)
    # figure out what the deltas are by running the inner puzzles & solutions
    deltas: List[int] = []
    for spend_info in spendable_cat_list:
        conditions = conditions_dict_for_solution(spend_info.inner_puzzle, spend_info.inner_solution, INFINITE_COST)
        total = spend_info.extra_delta * -1
        for _ in conditions.get(ConditionOpcode.CREATE_COIN, []):
            if _.vars[1] != b"\x8f":  # -113 in bytes
                total += Program.to(_.vars[1]).as_int()
        deltas.append(spend_info.coin.amount - total)
    if sum(deltas) != 0:
        raise ValueError("input and output amounts don't match")
    subtotals = subtotals_for_deltas(deltas)
    infos_for_next = []
    infos_for_me = []
    ids = []
    for _ in spendable_cat_list:
        infos_for_next.append(next_info_for_spendable_cat(_))
        infos_for_me.append(Program.to(coin_as_list(_.coin)))
        ids.append(_.coin.name())
    coin_spends = []
    for index in range(N):
        spend_info = spendable_cat_list[index]
        puzzle_reveal = construct_cat_puzzle(mod_code, spend_info.limitations_program_hash, spend_info.inner_puzzle)
        prev_index = (index - 1) % N
        next_index = (index + 1) % N
        prev_id = ids[prev_index]
        my_info = infos_for_me[index]
        next_info = infos_for_next[next_index]
        solution = [
            spend_info.inner_solution,
            spend_info.lineage_proof.to_program(),
            prev_id,
            my_info,
            next_info,
            subtotals[index],
            spend_info.extra_delta,
        ]
        coin_spend = CoinSpend(spend_info.coin, puzzle_reveal, Program.to(solution))
        coin_spends.append(coin_spend)
    return SpendBundle(coin_spends, NULL_SIGNATURE)