code: def _save_uploaded_file_list(samples, file_list_work, out_dir):
      
      if not utils.file_exists(file_list_work):
          return None
  
      if any([cwlutils.is_cwl_run(d) for d in samples]):
          upload_paths = []
          with open(file_list_work) as f:
              for p in (l.strip() for l in f.readlines() if os.path.exists(l.strip())):
                  if p.startswith(out_dir):
                      upload_paths.append(p.replace(out_dir + "/", ""))
      else:
          upload_path_mapping = dict()
          for sample in samples:
              upload_path_mapping.update(get_all_upload_paths_from_sample(sample))
          if not upload_path_mapping:
              return None
  
          with open(file_list_work) as f:
              paths = [l.strip() for l in f.readlines() if os.path.exists(l.strip())]
          upload_paths = [p for p in [
              _work_path_to_rel_final_path(path, upload_path_mapping, samples[0]["upload"]["dir"])
              for path in paths
          ] if p]
          if not upload_paths:
              return None
  
      file_list_final = os.path.join(out_dir, "list_files_final.txt")
      with open(file_list_final, "w") as f:
          for path in upload_paths:
              f.write(path + '\n')
      return file_list_final
docs: Fixes all absolute work-rooted paths to relative final-rooted paths
  
      For CWL, prepare paths relative to output directory.