docs: @Override
    public void download(SFSession connection, String command, String localLocation, String destFileName,
                         int parallelism, String remoteStorageLocation, String stageFilePath, String stageRegion)
    throws SnowflakeSQLException
    {
      int retryCount = 0;
      do
      {
        try
        {
          String localFilePath = localLocation + localFileSep + destFileName;
          File localFile = new File(localFilePath);
          CloudBlobContainer container = azStorageClient.getContainerReference(remoteStorageLocation);
          CloudBlob blob = container.getBlockBlobReference(stageFilePath);
  
          // Note that Azure doesn't offer a multi-part parallel download library,
          // where the user has control of block size and parallelism
          // we rely on Azure to handle the download, hence the "parallelism" parameter is ignored
          // in the Azure implementation of the method
          blob.downloadToFile(localFilePath);
  
          // Pull object metadata from Azure
          blob.downloadAttributes();
  
          // Get the user-defined BLOB metadata
          Map<String, String> userDefinedMetadata = blob.getMetadata();
          AbstractMap.SimpleEntry<String, String> encryptionData =
              parseEncryptionData(userDefinedMetadata.get(AZ_ENCRYPTIONDATAPROP));
  
          String key = encryptionData.getKey();
          String iv = encryptionData.getValue();
  
          if (this.isEncrypting() && this.getEncryptionKeySize() <= 256)
          {
            if (key == null || iv == null)
            {
              throw new SnowflakeSQLException(SqlState.INTERNAL_ERROR,
                                              ErrorCode.INTERNAL_ERROR.getMessageCode(),
                                              "File metadata incomplete");
            }
  
            // Decrypt file
            try
            {
              EncryptionProvider.decrypt(localFile, key, iv, this.encMat);
            }
            catch (Exception ex)
            {
              logger.error("Error decrypting file", ex);
              throw ex;
            }
          }
          return;
  
        }
        catch (Exception ex)
        {
          logger.debug("Download unsuccessful {}", ex);
          handleAzureException(ex, ++retryCount, "download", connection, command, this);
        }
      }
      while (retryCount <= getMaxRetries());
  
      throw new SnowflakeSQLException(SqlState.INTERNAL_ERROR,
                                      ErrorCode.INTERNAL_ERROR.getMessageCode(),
                                      "Unexpected: download unsuccessful without exception!");
    }