works up to 128bits