it is safe to use unsafeShiftL here