414 lines
9.7 KiB
C
414 lines
9.7 KiB
C
// stdafx.h : include file for standard system include files,
|
||
// or project specific include files that are used frequently, but
|
||
// are changed infrequently
|
||
//
|
||
|
||
#if !defined(AFX_STDAFX_H__F29B1587_92A1_4DB8_A659_2AE865E3FCFE__INCLUDED_)
|
||
#define AFX_STDAFX_H__F29B1587_92A1_4DB8_A659_2AE865E3FCFE__INCLUDED_
|
||
|
||
#if _MSC_VER > 1000
|
||
#pragma once
|
||
#endif // _MSC_VER > 1000
|
||
|
||
|
||
|
||
#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
|
||
|
||
#define SOAP_DEBUG
|
||
//#ifdef DEBUG_CHECK_MEM
|
||
|
||
#ifdef DEBUG_CHECK_MEM
|
||
#ifdef _DEBUG
|
||
#define CRTDBG_MAP_ALLOC
|
||
#include <stdlib.h>
|
||
#include <crtdbg.h>
|
||
#endif
|
||
#endif
|
||
|
||
#include <afxwin.h> // MFC core and standard components
|
||
#include <afxext.h> // MFC extensions
|
||
#include <afxdisp.h> // MFC Automation classes
|
||
#include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls
|
||
#ifndef _AFX_NO_AFXCMN_SUPPORT
|
||
#include <afxcmn.h> // MFC support for Windows Common Controls
|
||
#endif // _AFX_NO_AFXCMN_SUPPORT
|
||
|
||
#include <afxsock.h> // MFC socket extensions
|
||
|
||
#include <Atlbase.h>
|
||
#include <comdef.h>
|
||
#include <AfxTempl.h>
|
||
#include <afxmt.h>
|
||
|
||
#include <afxinet.h>
|
||
#pragma comment(lib, "wininet.lib")
|
||
|
||
|
||
#include "..\..\public\LuTool.h"
|
||
#include "..\..\public\des\Des.h"
|
||
#include "..\..\public\ado\ado.h"
|
||
#include "..\..\public\CorpSms.h"
|
||
#include "..\..\public\SendPub.h"
|
||
#include "..\..\public\CMarkup\Markup.h"
|
||
#include "..\..\public\AutoBuffer\AutoBuffer.h"
|
||
#include "..\..\public\AutoCoInitializeEx\AutoCoInitializeEx.h"
|
||
#include "..\..\public\ProxySocket\CBase64Coding.hpp"
|
||
#include "..\..\public\zip\zip.h"
|
||
#include "..\..\public\AutoCoInitializeEx\AutoCoInitializeEx.h"
|
||
#include "..\..\public\LuGBBIG5.h"
|
||
#include "..\..\public\SqlPool\SqlPool.h"
|
||
#include "ImApi\ImApi.h" //masapi
|
||
|
||
#include ".\Cmpp\Cmpp.h"
|
||
#include ".\Cmpp3\Cmpp3.h"
|
||
#include ".\Sgip\Sgip.h"
|
||
#include ".\Smgp\Smgp.h"
|
||
#include ".\QQTX\QQTX.h"
|
||
#include ".\Cbip\Cbip.h"
|
||
|
||
#define MYSQL_CONNECTION_USE_LOADLIBRARY
|
||
#include "..\..\public\MySql\MySqlConnection.h"
|
||
#include "..\..\public\MySql\MySqlRecordSet.h"
|
||
|
||
#include "LuTool.h"
|
||
|
||
#include "gsoap_public\h.nsmap"
|
||
|
||
#include "GDDX_Isag_Mms\ISAGMMS.nsmap"
|
||
#include "GDDX_Isag_Mms\ISAGMMSMessageNotificationBindingService.h"
|
||
|
||
#include "GDDX_Isag_Sms\ISAGSMS.nsmap"
|
||
#include "GDDX_Isag_Sms\ISAGSMSSmsNotificationBindingService.h"
|
||
|
||
#include "MobsetApi\MobsetApi.nsmap"
|
||
#include "MobsetApi\MobsetApiMobsetApiSoapService.h"
|
||
|
||
#include "MMS_mm7\IMm7MMS.nsmap"
|
||
#include "MMS_mm7\IMm7MMSmm7SoapBindingService.h"
|
||
|
||
#include "BJDX_iagw_Mms\IAGWMMS.nsmap"
|
||
#include "BJDX_iagw_Mms\IAGWMMScapServiceSoapBindingService.h"
|
||
|
||
#include <afxcontrolbars.h>
|
||
|
||
|
||
#define SAFE_RELEASE(pObject) try{if(pObject){pObject->Release();pObject = NULL;}}catch(...){}
|
||
#define SAFE_DELETE(pObject) try{if(pObject){delete pObject; pObject = NULL;}}catch(...){}
|
||
|
||
//#define SMSCENTER_TWO //<2F><>ƽ̨<C6BD><CCA8><EFBFBD><EFBFBD><E2B4A6><EFBFBD><EFBFBD>2x<32><78>ʾ<EFBFBD><CABE>Mas<61><73><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>ƽ̨<C6BD><CCA8>3x .
|
||
|
||
//#define MSG_MAXSENDLEN 70
|
||
//#define COM_TIMOUT 20 //<2F><><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>ʱ<EFBFBD><CAB1>,<2C><>
|
||
#define DEFAULT_DBNAME "corpsms" //Ĭ<>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD>ΪSql Server ʱ<><CAB1><EFBFBD><EFBFBD>
|
||
#define DEFAULT_DBNAMET "corpsmst" //Ĭ<>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD>ΪSql Server ʱ<><CAB1><EFBFBD><EFBFBD>
|
||
#define LOG_MAX_CHAR2 620
|
||
#define LOG_MAX_CHAR22 620
|
||
|
||
#define MAX_RESENDCOUNT 2 //<2F><><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD>2<EFBFBD>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF>ʧ<EFBFBD>ܵ<EFBFBD><DCB5><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32>
|
||
|
||
//<2F>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹ
|
||
#define MOB_HEAD_FILETYPE _T("MULTMOB1") //<2F><>ȡ<EFBFBD>ֻ<EFBFBD><D6BB>б<EFBFBD><D0B1><EFBFBD><EFBFBD>ļ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>
|
||
typedef struct _MobileCom_Head
|
||
{
|
||
TCHAR szFileType[ 16]; //<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>,Ӧ<><D3A6>ΪMOB_HEAD_FILETYPE
|
||
TCHAR szIP[32];
|
||
TCHAR szUser[32];
|
||
TCHAR szPasswd[32];
|
||
TCHAR szCmpp_Server[32];
|
||
TCHAR szCmpp_User[32];
|
||
TCHAR szCmpp_Passwd[32];
|
||
TCHAR szCmpp_CorpID[32];
|
||
TCHAR szCmpp_Num[32];
|
||
long lSendCount; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
int lCheckReSend;
|
||
BOOL bCheckBack;
|
||
TCHAR szIP2[32];
|
||
TCHAR szUser2[32];
|
||
TCHAR szPasswd2[32];
|
||
long lTopSel;
|
||
long lNumType;
|
||
long lTempUse;
|
||
long lSendFCS;
|
||
long lReport;
|
||
long lDelay;
|
||
TCHAR szWindow[124];
|
||
BOOL bVerifySignatureReject;
|
||
BOOL bVerifySignature;
|
||
BOOL bMainReSend;
|
||
BOOL bAllNum;
|
||
BOOL bCheckCM;
|
||
BOOL bExCM;
|
||
BOOL bSubNum;
|
||
BOOL bCmpp;
|
||
TCHAR szExchangeNum[32];
|
||
long lCmpp_Port;
|
||
BOOL bShowLog;
|
||
BOOL bAdc;
|
||
TCHAR szCmpp_YWID[32];
|
||
BOOL bLongSms;
|
||
BOOL bPushReport;
|
||
long lCmpp_MaxLen;
|
||
BOOL bNoRet;
|
||
BOOL bNoReport;
|
||
BOOL bExCM2;
|
||
long lSpeed;
|
||
long lSelectLock;
|
||
long lUpdateLock;
|
||
long lType;
|
||
long lCmpp_LocalPort;
|
||
long lThread_Send;
|
||
long lThread_Ret;
|
||
long lThread_Report;
|
||
TCHAR szA1[64];
|
||
TCHAR szA2[64];
|
||
TCHAR szA3[64];
|
||
TCHAR szA4[64];
|
||
TCHAR szA5[64];
|
||
TCHAR szA6[64];
|
||
TCHAR szA7[64];
|
||
TCHAR szA8[64];
|
||
TCHAR szA9[64];
|
||
TCHAR szCmpp_NodeID[32];
|
||
BOOL bLog; //<2F><>¼<EFBFBD><C2BC>־
|
||
BOOL bLogEx; //<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
|
||
long lOnePackSmsCount;
|
||
BOOL bSupLongSms;
|
||
long lThread_Public_SendSms;
|
||
TCHAR szSendRet[48];
|
||
BOOL bNoRecv;
|
||
BOOL SD_Disable1;
|
||
BOOL SD_Disable2;
|
||
|
||
SYSTEMTIME SD_B1;
|
||
SYSTEMTIME SD_B2;
|
||
|
||
SYSTEMTIME SD_E1;
|
||
SYSTEMTIME SD_E2;
|
||
BOOL bExpLongSms;
|
||
BOOL bMmsAudit;
|
||
BOOL bShowLog2;
|
||
TCHAR szA10[64];
|
||
TCHAR szProvider[32];
|
||
DWORD dwIDCount; //<2F><><EFBFBD>ں<EFBFBD><DABA>ݺ<EFBFBD><DDBA><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>ȡ״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID
|
||
BOOL bNo86;
|
||
|
||
BOOL TDError_Enable; //<2F><><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
int TDError_Gap; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
int TDError_Interval; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||
int TDError_BeginCount; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
int TDError_Warning_Resend; //<2F>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
int TDError_Warning_Black; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
int TDError_Warning_SendFailPer; //<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD>ܱ<EFBFBD><DCB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
int TDError_Warning_ReportFailPer; //״̬ʧ<CCAC>ܱ<EFBFBD><DCB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
int TDError_Warning_DelaySec; //<2F><>ʱʱ<CAB1>䷧ֵ
|
||
int TDError_Warning_DelayPer; //<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
BOOL bLogEx2; //<2F><>¼<EFBFBD><C2BC>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
|
||
}MobileCom_Head;
|
||
|
||
|
||
|
||
|
||
#define LOG_MAX_CHAR 2048
|
||
#define LOG_MAX_LINE 24
|
||
|
||
typedef struct _SC_Log
|
||
{
|
||
long lLogType;
|
||
long lShowInWin;
|
||
CString strLog;
|
||
}SC_Log;
|
||
typedef CList<SC_Log , SC_Log&> CSC_Log;
|
||
|
||
|
||
//<2F><><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>״̬
|
||
typedef struct _MT_Resp
|
||
{
|
||
ULONG lSendID; //<2F><><EFBFBD>ݿ<EFBFBD><DDBF>м<EFBFBD>¼<EFBFBD><C2BC>SendID
|
||
ULONG lResult; //<2F><><EFBFBD><EFBFBD>״̬
|
||
ULONG lReSendCount; //<2F>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6>ٴ<EFBFBD>
|
||
TCHAR szMsgID[64]; //<2F><><EFBFBD>ͳɹ<CDB3>ʱ<EFBFBD>д˷<D0B4><CBB7>أ<EFBFBD><D8A3><EFBFBD>ϢID
|
||
TCHAR szErrMsg[64]; //<2F><><EFBFBD>ͳɹ<CDB3>ʱ<EFBFBD>д˷<D0B4><CBB7>أ<EFBFBD><D8A3><EFBFBD>ϢID
|
||
}MT_Resp;
|
||
typedef CList<MT_Resp , MT_Resp&> CMT_Resp;
|
||
|
||
//<2F><><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>״̬
|
||
typedef struct _MT_Report
|
||
{
|
||
long lReportOK;
|
||
long bSubmitError;
|
||
TCHAR szStatus[32];
|
||
TCHAR szMobile[64]; //״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
TCHAR szSender[64]; //<2F><><EFBFBD>ͺ<EFBFBD><CDBA>룬<EFBFBD><EBA3AC><EFBFBD><EFBFBD>ͨ<EFBFBD>ŵĿ<C5B5><C4BF><EFBFBD><EFBFBD>õ<EFBFBD>
|
||
SYSTEMTIME tTime; //״̬<D7B4><CCAC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||
TCHAR szMsgID[64]; //<2F><><EFBFBD>ͳɹ<CDB3>ʱ<EFBFBD>д˷<D0B4><CBB7>أ<EFBFBD><D8A3><EFBFBD>ϢID
|
||
TCHAR szErrMsg[64]; //<2F><><EFBFBD>ͳɹ<CDB3>ʱ<EFBFBD>д˷<D0B4><CBB7>أ<EFBFBD><D8A3><EFBFBD>ϢID
|
||
}MT_Report;
|
||
typedef CList<MT_Report , MT_Report&> CMT_Report;
|
||
|
||
|
||
#define FZ_MAX_MOBILE 100 //<2F><><EFBFBD><EFBFBD><EFBFBD>ɴ<EFBFBD><C9B4>ŵĶ<C5B5><C4B6>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
#define FZ_MAX_MOBILE_MORE 20000 //<2F><><EFBFBD><EFBFBD><EFBFBD>ɴ<EFBFBD><C9B4>ŵĶ<C5B5><C4B6>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
#ifdef _DEBUG
|
||
#define FZ_MAX_SEND 50
|
||
#else
|
||
#define FZ_MAX_SEND 200
|
||
#endif
|
||
|
||
typedef struct _RecvSms_MmsAttach
|
||
{
|
||
long lSize;
|
||
BYTE * pData;
|
||
TCHAR szName[64];
|
||
TCHAR szID[64];
|
||
TCHAR szLocation[64];
|
||
TCHAR szType[64];
|
||
}RecvSms_MmsAttach;
|
||
|
||
typedef struct _FZ_Mobile
|
||
{
|
||
TCHAR szMobile[24];
|
||
TCHAR szRecver[32];
|
||
long lSendID;
|
||
long lSendRet;
|
||
}FZ_Mobile;
|
||
typedef CArray<FZ_Mobile , FZ_Mobile&> CFZ_Mobile;
|
||
|
||
|
||
typedef struct _FZ_Send
|
||
{
|
||
BOOL bEnable;
|
||
BOOL bSendOk;
|
||
TCHAR szSendNum[32];
|
||
TCHAR szMsg[1024];
|
||
TCHAR szSrcNum[32];
|
||
TCHAR szAddNum[32];
|
||
TCHAR szMsgID[64];
|
||
TCHAR szErrorMsg[64];
|
||
TCHAR MmsSendID[64];
|
||
long lSendID;
|
||
long lCorpID;
|
||
long lUserID;
|
||
long lMmsFileID;
|
||
BOOL bMmsFileSend;
|
||
long lOneSendID;
|
||
long lmmSize;
|
||
BOOL bOnlySubmitMmsFile;
|
||
long lMmsFileAuditID;
|
||
long lErrorCode;
|
||
SYSTEMTIME tTime;
|
||
long lReSendCount;
|
||
long lMobileCount;
|
||
FZ_Mobile Mobile[FZ_MAX_MOBILE];
|
||
CFZ_Mobile * pMobile; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
long lMmsAttach;
|
||
RecvSms_MmsAttach * pMmsAttach;
|
||
}FZ_Send;
|
||
typedef CList<FZ_Send , FZ_Send&> CFZ_Send;
|
||
|
||
typedef struct _FXSend_MT
|
||
{
|
||
long SendID;
|
||
long lTDMsgType;
|
||
long CorpID;
|
||
long UserID;
|
||
long MmsFileID;
|
||
long mmSize;
|
||
CString GroupID;
|
||
long Status;
|
||
CString MsgID;
|
||
long SendRet;
|
||
long SendFCS;
|
||
long ReSendCount;
|
||
long ReSendCountSrc;
|
||
CString Sender;
|
||
CString SendNum;
|
||
CString Recver;
|
||
CString RecvNum;
|
||
long RecvNumType;
|
||
CString Msg;
|
||
long MsgType;
|
||
COleDateTime SubTime;
|
||
COleDateTime Timer;
|
||
long Priority;
|
||
long StatusReport;
|
||
COleDateTime OvrTime;
|
||
COleDateTime SendTime;
|
||
COleDateTime RecvTime;
|
||
CString RecvStatus;
|
||
long KF;
|
||
CString IP;
|
||
CString SM_ID;
|
||
CString TRANS_CODE;
|
||
CString ORGAN_CODE;
|
||
COleDateTime tAddThisTime;
|
||
BOOL bLongSms;
|
||
long lLongSmsRand;
|
||
BOOL bOnlySubmitMmsFile;
|
||
CString strSignature;
|
||
}FXSend_MT;
|
||
|
||
typedef CList<FXSend_MT , FXSend_MT&> CFXSend_MT;
|
||
|
||
|
||
#define FZ_MAX_LONGSMS 1000
|
||
|
||
typedef struct _FZ_LongSms
|
||
{
|
||
long lMsgType;
|
||
long lSendID;
|
||
TCHAR szSendNum[32]; //<2F><><EFBFBD><EFBFBD><EFBFBD>ߺ<EFBFBD><DFBA>룬<EFBFBD><EBA3AC><EFBFBD><EFBFBD>lMsgType==MSGTYPE_REPORT,<2C><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD>
|
||
TCHAR szRecvNum[32]; //<2F><><EFBFBD><EFBFBD><EFBFBD>ߺ<EFBFBD><DFBA><EFBFBD>
|
||
TCHAR szMsg[256]; //<2F><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
|
||
long lLongMsgRand; //<2F><><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD>ſ<EFBFBD><C5BF><EFBFBD>
|
||
long lLongMsgAll;
|
||
long lLongMsgIndex;
|
||
}FZ_LongSms;
|
||
|
||
|
||
typedef struct _ZSDX_RegNum
|
||
{
|
||
TCHAR szUser[32];
|
||
TCHAR szPasswd[32];
|
||
TCHAR szConnID[32];
|
||
DWORD dwEndTime;
|
||
}ZSDX_RegNum;
|
||
|
||
typedef CArray<ZSDX_RegNum , ZSDX_RegNum&> CZSDX_RegNum;
|
||
|
||
typedef struct _ZSDX_Users
|
||
{
|
||
long lRegNumIndex;
|
||
CString strRegNum;
|
||
CString strUser;
|
||
CString strPasswd;
|
||
}ZSDX_Users;
|
||
|
||
typedef CArray<ZSDX_Users , ZSDX_Users&> CZSDX_Users;
|
||
|
||
|
||
#define ZSDX_MAX_PROCESS 40
|
||
|
||
|
||
typedef struct _ZSDX_Data_Recv
|
||
{
|
||
char szHead[2048]; //httpͷ<70><CDB7><EFBFBD><EFBFBD>
|
||
ULONG lDataLen2; //Ӧ<><D3A6><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
||
ULONG lDataLen; //Ӧ<><D3A6><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
||
ULONG lRecvLen; //<2F><><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
||
BOOL bRecvFrame; //<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Frame;
|
||
BYTE * pRecvFrame; //<2F>յ<EFBFBD><D5B5><EFBFBD>Frame
|
||
}ZSDX_Data_Recv;
|
||
|
||
|
||
|
||
//#define SMSCENTER_NX
|
||
|
||
|
||
//#define GDYD_TEMP
|
||
|
||
|
||
//{{AFX_INSERT_LOCATION}}
|
||
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
|
||
|
||
#endif // !defined(AFX_STDAFX_H__F29B1587_92A1_4DB8_A659_2AE865E3FCFE__INCLUDED_)
|