亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? esmc_log.c

?? CCSM Research Tools: Community Atmosphere Model (CAM)
?? C
字號:
/* $Id: ESMC_Log.c,v 1.1.6.1 2002/04/24 03:25:34 erik Exp $ */#include <stdio.h>#include <stdlib.h>#include <stdarg.h>#include <string.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <sys/time.h>#include <unistd.h>#include "conf.h"#include "ESMC_Log.h"#include "ESMC_Error.h"#ifdef ESMC_HAVE_MPI#include <mpi.h>#endif#ifdef ESMC_HAVE_PTHREADS#include <pthread.h>#endif#ifdef ESMC_HAVE_OMP_THREADS#include <omp.h> #endif#define MAX_LOGS 10#include "ESMC_Machine.h"#include "ESMC_BasicUtil.h"static char *lognames[] = {  "INFO",  "ERROR",  "TIMING"};static char report_matrix[ESMC_LOG_STATES][ESMC_LOG_LEVELS] ={  /*            INFO,ERROR,TIMING */  /* QUIET   */ {  0,    0,     0  },  /* NORMAL  */ {  1,    1,     1  },  /* TIMER   */ {  0,    0,     1  },  /* VERBOSE */ {  1,    1,     1  }};/* Static global variables */static int num_mpi_processes;static int mpi_rank;static int last_logstate = -1;struct timeval start_tv;/* Non public function prototypes */int ESMC_LogSetConfigV(ESMC_Log log, ESMC_LogOption option1, va_list args);int ESMC_LogSetConfigCV(ESMC_Log log, ESMC_LogOption option1, va_list args);/* These constants are used to find the first string length argument   in the stdarg list.  They should be smaller than any valid variable   address and larger than any passed string length.  These constants   must be used since the length of the format string is not known.  */#define ESMC_LOG_MIN_ADD 2048#define ESMC_LOG_MAX_STR 2048/*--------------------------------------------------------------------------*/#undef __FUNC__#define __FUNC__ "ESMC_LogGetConvBase"static char ESMC_LogGetConvBase(char *base_char, char conv_type){  char *syns[] =  {    /* First character is the base for all others */    "diouxX",    "fFeEgG",    "s",    "c",    NULL  };    int i;  for (i = 0; syns[i]; i++)    {      if (strchr(syns[i], conv_type))	{	  *base_char = syns[i][0];	  return ESMC_SUCCESS;	}    }  *base_char = '\0';  return ESMC_SUCCESS;}/*--------------------------------------------------------------------------*/#undef __FUNC__#define __FUNC__ "ESMC_LogSubChar"static int ESMC_LogSubChar(char *str, char c){  /* Substitute c for the next two chars, and     shift string back */    char *p = str;    /* Substitute */  *p = c;  /* Advance p to where the \? was, then to next char */  p += 2;  for ( ; *p; p++)    *(p - 1) = *p;    /* Copy zero */  *(p-1) = *p;  return ESMC_SUCCESS;}#define NUM_INDENT 40/*--------------------------------------------------------------------------*/#undef __FUNC__#define __FUNC__ "ESMC_LogSubCtrls"static int ESMC_LogSubCtrls(char *str){  /* Substitute \n \t if necessary */  /* also, substitute '\n' with '\n >' */  char *p, *pe, *pe_sav;  typedef enum {gstate = 0, slsh = 1} parse_state;#ifdef ESMC_SUBSTITUTE_CTRL_CHARS  parse_state pstate;  pstate = gstate;  for (p = str; *p; p++)    {      switch(pstate)	{	case gstate:	  if (*p == '\\')	    pstate = slsh;	  break;	case slsh:	  switch (*p)	    {	    case 'n':	      ESMC_LogSubChar(--p, '\n');	      break;	    case 't':	      ESMC_LogSubChar(--p, '\t');	      break;	      /* ...others ... */	      	    default:	      /* False alarm */	      break;	    }	  /* Switch out of state */	  pstate = gstate;	  break;	}    }#endif#ifdef NOTDEF  pe = strchr(str, '\0');  for ( p = str; *p; p++)    {      if (*p == '\n')	{	  for ( pe_sav = (pe + NUM_INDENT); pe > p; pe--)	    {	      *(pe + NUM_INDENT) = *pe;	    }	  for ( pe = (pe + NUM_INDENT) ; pe > p + 1; pe--)	    {	      *pe = ' ';	    }	  *pe = '>';	  pe--;	  	  pe = pe_sav;	}    }#endif  return ESMC_SUCCESS;}/*--------------------------------------------------------------------------*/#undef __FUNC__#define __FUNC__ "ESMC_LogPrintOut"static int ESMC_LogPrintOut(int *plen, char *obuf, char len_mod, char conv_type, char *pbuf,			    void **next_arg, int slen){  char buf[ESMC_LOG_MAX_STR];    if (conv_type == 0)    {      sprintf(obuf, pbuf);      *plen = 0;      return ESMC_SUCCESS;    }  if (slen >=0)    {      strncpy(buf, (char*) next_arg, slen);      buf[slen] = '\0';      ESMC_LogSubCtrls(buf);      next_arg = (void*) &buf[0];      *plen = sprintf(obuf, pbuf, (char*) next_arg);    }  else    {      /*      fprintf(stderr, pbuf, *next_arg);      */        /* Compilers actually parse the format string and       care about the type sent in to printf */      switch(conv_type)	{	case 'd':	  if (len_mod == 'l')	    *plen = sprintf(obuf, pbuf, (long int) *next_arg);	  else if (len_mod == 'h')	    *plen = sprintf(obuf, pbuf, *((short int*)next_arg));	    	  else	    *plen = sprintf(obuf, pbuf, *((int*)next_arg));	  break;	case 'f':	  if (len_mod == 'l') 	    *plen = sprintf(obuf, pbuf, *((double*)next_arg));	  else	    *plen = sprintf(obuf, pbuf, *((float*)next_arg));	    	  break;	}    }    return ESMC_SUCCESS;}/*--------------------------------------------------------------------------*/#undef __FUNC__#define __FUNC__ "ESMC_LogOutbuf"static int ESMC_LogOutbuf(ESMC_Log log, ESMC_LogLevel priority, char *obuf){  char buf[1024];  char tbuf[1024];  FILE *fp;  int node, process, thread;  char *cptr, *cptr1;   struct timeval tv;  double tstamp;  ESMC_MachinePInfo(&node, &process, &thread);    if (log->labelio)    fp = log->log_fp[mpi_rank];  else    fp = log->log_fp[0];  /* This check should be done up front */  gettimeofday(&tv, NULL);  tstamp = (tv.tv_sec - start_tv.tv_sec) + 1e-6*(tv.tv_usec - start_tv.tv_usec);  sprintf(buf, ">> ");    if (log->printtime)    {      sprintf(tbuf, "Time=%010.5f,", tstamp);      strcat(buf, tbuf);    }  if (log->printpid)    {      sprintf(tbuf, "PID=%d,", process);      strcat(buf, tbuf);    }  if (log->printtid)    {      sprintf(tbuf, "TID=%d,", thread);      strcat(buf, tbuf);    }  if (1)    {      sprintf(tbuf, "%-6s,", lognames[priority]);      strcat(buf, tbuf);    }  /* Convert the last comma to a colon to end list */  buf[strlen(buf) - 1] = ':';    if (priority != last_logstate)    {      /* Insert an automatic newline and print banner */      fprintf(fp, "\n");      last_logstate = priority;      fprintf(fp, buf);    }    for (cptr = strchr(obuf, '\n'), cptr1 = obuf; cptr; cptr = strchr(cptr, '\n'))    {      *cptr = '\0';      fprintf(fp, "\n");      fprintf(fp, buf);      fprintf(fp, "%s", cptr1);      cptr++;;      cptr1 = cptr;    }    fprintf(fp, "%s", cptr1);  return ESMC_SUCCESS;}/*--------------------------------------------------------------------------*/#undef __FUNC__#define __FUNC__ "ESMC_LogPrintC"int ESMC_LogPrintC(ESMC_Log log, ESMC_LogLevel priority, char *format,		   va_list args){  char buf[1024];  ESMC_BasicUtilLockMutex();  if (!report_matrix[log->logstate][priority])    {      /* Do not print message if priority is not right. */      ESMC_BasicUtilUnlockMutex();      return ESMC_SUCCESS;    }    vsprintf(buf, format, args);  ESMC_LogOutbuf(log, priority, buf);  ESMC_BasicUtilUnlockMutex();  return ESMC_SUCCESS;}/*--------------------------------------------------------------------------*/#undef __FUNC__#define __FUNC__ "ESMC_LogPrintf"int ESMC_LogPrintf(ESMC_Log log, ESMC_LogLevel priority, char *format,		      va_list len_args, va_list args){  int i, done;  unsigned int flen;  int plen;  char *p, *p1;  char base_conv;  char buf[ESMC_LOG_MAX_STR];  char pbuf[ESMC_LOG_MAX_STR];  char obuf[ESMC_LOG_MAX_STR];  int obuflen;    typedef enum {    ground = 0,    percent = 1  } parse_state;  parse_state pstate;  char *lmod = "hl";  void *next_arg;  char len_mod, conv_type;  int slen;  ESMC_BasicUtilLockMutex();  if (!report_matrix[log->logstate][priority])    {      /* Do not print message if priority is not right. */      ESMC_BasicUtilUnlockMutex();      return ESMC_SUCCESS;    }    /* Initialize output buffer */  obuf[0] = '\0';  obuflen = 0;    done = 0;  i = 0;  do {    flen = va_arg(len_args, int);    /*  printf("arg[%d] = 0x%0x\n", i, flen); */        i++;    if (flen < ESMC_LOG_MIN_ADD)      {	/* printf("Suspect end: flen = %d\n", flen); */	done = 1;      }  } while (!done);  /* printf("Length of format:%d\n", flen); */  strncpy(buf, format, flen);  buf[flen] = '\0';  ESMC_LogSubCtrls(buf);    /* printf("Buf is:<%s>\n", buf); */  /* Now on to parsing formats */  pstate = ground;  for ( p = buf, p1 = &pbuf[0]; *p; p++, p1++)  {    /* Copy char into print buffer */    *p1 = *p;    /*      printf("parsing, pbuf=<%s>, *p=<%c>, *p1=<%c>", pbuf, *p, *p1);    */         switch (pstate)      {      case ground:	if (*p == '%')	  {	    pstate = percent;	    len_mod = '\0';	    conv_type = '\0';	  }		break;      case percent:	/* Looking for a lenght, junk, or	   type */	if (strchr(lmod, *p))	  {	    len_mod = *p;	  }	else	  {	    ESMC_LogGetConvBase(&base_conv, *p);	                conv_type = base_conv;	    if (base_conv)	      {		*(p1 + 1) = '\0';		next_arg = va_arg(args, void*);		if (conv_type == 's')		  slen = va_arg(len_args, int);		else		  slen = -1;		ESMC_LogPrintOut(&plen, &obuf[obuflen], len_mod, conv_type,				 pbuf, next_arg, slen);		obuflen += plen;		pstate = ground;		p1 = &pbuf[0];				p1--; /* end of loop will p1++ */			      }	  }		/* Else we don't care about this char.*/		break;      }  }    /* NULL terminate */  *p1 = *p;  /* Print end. */  conv_type = 0;  ESMC_LogPrintOut(&plen, &obuf[obuflen], 0, conv_type,		   pbuf, NULL, 0);  obuflen += plen;  ESMC_LogOutbuf(log, priority, obuf);  ESMC_BasicUtilUnlockMutex();  return ESMC_SUCCESS;  }/*--------------------------------------------------------------------------*/#undef __FUNC__#define __FUNC__ "ESMC_LogSetConfig"int ESMC_LogSetConfig(ESMC_Log log, ESMC_LogOption option1, ...){  va_list args;  int ret;    va_start(args, option1);  ret = ESMC_LogSetConfigCV(log, option1, args);  va_end(args);  return ret;    }/*--------------------------------------------------------------------------*/#undef __FUNC__#define __FUNC__ "ESMC_LogSetConfigCV"int ESMC_LogSetConfigCV(ESMC_Log log, ESMC_LogOption option1, va_list args){  ESMC_LogOption option;  ESMC_LogOption ip;  int ival;  option = option1;  while (option != 0)    {      ival = va_arg(args, int);      switch (option)	{	case ESMC_LOGCONFIG_PRINTTID:	  log->printtid = ival;	  break;	case ESMC_LOGCONFIG_PRINTPID:	  log->printpid = ival;	  break;	case ESMC_LOGCONFIG_PRINTTIME:	  log->printtime = ival;	  break;	case ESMC_LOGCONFIG_LOGSTATE:	  ESMC_LogSetState(log, (ESMC_LogState) ival);	  break;	default:	  ESMC_ERRA1(ESMC_ERR_ARG_OUTOFRANGE, 0,		     "Bad SetConfig option:%d\n", option);	  	}      ip = va_arg(args, ESMC_LogOption);      if (ip)	option = ip;      else /* End of list */	option = 0;    }  return ESMC_SUCCESS;}/*--------------------------------------------------------------------------*/#undef __FUNC__#define __FUNC__ "ESMC_LogSetConfigV"int ESMC_LogSetConfigV(ESMC_Log log, ESMC_LogOption option1, va_list args){  ESMC_LogOption option;  ESMC_LogOption *iptr;  int *ival;  option = option1;  while (option != 0)    {      ival = va_arg(args, int*);      switch (option)	{	case ESMC_LOGCONFIG_PRINTTID:	  log->printtid = *ival;	  break;	case ESMC_LOGCONFIG_PRINTPID:	  log->printpid = *ival;	  break;	case ESMC_LOGCONFIG_PRINTTIME:	  log->printtime = *ival;	  break;	case ESMC_LOGCONFIG_LOGSTATE:	  ESMC_LogSetState(log, (ESMC_LogState) *ival);	  break;	default:	  ESMC_ERRA1(ESMC_ERR_ARG_OUTOFRANGE, 0,		     "Bad SetConfig option:%d\n", option);	  	}      iptr = va_arg(args, ESMC_LogOption*);      if (iptr)	option = *iptr;      else /* End of list */	option = 0;    }  return ESMC_SUCCESS;}/*--------------------------------------------------------------------------*/#undef __FUNC__#define __FUNC__ "ESMC_LogPrint"int ESMC_LogPrint(ESMC_Log log, ESMC_LogLevel priority, char *format, ...){  va_list args;    va_start(args, format);    ESMC_LogPrintC(log, priority, format, args);    va_end(args);  return ESMC_SUCCESS;}/*--------------------------------------------------------------------------*/#undef __FUNC__#define __FUNC__ "ESMC_LogLogNew"int ESMC_LogNew(ESMC_Log *log, char *logname, ESMC_LogState logstate, int labelio){  int rc;  *log = (ESMC_Log) malloc(sizeof(ESMC_LogClass));  rc = ESMC_LogConstruct(*log, logname, logstate, labelio);  if (rc != ESMC_SUCCESS)  {     free(*log);     *log = 0;     return rc;  }  return ESMC_SUCCESS;}/*--------------------------------------------------------------------------*/#undef __FUNC__#define __FUNC__ "ESMC_LogConstruct"int ESMC_LogConstruct(ESMC_Log log, char *logname, ESMC_LogState logstate, int labelio){  char *c;  int i;  char fname[1024];  gettimeofday(&start_tv, NULL);  #ifdef ESMC_HAVE_MPI  MPI_Comm_size(MPI_COMM_WORLD, &num_mpi_processes);  MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);#else  num_mpi_processes = 1;#endif  log->logstate = logstate;  log->labelio = labelio;  /* Set defaults for unspecified options */  log->printtid = 1;  log->printpid = 1;  log->printtime = 1;   /* Set up the file descriptor(s) */  if (labelio)    {      log->log_fp = (FILE**) malloc(sizeof(FILE*) * num_mpi_processes);      log->num_fp = num_mpi_processes;      for (i = 0; i < num_mpi_processes; i++)	{	  sprintf(fname, "%s.%d", logname, i);	  log->log_fp[i] = fopen(fname, "a");	  if (!log->log_fp[i])	    {	      ESMC_ERRA1(ESMC_ERR_FILE_OPEN, 0, "Could Not open Logfile:%s\n", fname);	    }	}    }  else    {      log->log_fp = (FILE**) malloc(sizeof(FILE*));      log->num_fp = 1;      /* If logfile, use that name otherwise just pipe to stdout */            log->log_fp[0] = fopen(logname, "a");            if (!log->log_fp[0])	{	  ESMC_ERRA1(ESMC_ERR_FILE_OPEN, 0, "Could Not open Logfile:%s\n", fname);	}    }  return ESMC_SUCCESS;}/*--------------------------------------------------------------------------*/#undef __FUNC__#define __FUNC__ "ESMC_LogDelete"int ESMC_LogDelete(ESMC_Log log){  int rc;  rc = ESMC_LogDestruct(log);  free(log);  return rc;}/*--------------------------------------------------------------------------*/#undef __FUNC__#define __FUNC__ "ESMC_LogDestruct"int ESMC_LogDestruct(ESMC_Log log)     {  int i;  /* Close all logfiles */  for (i = 0; i < log->num_fp; i++)    {      fclose(log->log_fp[i]);    }  return ESMC_SUCCESS;}/*--------------------------------------------------------------------------*/#undef __FUNC__#define __FUNC__ "ESMC_LogSetState"int ESMC_LogSetState(ESMC_Log log, ESMC_LogState logstate){  log->logstate = logstate;  return ESMC_SUCCESS;}/*--------------------------------------------------------------------------*/#undef __FUNC__#define __FUNC__ "ESMC_LogFlush"int ESMC_LogFlush(ESMC_Log log){  int i;  for (i = 0; i < log->num_fp; i++)    fflush(log->log_fp[i]);  return ESMC_SUCCESS;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久精品欧美丰满| 日本一区二区高清| 有码一区二区三区| 国产综合久久久久久鬼色| 欧美日韩一区在线| 奇米一区二区三区av| 久久午夜电影网| 成人av在线影院| 奇米精品一区二区三区在线观看一| 4438x亚洲最大成人网| www.在线欧美| 亚洲欧洲成人av每日更新| 91国偷自产一区二区三区观看| 国产激情一区二区三区四区 | 亚洲午夜久久久| 国产精品国产三级国产有无不卡| 久久亚洲捆绑美女| 日韩精品中文字幕一区| 欧美福利电影网| 欧美午夜一区二区三区免费大片| 一本大道综合伊人精品热热| 国产 日韩 欧美大片| 免费av网站大全久久| 亚洲欧美偷拍另类a∨色屁股| 国产欧美日韩视频一区二区 | 成人欧美一区二区三区小说 | 国产精品三级在线观看| 久久久国产精品不卡| 亚洲国产高清在线| 精品国产精品网麻豆系列| 欧洲精品在线观看| 精品一区二区三区在线播放视频| 亚洲大片在线观看| 亚洲欧美日韩小说| 久草在线在线精品观看| 日韩你懂的在线播放| 欧美电影免费观看高清完整版在线观看| 7777精品伊人久久久大香线蕉的 | 欧美中文字幕久久| 7777精品伊人久久久大香线蕉| 欧美电影在线免费观看| 精品美女在线观看| 亚洲码国产岛国毛片在线| 亚洲第一二三四区| 久久精品国产99国产| 国产在线精品一区在线观看麻豆| 国产另类ts人妖一区二区| eeuss鲁片一区二区三区在线观看| heyzo一本久久综合| 欧美日韩国产精选| 久久―日本道色综合久久| 欧美丰满少妇xxxbbb| 精品成人免费观看| 国产精品家庭影院| 午夜视黄欧洲亚洲| 色妹子一区二区| 国产精品不卡在线观看| 国产偷v国产偷v亚洲高清| 日韩免费看的电影| 亚洲成av人片| 欧美午夜精品免费| 国产精品国产三级国产普通话蜜臀 | 日本精品视频一区二区三区| 3d成人h动漫网站入口| 一区二区欧美在线观看| 成人激情动漫在线观看| 国产亚洲女人久久久久毛片| 亚洲图片有声小说| 在线视频综合导航| 亚洲免费观看高清完整版在线观看 | 国产一区二区三区av电影 | 在线播放日韩导航| 亚洲国产成人精品视频| 欧美综合天天夜夜久久| 亚洲另类在线视频| 在线观看国产一区二区| 亚洲国产精品av| 97国产精品videossex| 国产视频一区二区在线| 国产一区二区免费看| 国产欧美一区二区精品婷婷| 成人在线视频一区二区| 日韩美女精品在线| 欧美日韩在线不卡| 蜜臀av一区二区| 国产亚洲短视频| 婷婷一区二区三区| 欧美日韩aaaaaa| 日韩成人午夜精品| 欧美日韩在线精品一区二区三区激情 | av中文一区二区三区| 国产欧美日韩中文久久| 国产成人av一区二区三区在线 | 国产精品免费视频一区| 国产mv日韩mv欧美| 亚洲精品国产品国语在线app| 99久久婷婷国产| 一区二区成人在线视频| 欧美军同video69gay| 国产精品一区在线观看乱码| 欧美国产乱子伦| 精品视频123区在线观看| 久久97超碰国产精品超碰| 国产精品久久久久久久久免费相片 | 色婷婷av一区| 粉嫩av一区二区三区在线播放| 久久久亚洲高清| 97久久精品人人做人人爽| 日韩激情中文字幕| 一区二区三区日韩欧美| 国产欧美在线观看一区| 日韩欧美国产综合| 欧美中文字幕一二三区视频| 成人高清伦理免费影院在线观看| 久久国产福利国产秒拍| 日韩精品成人一区二区在线| 一区二区三区在线影院| √…a在线天堂一区| 337p亚洲精品色噜噜狠狠| 久久国产综合精品| 中文字幕亚洲一区二区av在线 | 在线视频一区二区免费| av激情综合网| 成人免费毛片a| 国产**成人网毛片九色| 国产99久久久国产精品潘金| 国产乱对白刺激视频不卡 | 麻豆91在线观看| 国内精品免费在线观看| 国产真实精品久久二三区| 精品一区免费av| 国产成人aaa| 欧美综合天天夜夜久久| 在线播放中文字幕一区| 日韩欧美精品在线| 2021久久国产精品不只是精品| 精品区一区二区| 国产精品网曝门| 一区二区三区四区视频精品免费| 亚洲精品亚洲人成人网 | 国产女人18水真多18精品一级做| 26uuu色噜噜精品一区二区| 国产精品美日韩| 亚洲午夜久久久久久久久电影院| 免费成人结看片| 成人精品国产福利| 3atv在线一区二区三区| 国产欧美视频一区二区三区| 国产精品白丝在线| 一二三四区精品视频| 日韩国产高清影视| 国产一区二区三区美女| 在线精品视频免费观看| 久久久久久久电影| 亚洲国产欧美另类丝袜| 国产成人综合网| 欧美私人免费视频| 欧美精品一区二区三| 一区二区三区中文在线| 懂色av中文字幕一区二区三区| 欧美亚洲自拍偷拍| 国产精品沙发午睡系列990531| 琪琪久久久久日韩精品| 91福利视频久久久久| 国产精品麻豆视频| 国产在线国偷精品产拍免费yy| 欧美日韩三级一区| 亚洲精品国产视频| 国产激情偷乱视频一区二区三区| 婷婷中文字幕一区三区| 94色蜜桃网一区二区三区| 国产亚洲一区二区三区四区| 国产福利一区二区三区视频| 在线视频欧美精品| 亚洲综合色丁香婷婷六月图片| 福利一区在线观看| 国产日产欧美一区二区三区| 国产一区二区美女| 久久久激情视频| 成人性生交大片免费| 国产精品沙发午睡系列990531| 国产成人免费在线视频| 欧美精品一区二区三区在线| 国产精品国产三级国产专播品爱网| 亚洲精品自拍动漫在线| 成人晚上爱看视频| 国产视频一区在线观看| 国产精品911| 国产亚洲午夜高清国产拍精品| 欧美sm美女调教| 一区二区三区四区不卡在线 | 国产精品嫩草影院com| 99久久国产综合精品色伊| 亚洲在线成人精品| 日韩情涩欧美日韩视频| 国产美女久久久久| 一区二区三区在线免费播放| 日韩精品在线看片z| 91在线观看高清| 麻豆一区二区99久久久久|