flatten function