def _submit(self, client, config, osutil, request_executor, io_executor,<EOL>transfer_future, bandwidth_limiter=None):
if transfer_future.meta.size is None:<EOL><INDENT>response = client.head_object(<EOL>Bucket=transfer_future.meta.call_args.bucket,<EOL>Key=transfer_future.meta.call_args.key,<EOL>**transfer_future.meta.call_args.extra_args<EOL>)<EOL>transfer_future.meta.provide_transfer_size(<EOL>response['<STR_LIT>'])<EOL><DEDENT>download_output_manager = self._get_download_output_manager_cls(<EOL>transfer_future, osutil)(osutil, self._transfer_coordinator,<EOL>io_executor)<EOL>if transfer_future.meta.size < config.multipart_threshold:<EOL><INDENT>self._submit_download_request(<EOL>client, config, osutil, request_executor, io_executor,<EOL>download_output_manager, transfer_future, bandwidth_limiter)<EOL><DEDENT>else:<EOL><INDENT>self._submit_ranged_download_request(<EOL>client, config, osutil, request_executor, io_executor,<EOL>download_output_manager, transfer_future, bandwidth_limiter)<EOL><DEDENT>
:param client: The client associated with the transfer manager

:type config: s3transfer.manager.TransferConfig
:param config: The transfer config associated with the transfer
    manager

:type osutil: s3transfer.utils.OSUtil
:param osutil: The os utility associated to the transfer manager

:type request_executor: s3transfer.futures.BoundedExecutor
:param request_executor: The request executor associated with the
    transfer manager

:type io_executor: s3transfer.futures.BoundedExecutor
:param io_executor: The io executor associated with the
    transfer manager

:type transfer_future: s3transfer.futures.TransferFuture
:param transfer_future: The transfer future associated with the
    transfer request that tasks are being submitted for

:type bandwidth_limiter: s3transfer.bandwidth.BandwidthLimiter
:param bandwidth_limiter: The bandwidth limiter to use when
    downloading streams