; Listing generated by Microsoft (R) Optimizing Compiler Version 19.34.31933.0 

include listing.inc

INCLUDELIB LIBCMT
INCLUDELIB OLDNAMES

PUBLIC	?__empty_global_delete@@YAXPEAX@Z		; __empty_global_delete
PUBLIC	?__empty_global_delete@@YAXPEAX_K@Z		; __empty_global_delete
PUBLIC	?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z ; __empty_global_delete
PUBLIC	?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z ; __empty_global_delete
PUBLIC	?AtlThrowImpl@ATL@@YAXJ@Z			; ATL::AtlThrowImpl
PUBLIC	?data@CStringData@ATL@@QEAAPEAXXZ		; ATL::CStringData::data
PUBLIC	?IsShared@CStringData@ATL@@QEBA_NXZ		; ATL::CStringData::IsShared
PUBLIC	?Release@CStringData@ATL@@QEAAXXZ		; ATL::CStringData::Release
PUBLIC	?GetBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAPEA_WH@Z ; ATL::CSimpleStringT<wchar_t,0>::GetBuffer
PUBLIC	?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer
PUBLIC	?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z ; ATL::CSimpleStringT<wchar_t,0>::StringLengthN
PUBLIC	?ThrowMemoryException@?$CSimpleStringT@_W$0A@@ATL@@KAXXZ ; ATL::CSimpleStringT<wchar_t,0>::ThrowMemoryException
PUBLIC	?Attach@?$CSimpleStringT@_W$0A@@ATL@@AEAAXPEAUCStringData@2@@Z ; ATL::CSimpleStringT<wchar_t,0>::Attach
PUBLIC	?Fork@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z	; ATL::CSimpleStringT<wchar_t,0>::Fork
PUBLIC	?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<wchar_t,0>::GetData
PUBLIC	?PrepareWrite@?$CSimpleStringT@_W$0A@@ATL@@AEAAPEA_WH@Z ; ATL::CSimpleStringT<wchar_t,0>::PrepareWrite
PUBLIC	?PrepareWrite2@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::PrepareWrite2
PUBLIC	?Reallocate@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::Reallocate
PUBLIC	?SetLength@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::SetLength
PUBLIC	?GetSize@CByteArray@@QEBA_JXZ			; CByteArray::GetSize
PUBLIC	?RemoveAll@CByteArray@@QEAAXXZ			; CByteArray::RemoveAll
PUBLIC	?SetAt@CByteArray@@QEAAX_JE@Z			; CByteArray::SetAt
PUBLIC	?GetData@CByteArray@@QEBAPEBEXZ			; CByteArray::GetData
PUBLIC	??B?$CSimpleStringT@D$0A@@ATL@@QEBAPEBDXZ	; ATL::CSimpleStringT<char,0>::operator char const *
PUBLIC	?GetBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAPEADH@Z ; ATL::CSimpleStringT<char,0>::GetBuffer
PUBLIC	?GetLength@?$CSimpleStringT@D$0A@@ATL@@QEBAHXZ	; ATL::CSimpleStringT<char,0>::GetLength
PUBLIC	?ReleaseBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<char,0>::ReleaseBuffer
PUBLIC	?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z ; ATL::CSimpleStringT<char,0>::StringLengthN
PUBLIC	?ThrowMemoryException@?$CSimpleStringT@D$0A@@ATL@@KAXXZ ; ATL::CSimpleStringT<char,0>::ThrowMemoryException
PUBLIC	?Attach@?$CSimpleStringT@D$0A@@ATL@@AEAAXPEAUCStringData@2@@Z ; ATL::CSimpleStringT<char,0>::Attach
PUBLIC	?Fork@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z	; ATL::CSimpleStringT<char,0>::Fork
PUBLIC	?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<char,0>::GetData
PUBLIC	?PrepareWrite@?$CSimpleStringT@D$0A@@ATL@@AEAAPEADH@Z ; ATL::CSimpleStringT<char,0>::PrepareWrite
PUBLIC	?PrepareWrite2@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<char,0>::PrepareWrite2
PUBLIC	?Reallocate@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<char,0>::Reallocate
PUBLIC	?SetLength@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z	; ATL::CSimpleStringT<char,0>::SetLength
PUBLIC	?m_InitializeDecoderTable@CBase64Coding@@MEAAXXZ ; CBase64Coding::m_InitializeDecoderTable
PUBLIC	??0CBase64Coding@@QEAA@XZ			; CBase64Coding::CBase64Coding
PUBLIC	??1CBase64Coding@@UEAA@XZ			; CBase64Coding::~CBase64Coding
PUBLIC	?Decode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z ; CBase64Coding::Decode
PUBLIC	?Decode@CBase64Coding@@UEAAHAEBV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@AEAVCByteArray@@@Z ; CBase64Coding::Decode
PUBLIC	?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z ; CBase64Coding::Encode
PUBLIC	?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z ; CBase64Coding::Encode
PUBLIC	?Encode@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z ; CBase64Coding::Encode
PUBLIC	?EncodeA@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z ; CBase64Coding::EncodeA
PUBLIC	?Encode2@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z ; CBase64Coding::Encode2
PUBLIC	??_GCBase64Coding@@UEAAPEAXI@Z			; CBase64Coding::`scalar deleting destructor'
PUBLIC	??_7CBase64Coding@@6B@				; CBase64Coding::`vftable'
PUBLIC	??_C@_0EB@NFPJKBDG@ABCDEFGHIJKLMNOPQRSTUVWXYZabcde@ ; `string'
PUBLIC	??_R4CBase64Coding@@6B@				; CBase64Coding::`RTTI Complete Object Locator'
PUBLIC	??_R0?AVCBase64Coding@@@8			; CBase64Coding `RTTI Type Descriptor'
PUBLIC	??_R3CBase64Coding@@8				; CBase64Coding::`RTTI Class Hierarchy Descriptor'
PUBLIC	??_R2CBase64Coding@@8				; CBase64Coding::`RTTI Base Class Array'
PUBLIC	??_R1A@?0A@EA@CBase64Coding@@8			; CBase64Coding::`RTTI Base Class Descriptor at (0,-1,0,64)'
PUBLIC	__real@3fe8000000000000
EXTRN	??3@YAXPEAX_K@Z:PROC				; operator delete
EXTRN	_invalid_parameter_noinfo:PROC
EXTRN	_errno:PROC
EXTRN	memcpy:PROC
EXTRN	memset:PROC
EXTRN	wcsnlen:PROC
EXTRN	strnlen:PROC
EXTRN	?AfxThrowMemoryException@@YAXXZ:PROC		; AfxThrowMemoryException
EXTRN	?AfxThrowInvalidArgException@@YAXXZ:PROC	; AfxThrowInvalidArgException
EXTRN	?AfxThrowOleException@@YAXJ@Z:PROC		; AfxThrowOleException
EXTRN	?SetSize@CByteArray@@QEAAX_J0@Z:PROC		; CByteArray::SetSize
EXTRN	??_ECBase64Coding@@UEAAPEAXI@Z:PROC		; CBase64Coding::`vector deleting destructor'
EXTRN	__CxxFrameHandler4:PROC
EXTRN	__GSHandlerCheck:PROC
EXTRN	__security_check_cookie:PROC
EXTRN	??_7type_info@@6B@:BYTE				; type_info::`vftable'
EXTRN	__security_cookie:QWORD
EXTRN	_fltused:DWORD
;	COMDAT pdata
pdata	SEGMENT
$pdata$?__empty_global_delete@@YAXPEAX@Z DD imagerel $LN3
	DD	imagerel $LN3+19
	DD	imagerel $unwind$?__empty_global_delete@@YAXPEAX@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?__empty_global_delete@@YAXPEAX_K@Z DD imagerel $LN3
	DD	imagerel $LN3+24
	DD	imagerel $unwind$?__empty_global_delete@@YAXPEAX_K@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z DD imagerel $LN3
	DD	imagerel $LN3+24
	DD	imagerel $unwind$?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z DD imagerel $LN3
	DD	imagerel $LN3+29
	DD	imagerel $unwind$?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$memcpy_s DD imagerel memcpy_s
	DD	imagerel memcpy_s+292
	DD	imagerel $unwind$memcpy_s
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?AtlThrowImpl@ATL@@YAXJ@Z DD imagerel $LN5
	DD	imagerel $LN5+44
	DD	imagerel $unwind$?AtlThrowImpl@ATL@@YAXJ@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?data@CStringData@ATL@@QEAAPEAXXZ DD imagerel $LN3
	DD	imagerel $LN3+27
	DD	imagerel $unwind$?data@CStringData@ATL@@QEAAPEAXXZ
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?IsShared@CStringData@ATL@@QEBA_NXZ DD imagerel $LN5
	DD	imagerel $LN5+49
	DD	imagerel $unwind$?IsShared@CStringData@ATL@@QEBA_NXZ
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?Release@CStringData@ATL@@QEAAXXZ DD imagerel $LN4
	DD	imagerel $LN4+86
	DD	imagerel $unwind$?Release@CStringData@ATL@@QEAAXXZ
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?GetBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAPEA_WH@Z DD imagerel $LN3
	DD	imagerel $LN3+37
	DD	imagerel $unwind$?GetBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAPEA_WH@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z DD imagerel $LN4
	DD	imagerel $LN4+80
	DD	imagerel $unwind$?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z DD imagerel $LN4
	DD	imagerel $LN4+51
	DD	imagerel $unwind$?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?ThrowMemoryException@?$CSimpleStringT@_W$0A@@ATL@@KAXXZ DD imagerel $LN3
	DD	imagerel $LN3+27
	DD	imagerel $unwind$?ThrowMemoryException@?$CSimpleStringT@_W$0A@@ATL@@KAXXZ
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?Attach@?$CSimpleStringT@_W$0A@@ATL@@AEAAXPEAUCStringData@2@@Z DD imagerel $LN3
	DD	imagerel $LN3+42
	DD	imagerel $unwind$?Attach@?$CSimpleStringT@_W$0A@@ATL@@AEAAXPEAUCStringData@2@@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?Fork@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z DD imagerel $LN6
	DD	imagerel $LN6+257
	DD	imagerel $unwind$?Fork@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ DD imagerel $LN3
	DD	imagerel $LN3+30
	DD	imagerel $unwind$?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?PrepareWrite@?$CSimpleStringT@_W$0A@@ATL@@AEAAPEA_WH@Z DD imagerel $LN5
	DD	imagerel $LN5+119
	DD	imagerel $unwind$?PrepareWrite@?$CSimpleStringT@_W$0A@@ATL@@AEAAPEA_WH@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?PrepareWrite2@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z DD imagerel $LN10
	DD	imagerel $LN10+178
	DD	imagerel $unwind$?PrepareWrite2@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?Reallocate@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z DD imagerel $LN6
	DD	imagerel $LN6+142
	DD	imagerel $unwind$?Reallocate@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?SetLength@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z DD imagerel $LN5
	DD	imagerel $LN5+90
	DD	imagerel $unwind$?SetLength@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?GetSize@CByteArray@@QEBA_JXZ DD imagerel $LN3
	DD	imagerel $LN3+27
	DD	imagerel $unwind$?GetSize@CByteArray@@QEBA_JXZ
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?RemoveAll@CByteArray@@QEAAXXZ DD imagerel $LN3
	DD	imagerel $LN3+39
	DD	imagerel $unwind$?RemoveAll@CByteArray@@QEAAXXZ
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?SetAt@CByteArray@@QEAAX_JE@Z DD imagerel $LN5
	DD	imagerel $LN5+76
	DD	imagerel $unwind$?SetAt@CByteArray@@QEAAX_JE@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?GetData@CByteArray@@QEBAPEBEXZ DD imagerel $LN3
	DD	imagerel $LN3+27
	DD	imagerel $unwind$?GetData@CByteArray@@QEBAPEBEXZ
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$??B?$CSimpleStringT@D$0A@@ATL@@QEBAPEBDXZ DD imagerel $LN3
	DD	imagerel $LN3+26
	DD	imagerel $unwind$??B?$CSimpleStringT@D$0A@@ATL@@QEBAPEBDXZ
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?GetBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAPEADH@Z DD imagerel $LN3
	DD	imagerel $LN3+37
	DD	imagerel $unwind$?GetBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAPEADH@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?GetLength@?$CSimpleStringT@D$0A@@ATL@@QEBAHXZ DD imagerel $LN3
	DD	imagerel $LN3+33
	DD	imagerel $unwind$?GetLength@?$CSimpleStringT@D$0A@@ATL@@QEBAHXZ
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?ReleaseBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAXH@Z DD imagerel $LN4
	DD	imagerel $LN4+80
	DD	imagerel $unwind$?ReleaseBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAXH@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z DD imagerel $LN4
	DD	imagerel $LN4+51
	DD	imagerel $unwind$?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?ThrowMemoryException@?$CSimpleStringT@D$0A@@ATL@@KAXXZ DD imagerel $LN3
	DD	imagerel $LN3+27
	DD	imagerel $unwind$?ThrowMemoryException@?$CSimpleStringT@D$0A@@ATL@@KAXXZ
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?Attach@?$CSimpleStringT@D$0A@@ATL@@AEAAXPEAUCStringData@2@@Z DD imagerel $LN3
	DD	imagerel $LN3+42
	DD	imagerel $unwind$?Attach@?$CSimpleStringT@D$0A@@ATL@@AEAAXPEAUCStringData@2@@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?Fork@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z DD imagerel $LN6
	DD	imagerel $LN6+251
	DD	imagerel $unwind$?Fork@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ DD imagerel $LN3
	DD	imagerel $LN3+30
	DD	imagerel $unwind$?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?PrepareWrite@?$CSimpleStringT@D$0A@@ATL@@AEAAPEADH@Z DD imagerel $LN5
	DD	imagerel $LN5+119
	DD	imagerel $unwind$?PrepareWrite@?$CSimpleStringT@D$0A@@ATL@@AEAAPEADH@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?PrepareWrite2@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z DD imagerel $LN10
	DD	imagerel $LN10+178
	DD	imagerel $unwind$?PrepareWrite2@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?Reallocate@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z DD imagerel $LN6
	DD	imagerel $LN6+142
	DD	imagerel $unwind$?Reallocate@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?SetLength@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z DD imagerel $LN5
	DD	imagerel $LN5+88
	DD	imagerel $unwind$?SetLength@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?m_InitializeDecoderTable@CBase64Coding@@MEAAXXZ DD imagerel $LN3
	DD	imagerel $LN3+1272
	DD	imagerel $unwind$?m_InitializeDecoderTable@CBase64Coding@@MEAAXXZ
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$??0CBase64Coding@@QEAA@XZ DD imagerel $LN3
	DD	imagerel $LN3+55
	DD	imagerel $unwind$??0CBase64Coding@@QEAA@XZ
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$??1CBase64Coding@@UEAA@XZ DD imagerel $LN3
	DD	imagerel $LN3+33
	DD	imagerel $unwind$??1CBase64Coding@@UEAA@XZ
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?Decode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z DD imagerel $LN23
	DD	imagerel $LN23+991
	DD	imagerel $unwind$?Decode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?Decode@CBase64Coding@@UEAAHAEBV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@AEAVCByteArray@@@Z DD imagerel $LN23
	DD	imagerel $LN23+991
	DD	imagerel $unwind$?Decode@CBase64Coding@@UEAAHAEBV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@AEAVCByteArray@@@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z DD imagerel $LN9
	DD	imagerel $LN9+913
	DD	imagerel $unwind$?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z DD imagerel $LN10
	DD	imagerel $LN10+917
	DD	imagerel $unwind$?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?Encode@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z DD imagerel $LN9
	DD	imagerel $LN9+845
	DD	imagerel $unwind$?Encode@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?EncodeA@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z DD imagerel $LN9
	DD	imagerel $LN9+813
	DD	imagerel $unwind$?EncodeA@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?Encode2@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z DD imagerel $LN9
	DD	imagerel $LN9+838
	DD	imagerel $unwind$?Encode2@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$??_GCBase64Coding@@UEAAPEAXI@Z DD imagerel $LN4
	DD	imagerel $LN4+62
	DD	imagerel $unwind$??_GCBase64Coding@@UEAAPEAXI@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?__get_character@@YAEPEBE0AEAHH@Z DD imagerel ?__get_character@@YAEPEBE0AEAHH@Z
	DD	imagerel ?__get_character@@YAEPEBE0AEAHH@Z+117
	DD	imagerel $unwind$?__get_character@@YAEPEBE0AEAHH@Z
pdata	ENDS
;	COMDAT __real@3fe8000000000000
CONST	SEGMENT
__real@3fe8000000000000 DQ 03fe8000000000000r	; 0.75
CONST	ENDS
;	COMDAT ??_R1A@?0A@EA@CBase64Coding@@8
rdata$r	SEGMENT
??_R1A@?0A@EA@CBase64Coding@@8 DD imagerel ??_R0?AVCBase64Coding@@@8 ; CBase64Coding::`RTTI Base Class Descriptor at (0,-1,0,64)'
	DD	00H
	DD	00H
	DD	0ffffffffH
	DD	00H
	DD	040H
	DD	imagerel ??_R3CBase64Coding@@8
rdata$r	ENDS
;	COMDAT ??_R2CBase64Coding@@8
rdata$r	SEGMENT
??_R2CBase64Coding@@8 DD imagerel ??_R1A@?0A@EA@CBase64Coding@@8 ; CBase64Coding::`RTTI Base Class Array'
	ORG $+3
rdata$r	ENDS
;	COMDAT ??_R3CBase64Coding@@8
rdata$r	SEGMENT
??_R3CBase64Coding@@8 DD 00H				; CBase64Coding::`RTTI Class Hierarchy Descriptor'
	DD	00H
	DD	01H
	DD	imagerel ??_R2CBase64Coding@@8
rdata$r	ENDS
;	COMDAT ??_R0?AVCBase64Coding@@@8
data$rs	SEGMENT
??_R0?AVCBase64Coding@@@8 DQ FLAT:??_7type_info@@6B@	; CBase64Coding `RTTI Type Descriptor'
	DQ	0000000000000000H
	DB	'.?AVCBase64Coding@@', 00H
data$rs	ENDS
;	COMDAT ??_R4CBase64Coding@@6B@
rdata$r	SEGMENT
??_R4CBase64Coding@@6B@ DD 01H				; CBase64Coding::`RTTI Complete Object Locator'
	DD	00H
	DD	00H
	DD	imagerel ??_R0?AVCBase64Coding@@@8
	DD	imagerel ??_R3CBase64Coding@@8
	DD	imagerel ??_R4CBase64Coding@@6B@
rdata$r	ENDS
;	COMDAT ??_C@_0EB@NFPJKBDG@ABCDEFGHIJKLMNOPQRSTUVWXYZabcde@
CONST	SEGMENT
??_C@_0EB@NFPJKBDG@ABCDEFGHIJKLMNOPQRSTUVWXYZabcde@ DB 'ABCDEFGHIJKLMNOPQ'
	DB	'RSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/', 00H ; `string'
CONST	ENDS
;	COMDAT ??_7CBase64Coding@@6B@
CONST	SEGMENT
??_7CBase64Coding@@6B@ DQ FLAT:??_R4CBase64Coding@@6B@	; CBase64Coding::`vftable'
	DQ	FLAT:?m_InitializeDecoderTable@CBase64Coding@@MEAAXXZ
	DQ	FLAT:??_ECBase64Coding@@UEAAPEAXI@Z
	DQ	FLAT:?Decode@CBase64Coding@@UEAAHAEBV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@AEAVCByteArray@@@Z
	DQ	FLAT:?Decode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z
	DQ	FLAT:?Encode@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z
	DQ	FLAT:?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z
	DQ	FLAT:?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z
	DQ	FLAT:?EncodeA@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z
	DQ	FLAT:?Encode2@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z
CONST	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?__get_character@@YAEPEBE0AEAHH@Z DD 05031c01H
	DD	09219031cH
	DD	05015H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$??_GCBase64Coding@@UEAAPEAXI@Z DD 025031301H
	DD	0b20e2313H
	DD	0500aH
xdata	ENDS
;	COMDAT voltbl
voltbl	SEGMENT
_volmd	DW	028H
	DW	032cH
voltbl	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?Encode2@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z DD 025062f19H
	DD	0119231eH
	DD	07012001cH
	DD	050106011H
	DD	imagerel __GSHandlerCheck
	DD	0d8H
xdata	ENDS
;	COMDAT voltbl
voltbl	SEGMENT
_volmd	DW	02dH
	DW	0313H
voltbl	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?EncodeA@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z DD 025063419H
	DD	011e2323H
	DD	07017001cH
	DD	050156016H
	DD	imagerel __GSHandlerCheck
	DD	0d8H
xdata	ENDS
;	COMDAT voltbl
voltbl	SEGMENT
_volmd	DW	02dH
	DW	0333H
voltbl	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?Encode@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z DD 025063419H
	DD	011e2323H
	DD	07017001cH
	DD	050156016H
	DD	imagerel __GSHandlerCheck
	DD	0d8H
xdata	ENDS
;	COMDAT voltbl
voltbl	SEGMENT
_volmd	DW	028H
	DW	037bH
voltbl	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z DD 025062f19H
	DD	0119231eH
	DD	07012001cH
	DD	050106011H
	DD	imagerel __GSHandlerCheck
	DD	0d8H
xdata	ENDS
;	COMDAT voltbl
voltbl	SEGMENT
_volmd	DW	028H
	DW	0377H
voltbl	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z DD 025062f19H
	DD	0119231eH
	DD	07012001cH
	DD	050106011H
	DD	imagerel __GSHandlerCheck
	DD	0d0H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?Decode@CBase64Coding@@UEAAHAEBV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@AEAVCByteArray@@@Z DD 025031c01H
	DD	0f217231cH
	DD	05010H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?Decode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z DD 025031c01H
	DD	0f217231cH
	DD	05010H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$??1CBase64Coding@@UEAA@XZ DD 05030d01H
	DD	0720a030dH
	DD	05006H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$??0CBase64Coding@@QEAA@XZ DD 05030d01H
	DD	0720a030dH
	DD	05006H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?m_InitializeDecoderTable@CBase64Coding@@MEAAXXZ DD 025030f01H
	DD	0b20a230fH
	DD	05006H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?SetLength@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z DD 025031301H
	DD	0b20e2313H
	DD	0500aH
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?Reallocate@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z DD 025031601H
	DD	0f2112316H
	DD	0500aH
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?PrepareWrite2@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z DD 025031301H
	DD	0d20e2313H
	DD	0500aH
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?PrepareWrite@?$CSimpleStringT@D$0A@@ATL@@AEAAPEADH@Z DD 025031301H
	DD	0d20e2313H
	DD	0500aH
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ DD 05030d01H
	DD	0720a030dH
	DD	05006H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?Fork@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z DD 025041601H
	DD	01112316H
	DD	0500a0012H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?Attach@?$CSimpleStringT@D$0A@@ATL@@AEAAXPEAUCStringData@2@@Z DD 025031401H
	DD	0b20f2314H
	DD	0500bH
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?ThrowMemoryException@?$CSimpleStringT@D$0A@@ATL@@KAXXZ DD 025030b01H
	DD	0b206230bH
	DD	05002H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$ip2state$?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z DB 02H
	DB	00H
	DB	00H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$cppxdata$?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z DB 040H
	DD	imagerel $ip2state$?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z DD 025031419H
	DD	0b20f2314H
	DD	0500bH
	DD	imagerel __CxxFrameHandler4
	DD	imagerel $cppxdata$?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?ReleaseBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAXH@Z DD 025031301H
	DD	0d20e2313H
	DD	0500aH
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?GetLength@?$CSimpleStringT@D$0A@@ATL@@QEBAHXZ DD 025030f01H
	DD	0b20a230fH
	DD	05006H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?GetBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAPEADH@Z DD 025031301H
	DD	0b20e2313H
	DD	0500aH
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$??B?$CSimpleStringT@D$0A@@ATL@@QEBAPEBDXZ DD 05030d01H
	DD	0720a030dH
	DD	05006H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?GetData@CByteArray@@QEBAPEBEXZ DD 05030d01H
	DD	0720a030dH
	DD	05006H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?SetAt@CByteArray@@QEAAX_JE@Z DD 025031901H
	DD	0b2142319H
	DD	05010H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?RemoveAll@CByteArray@@QEAAXXZ DD 025030f01H
	DD	0b20a230fH
	DD	05006H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?GetSize@CByteArray@@QEBA_JXZ DD 05030d01H
	DD	0720a030dH
	DD	05006H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?SetLength@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z DD 025031301H
	DD	0b20e2313H
	DD	0500aH
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?Reallocate@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z DD 025031601H
	DD	0f2112316H
	DD	0500aH
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?PrepareWrite2@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z DD 025031301H
	DD	0d20e2313H
	DD	0500aH
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?PrepareWrite@?$CSimpleStringT@_W$0A@@ATL@@AEAAPEA_WH@Z DD 025031301H
	DD	0d20e2313H
	DD	0500aH
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ DD 05030d01H
	DD	0720a030dH
	DD	05006H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?Fork@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z DD 025041601H
	DD	01112316H
	DD	0500a0012H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?Attach@?$CSimpleStringT@_W$0A@@ATL@@AEAAXPEAUCStringData@2@@Z DD 025031401H
	DD	0b20f2314H
	DD	0500bH
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?ThrowMemoryException@?$CSimpleStringT@_W$0A@@ATL@@KAXXZ DD 025030b01H
	DD	0b206230bH
	DD	05002H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$ip2state$?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z DB 02H
	DB	00H
	DB	00H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$cppxdata$?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z DB 040H
	DD	imagerel $ip2state$?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z DD 025031419H
	DD	0b20f2314H
	DD	0500bH
	DD	imagerel __CxxFrameHandler4
	DD	imagerel $cppxdata$?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z DD 025031301H
	DD	0d20e2313H
	DD	0500aH
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?GetBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAPEA_WH@Z DD 025031301H
	DD	0b20e2313H
	DD	0500aH
xdata	ENDS
;	COMDAT voltbl
voltbl	SEGMENT
_volmd	DB	01cH
voltbl	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?Release@CStringData@ATL@@QEAAXXZ DD 025030f01H
	DD	0d20a230fH
	DD	05006H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?IsShared@CStringData@ATL@@QEBA_NXZ DD 05030d01H
	DD	0920a030dH
	DD	05006H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?data@CStringData@ATL@@QEAAPEAXXZ DD 05030d01H
	DD	0720a030dH
	DD	05006H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?AtlThrowImpl@ATL@@YAXJ@Z DD 025030e01H
	DD	0b209230eH
	DD	05005H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$memcpy_s DD 025031e01H
	DD	0d219231eH
	DD	05015H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z DD 05031701H
	DD	072140317H
	DD	05010H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z DD 05031201H
	DD	0720f0312H
	DD	0500bH
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?__empty_global_delete@@YAXPEAX_K@Z DD 05031201H
	DD	0720f0312H
	DD	0500bH
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?__empty_global_delete@@YAXPEAX@Z DD 05030d01H
	DD	0720a030dH
	DD	05006H
xdata	ENDS
; Function compile flags: /Odtp /ZI
; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp
;	COMDAT ?__get_character@@YAEPEBE0AEAHH@Z
_TEXT	SEGMENT
return_value$ = 0
buffer$ = 96
decoder_table$ = 104
index$ = 112
size_of_buffer$ = 120
?__get_character@@YAEPEBE0AEAHH@Z PROC			; __get_character, COMDAT

; 41   : {

  00000	44 89 4c 24 20	 mov	 DWORD PTR [rsp+32], r9d
  00005	4c 89 44 24 18	 mov	 QWORD PTR [rsp+24], r8
  0000a	48 89 54 24 10	 mov	 QWORD PTR [rsp+16], rdx
  0000f	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00014	55		 push	 rbp
  00015	48 83 ec 50	 sub	 rsp, 80			; 00000050H
  00019	48 8b ec	 mov	 rbp, rsp

; 42   :    BYTE return_value = 0;

  0001c	c6 45 00 00	 mov	 BYTE PTR return_value$[rbp], 0
$LN4@get_charac:

; 43   : 
; 44   :    do
; 45   :    {
; 46   :       if ( index >= size_of_buffer )

  00020	48 8b 45 70	 mov	 rax, QWORD PTR index$[rbp]
  00024	8b 4d 78	 mov	 ecx, DWORD PTR size_of_buffer$[rbp]
  00027	39 08		 cmp	 DWORD PTR [rax], ecx
  00029	7c 04		 jl	 SHORT $LN5@get_charac

; 47   :       {
; 48   :          return( BASE64_END_OF_BUFFER );

  0002b	b0 fd		 mov	 al, 253			; 000000fdH
  0002d	eb 40		 jmp	 SHORT $LN1@get_charac
$LN5@get_charac:

; 49   :       }
; 50   : 
; 51   :       return_value = buffer[ index ];

  0002f	48 8b 45 70	 mov	 rax, QWORD PTR index$[rbp]
  00033	48 63 00	 movsxd	 rax, DWORD PTR [rax]
  00036	48 8b 4d 60	 mov	 rcx, QWORD PTR buffer$[rbp]
  0003a	0f b6 04 01	 movzx	 eax, BYTE PTR [rcx+rax]
  0003e	88 45 00	 mov	 BYTE PTR return_value$[rbp], al

; 52   :       index++;

  00041	48 8b 45 70	 mov	 rax, QWORD PTR index$[rbp]
  00045	8b 00		 mov	 eax, DWORD PTR [rax]
  00047	ff c0		 inc	 eax
  00049	48 8b 4d 70	 mov	 rcx, QWORD PTR index$[rbp]
  0004d	89 01		 mov	 DWORD PTR [rcx], eax

; 53   :    }
; 54   :    while( return_value != END_OF_BASE64_ENCODED_DATA &&

  0004f	0f b6 45 00	 movzx	 eax, BYTE PTR return_value$[rbp]
  00053	83 f8 3d	 cmp	 eax, 61			; 0000003dH
  00056	74 13		 je	 SHORT $LN6@get_charac
  00058	0f b6 45 00	 movzx	 eax, BYTE PTR return_value$[rbp]
  0005c	48 8b 4d 68	 mov	 rcx, QWORD PTR decoder_table$[rbp]
  00060	0f b6 04 01	 movzx	 eax, BYTE PTR [rcx+rax]
  00064	3d fe 00 00 00	 cmp	 eax, 254		; 000000feH
  00069	74 b5		 je	 SHORT $LN4@get_charac
$LN6@get_charac:

; 55   :           decoder_table[ return_value ] == BASE64_IGNORABLE_CHARACTER );
; 56   : 
; 57   :    return( return_value );

  0006b	0f b6 45 00	 movzx	 eax, BYTE PTR return_value$[rbp]
$LN1@get_charac:

; 58   : }

  0006f	48 8d 65 50	 lea	 rsp, QWORD PTR [rbp+80]
  00073	5d		 pop	 rbp
  00074	c3		 ret	 0
?__get_character@@YAEPEBE0AEAHH@Z ENDP			; __get_character
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
;	COMDAT ??_GCBase64Coding@@UEAAPEAXI@Z
_TEXT	SEGMENT
this$ = 80
__flags$ = 88
??_GCBase64Coding@@UEAAPEAXI@Z PROC			; CBase64Coding::`scalar deleting destructor', COMDAT
$LN4:
  00000	89 54 24 10	 mov	 DWORD PTR [rsp+16], edx
  00004	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00009	55		 push	 rbp
  0000a	48 83 ec 60	 sub	 rsp, 96			; 00000060H
  0000e	48 8d 6c 24 20	 lea	 rbp, QWORD PTR [rsp+32]
  00013	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  00017	e8 00 00 00 00	 call	 ??1CBase64Coding@@UEAA@XZ ; CBase64Coding::~CBase64Coding
  0001c	8b 45 58	 mov	 eax, DWORD PTR __flags$[rbp]
  0001f	83 e0 01	 and	 eax, 1
  00022	85 c0		 test	 eax, eax
  00024	74 0e		 je	 SHORT $LN2@scalar
  00026	ba 08 01 00 00	 mov	 edx, 264		; 00000108H
  0002b	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  0002f	e8 00 00 00 00	 call	 ??3@YAXPEAX_K@Z		; operator delete
$LN2@scalar:
  00034	48 8b 45 50	 mov	 rax, QWORD PTR this$[rbp]
  00038	48 8d 65 40	 lea	 rsp, QWORD PTR [rbp+64]
  0003c	5d		 pop	 rbp
  0003d	c3		 ret	 0
??_GCBase64Coding@@UEAAPEAXI@Z ENDP			; CBase64Coding::`scalar deleting destructor'
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp
;	COMDAT ?Encode2@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z
_TEXT	SEGMENT
alphabet$ = 0
loop_index$ = 80
number_of_bytes_to_encode$ = 84
byte_to_add$ = 88
byte_1$ = 89
byte_2$ = 90
byte_3$ = 91
input_buffer$ = 96
number_of_bytes_encoded$ = 104
destination$ = 112
__$ArrayPad$ = 184
this$ = 224
source$ = 232
destination_string$ = 240
?Encode2@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z PROC ; CBase64Coding::Encode2, COMDAT

; 980  : {

$LN9:
  00000	4c 89 44 24 18	 mov	 QWORD PTR [rsp+24], r8
  00005	48 89 54 24 10	 mov	 QWORD PTR [rsp+16], rdx
  0000a	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  0000f	55		 push	 rbp
  00010	56		 push	 rsi
  00011	57		 push	 rdi
  00012	48 81 ec e0 00
	00 00		 sub	 rsp, 224		; 000000e0H
  00019	48 8d 6c 24 20	 lea	 rbp, QWORD PTR [rsp+32]
  0001e	48 8b 05 00 00
	00 00		 mov	 rax, QWORD PTR __security_cookie
  00025	48 33 c5	 xor	 rax, rbp
  00028	48 89 85 b8 00
	00 00		 mov	 QWORD PTR __$ArrayPad$[rbp], rax

; 981  : 
; 982  :    const char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

  0002f	48 8d 45 00	 lea	 rax, QWORD PTR alphabet$[rbp]
  00033	48 8d 0d 00 00
	00 00		 lea	 rcx, OFFSET FLAT:??_C@_0EB@NFPJKBDG@ABCDEFGHIJKLMNOPQRSTUVWXYZabcde@
  0003a	48 8b f8	 mov	 rdi, rax
  0003d	48 8b f1	 mov	 rsi, rcx
  00040	b9 41 00 00 00	 mov	 ecx, 65			; 00000041H
  00045	f3 a4		 rep movsb

; 983  : 
; 984  :    int loop_index                = 0;

  00047	c7 45 50 00 00
	00 00		 mov	 DWORD PTR loop_index$[rbp], 0

; 985  :    int number_of_bytes_to_encode = (int)source.GetSize();

  0004e	48 8b 8d e8 00
	00 00		 mov	 rcx, QWORD PTR source$[rbp]
  00055	e8 00 00 00 00	 call	 ?GetSize@CByteArray@@QEBA_JXZ ; CByteArray::GetSize
  0005a	89 45 54	 mov	 DWORD PTR number_of_bytes_to_encode$[rbp], eax

; 986  : 
; 987  :    BYTE byte_to_add = 0;

  0005d	c6 45 58 00	 mov	 BYTE PTR byte_to_add$[rbp], 0

; 988  :    BYTE byte_1      = 0;

  00061	c6 45 59 00	 mov	 BYTE PTR byte_1$[rbp], 0

; 989  :    BYTE byte_2      = 0;

  00065	c6 45 5a 00	 mov	 BYTE PTR byte_2$[rbp], 0

; 990  :    BYTE byte_3      = 0;

  00069	c6 45 5b 00	 mov	 BYTE PTR byte_3$[rbp], 0

; 991  : 
; 992  :    const BYTE * input_buffer = source.GetData();

  0006d	48 8b 8d e8 00
	00 00		 mov	 rcx, QWORD PTR source$[rbp]
  00074	e8 00 00 00 00	 call	 ?GetData@CByteArray@@QEBAPEBEXZ ; CByteArray::GetData
  00079	48 89 45 60	 mov	 QWORD PTR input_buffer$[rbp], rax

; 993  : 
; 994  :    DWORD number_of_bytes_encoded = (DWORD) ( (double) number_of_bytes_to_encode / (double) 0.75 ) + 1;

  0007d	f2 0f 2a 45 54	 cvtsi2sd xmm0, DWORD PTR number_of_bytes_to_encode$[rbp]
  00082	f2 0f 5e 05 00
	00 00 00	 divsd	 xmm0, QWORD PTR __real@3fe8000000000000
  0008a	f2 48 0f 2c c0	 cvttsd2si rax, xmm0
  0008f	ff c0		 inc	 eax
  00091	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 995  : 
; 996  :    // Now add in the CR/LF pairs, each line is truncated at 72 characters
; 997  : 
; 998  :    // 2000-05-12
; 999  :    // Thanks go to Ilia Golubev (ilia@varicom.co.il) for finding a bug here.
; 1000 :    // I was using number_of_bytes_to_encode rather than number_of_bytes_encoded.
; 1001 : 
; 1002 :    number_of_bytes_encoded+=2;

  00094	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  00097	83 c0 02	 add	 eax, 2
  0009a	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 1003 : //   number_of_bytes_encoded += (DWORD)( ( ( number_of_bytes_encoded / BASE64_NUMBER_OF_CHARACTERS_PER_LINE ) + 1 ) * 2 );
; 1004 : 
; 1005 :    LPTSTR destination = destination_string.GetBuffer( number_of_bytes_encoded );

  0009d	8b 55 68	 mov	 edx, DWORD PTR number_of_bytes_encoded$[rbp]
  000a0	48 8b 8d f0 00
	00 00		 mov	 rcx, QWORD PTR destination_string$[rbp]
  000a7	e8 00 00 00 00	 call	 ?GetBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAPEA_WH@Z ; ATL::CSimpleStringT<wchar_t,0>::GetBuffer
  000ac	48 89 45 70	 mov	 QWORD PTR destination$[rbp], rax

; 1006 : 
; 1007 :    number_of_bytes_encoded = 0;

  000b0	c7 45 68 00 00
	00 00		 mov	 DWORD PTR number_of_bytes_encoded$[rbp], 0
$LN2@Encode2:

; 1008 : 
; 1009 :    while( loop_index < number_of_bytes_to_encode )

  000b7	8b 45 54	 mov	 eax, DWORD PTR number_of_bytes_to_encode$[rbp]
  000ba	39 45 50	 cmp	 DWORD PTR loop_index$[rbp], eax
  000bd	0f 8d 32 02 00
	00		 jge	 $LN3@Encode2

; 1010 :    {
; 1011 :       // Output the first byte
; 1012 : 
; 1013 :       byte_1 = input_buffer[ loop_index ];

  000c3	48 63 45 50	 movsxd	 rax, DWORD PTR loop_index$[rbp]
  000c7	48 8b 4d 60	 mov	 rcx, QWORD PTR input_buffer$[rbp]
  000cb	0f b6 04 01	 movzx	 eax, BYTE PTR [rcx+rax]
  000cf	88 45 59	 mov	 BYTE PTR byte_1$[rbp], al

; 1014 :       byte_to_add = alphabet[ ( byte_1 >> 2 ) ];

  000d2	0f b6 45 59	 movzx	 eax, BYTE PTR byte_1$[rbp]
  000d6	c1 f8 02	 sar	 eax, 2
  000d9	48 98		 cdqe
  000db	0f b6 44 05 00	 movzx	 eax, BYTE PTR alphabet$[rbp+rax]
  000e0	88 45 58	 mov	 BYTE PTR byte_to_add$[rbp], al

; 1015 : 
; 1016 :       destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add );

  000e3	0f b6 45 58	 movzx	 eax, BYTE PTR byte_to_add$[rbp]
  000e7	8b 4d 68	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rbp]
  000ea	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  000ee	66 89 04 4a	 mov	 WORD PTR [rdx+rcx*2], ax

; 1017 :       number_of_bytes_encoded++;

  000f2	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  000f5	ff c0		 inc	 eax
  000f7	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 1018 : 
; 1019 :       loop_index++;

  000fa	8b 45 50	 mov	 eax, DWORD PTR loop_index$[rbp]
  000fd	ff c0		 inc	 eax
  000ff	89 45 50	 mov	 DWORD PTR loop_index$[rbp], eax

; 1020 : 
; 1021 :       if ( loop_index >= number_of_bytes_to_encode )

  00102	8b 45 54	 mov	 eax, DWORD PTR number_of_bytes_to_encode$[rbp]
  00105	39 45 50	 cmp	 DWORD PTR loop_index$[rbp], eax
  00108	0f 8c 94 00 00
	00		 jl	 $LN4@Encode2

; 1022 :       {
; 1023 :          // We're at the end of the data to encode
; 1024 : 
; 1025 :          byte_2 = 0;

  0010e	c6 45 5a 00	 mov	 BYTE PTR byte_2$[rbp], 0

; 1026 :          byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ];

  00112	0f b6 45 59	 movzx	 eax, BYTE PTR byte_1$[rbp]
  00116	83 e0 03	 and	 eax, 3
  00119	c1 e0 04	 shl	 eax, 4
  0011c	0f b6 4d 5a	 movzx	 ecx, BYTE PTR byte_2$[rbp]
  00120	81 e1 f0 00 00
	00		 and	 ecx, 240		; 000000f0H
  00126	c1 f9 04	 sar	 ecx, 4
  00129	0b c1		 or	 eax, ecx
  0012b	48 98		 cdqe
  0012d	0f b6 44 05 00	 movzx	 eax, BYTE PTR alphabet$[rbp+rax]
  00132	88 45 58	 mov	 BYTE PTR byte_to_add$[rbp], al

; 1027 : 
; 1028 :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add );

  00135	0f b6 45 58	 movzx	 eax, BYTE PTR byte_to_add$[rbp]
  00139	8b 4d 68	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rbp]
  0013c	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  00140	66 89 04 4a	 mov	 WORD PTR [rdx+rcx*2], ax

; 1029 :          number_of_bytes_encoded++;

  00144	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  00147	ff c0		 inc	 eax
  00149	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 1030 : 
; 1031 :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA );

  0014c	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  0014f	b9 3d 00 00 00	 mov	 ecx, 61			; 0000003dH
  00154	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  00158	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 1032 :          number_of_bytes_encoded++;

  0015c	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  0015f	ff c0		 inc	 eax
  00161	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 1033 : 
; 1034 :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA );

  00164	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  00167	b9 3d 00 00 00	 mov	 ecx, 61			; 0000003dH
  0016c	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  00170	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 1035 : 
; 1036 :          // 1999-09-01
; 1037 :          // Thanks go to Yurong Lin (ylin@dial.pipex.com) for finding a bug here.
; 1038 :          // We must NULL terminate the string before letting CString have the buffer back.
; 1039 : 
; 1040 :          destination[ number_of_bytes_encoded + 1 ] = 0;

  00174	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  00177	ff c0		 inc	 eax
  00179	8b c0		 mov	 eax, eax
  0017b	33 c9		 xor	 ecx, ecx
  0017d	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  00181	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 1041 : 
; 1042 :          destination_string.ReleaseBuffer( -1 );

  00185	ba ff ff ff ff	 mov	 edx, -1
  0018a	48 8b 8d f0 00
	00 00		 mov	 rcx, QWORD PTR destination_string$[rbp]
  00191	e8 00 00 00 00	 call	 ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer

; 1043 : 
; 1044 :          return( TRUE );

  00196	b8 01 00 00 00	 mov	 eax, 1
  0019b	e9 8c 01 00 00	 jmp	 $LN1@Encode2

; 1045 :       }

  001a0	eb 0f		 jmp	 SHORT $LN5@Encode2
$LN4@Encode2:

; 1046 :       else
; 1047 :       {
; 1048 :          byte_2 = input_buffer[ loop_index ];

  001a2	48 63 45 50	 movsxd	 rax, DWORD PTR loop_index$[rbp]
  001a6	48 8b 4d 60	 mov	 rcx, QWORD PTR input_buffer$[rbp]
  001aa	0f b6 04 01	 movzx	 eax, BYTE PTR [rcx+rax]
  001ae	88 45 5a	 mov	 BYTE PTR byte_2$[rbp], al
$LN5@Encode2:

; 1049 :       }
; 1050 : 
; 1051 :       byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ];

  001b1	0f b6 45 59	 movzx	 eax, BYTE PTR byte_1$[rbp]
  001b5	83 e0 03	 and	 eax, 3
  001b8	c1 e0 04	 shl	 eax, 4
  001bb	0f b6 4d 5a	 movzx	 ecx, BYTE PTR byte_2$[rbp]
  001bf	81 e1 f0 00 00
	00		 and	 ecx, 240		; 000000f0H
  001c5	c1 f9 04	 sar	 ecx, 4
  001c8	0b c1		 or	 eax, ecx
  001ca	48 98		 cdqe
  001cc	0f b6 44 05 00	 movzx	 eax, BYTE PTR alphabet$[rbp+rax]
  001d1	88 45 58	 mov	 BYTE PTR byte_to_add$[rbp], al

; 1052 : 
; 1053 :       destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add );

  001d4	0f b6 45 58	 movzx	 eax, BYTE PTR byte_to_add$[rbp]
  001d8	8b 4d 68	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rbp]
  001db	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  001df	66 89 04 4a	 mov	 WORD PTR [rdx+rcx*2], ax

; 1054 :       number_of_bytes_encoded++;

  001e3	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  001e6	ff c0		 inc	 eax
  001e8	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 1055 : 
; 1056 :       loop_index++;

  001eb	8b 45 50	 mov	 eax, DWORD PTR loop_index$[rbp]
  001ee	ff c0		 inc	 eax
  001f0	89 45 50	 mov	 DWORD PTR loop_index$[rbp], eax

; 1057 : 
; 1058 :       if ( loop_index >= number_of_bytes_to_encode )

  001f3	8b 45 54	 mov	 eax, DWORD PTR number_of_bytes_to_encode$[rbp]
  001f6	39 45 50	 cmp	 DWORD PTR loop_index$[rbp], eax
  001f9	7c 7c		 jl	 SHORT $LN6@Encode2

; 1059 :       {
; 1060 :          // We ran out of bytes, we need to add the last half of byte_2 and pad
; 1061 :          byte_3 = 0;

  001fb	c6 45 5b 00	 mov	 BYTE PTR byte_3$[rbp], 0

; 1062 : 
; 1063 :          byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ];

  001ff	0f b6 45 5a	 movzx	 eax, BYTE PTR byte_2$[rbp]
  00203	83 e0 0f	 and	 eax, 15
  00206	c1 e0 02	 shl	 eax, 2
  00209	0f b6 4d 5b	 movzx	 ecx, BYTE PTR byte_3$[rbp]
  0020d	81 e1 c0 00 00
	00		 and	 ecx, 192		; 000000c0H
  00213	c1 f9 06	 sar	 ecx, 6
  00216	0b c1		 or	 eax, ecx
  00218	48 98		 cdqe
  0021a	0f b6 44 05 00	 movzx	 eax, BYTE PTR alphabet$[rbp+rax]
  0021f	88 45 58	 mov	 BYTE PTR byte_to_add$[rbp], al

; 1064 : 
; 1065 :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add );

  00222	0f b6 45 58	 movzx	 eax, BYTE PTR byte_to_add$[rbp]
  00226	8b 4d 68	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rbp]
  00229	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  0022d	66 89 04 4a	 mov	 WORD PTR [rdx+rcx*2], ax

; 1066 :          number_of_bytes_encoded++;

  00231	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  00234	ff c0		 inc	 eax
  00236	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 1067 : 
; 1068 :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA );

  00239	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  0023c	b9 3d 00 00 00	 mov	 ecx, 61			; 0000003dH
  00241	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  00245	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 1069 : 
; 1070 :          // 1999-09-01
; 1071 :          // Thanks go to Yurong Lin (ylin@dial.pipex.com) for finding a bug here.
; 1072 :          // We must NULL terminate the string before letting CString have the buffer back.
; 1073 : 
; 1074 :          destination[ number_of_bytes_encoded + 1 ] = 0;

  00249	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  0024c	ff c0		 inc	 eax
  0024e	8b c0		 mov	 eax, eax
  00250	33 c9		 xor	 ecx, ecx
  00252	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  00256	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 1075 : 
; 1076 :          destination_string.ReleaseBuffer( -1 );

  0025a	ba ff ff ff ff	 mov	 edx, -1
  0025f	48 8b 8d f0 00
	00 00		 mov	 rcx, QWORD PTR destination_string$[rbp]
  00266	e8 00 00 00 00	 call	 ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer

; 1077 : 
; 1078 :          return( TRUE );

  0026b	b8 01 00 00 00	 mov	 eax, 1
  00270	e9 b7 00 00 00	 jmp	 $LN1@Encode2

; 1079 :       }

  00275	eb 0f		 jmp	 SHORT $LN7@Encode2
$LN6@Encode2:

; 1080 :       else
; 1081 :       {
; 1082 :          byte_3 = input_buffer[ loop_index ];

  00277	48 63 45 50	 movsxd	 rax, DWORD PTR loop_index$[rbp]
  0027b	48 8b 4d 60	 mov	 rcx, QWORD PTR input_buffer$[rbp]
  0027f	0f b6 04 01	 movzx	 eax, BYTE PTR [rcx+rax]
  00283	88 45 5b	 mov	 BYTE PTR byte_3$[rbp], al
$LN7@Encode2:

; 1083 :       }
; 1084 : 
; 1085 :       loop_index++;

  00286	8b 45 50	 mov	 eax, DWORD PTR loop_index$[rbp]
  00289	ff c0		 inc	 eax
  0028b	89 45 50	 mov	 DWORD PTR loop_index$[rbp], eax

; 1086 : 
; 1087 :       byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ];

  0028e	0f b6 45 5a	 movzx	 eax, BYTE PTR byte_2$[rbp]
  00292	83 e0 0f	 and	 eax, 15
  00295	c1 e0 02	 shl	 eax, 2
  00298	0f b6 4d 5b	 movzx	 ecx, BYTE PTR byte_3$[rbp]
  0029c	81 e1 c0 00 00
	00		 and	 ecx, 192		; 000000c0H
  002a2	c1 f9 06	 sar	 ecx, 6
  002a5	0b c1		 or	 eax, ecx
  002a7	48 98		 cdqe
  002a9	0f b6 44 05 00	 movzx	 eax, BYTE PTR alphabet$[rbp+rax]
  002ae	88 45 58	 mov	 BYTE PTR byte_to_add$[rbp], al

; 1088 : 
; 1089 :       destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add );

  002b1	0f b6 45 58	 movzx	 eax, BYTE PTR byte_to_add$[rbp]
  002b5	8b 4d 68	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rbp]
  002b8	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  002bc	66 89 04 4a	 mov	 WORD PTR [rdx+rcx*2], ax

; 1090 :       number_of_bytes_encoded++;

  002c0	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  002c3	ff c0		 inc	 eax
  002c5	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 1091 : 
; 1092 :       byte_to_add = alphabet[ ( byte_3 & 0x3F ) ];

  002c8	0f b6 45 5b	 movzx	 eax, BYTE PTR byte_3$[rbp]
  002cc	83 e0 3f	 and	 eax, 63			; 0000003fH
  002cf	48 98		 cdqe
  002d1	0f b6 44 05 00	 movzx	 eax, BYTE PTR alphabet$[rbp+rax]
  002d6	88 45 58	 mov	 BYTE PTR byte_to_add$[rbp], al

; 1093 : 
; 1094 :       destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add );

  002d9	0f b6 45 58	 movzx	 eax, BYTE PTR byte_to_add$[rbp]
  002dd	8b 4d 68	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rbp]
  002e0	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  002e4	66 89 04 4a	 mov	 WORD PTR [rdx+rcx*2], ax

; 1095 :       number_of_bytes_encoded++;

  002e8	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  002eb	ff c0		 inc	 eax
  002ed	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 1096 : 
; 1097 : //      if ( ( number_of_bytes_encoded % BASE64_NUMBER_OF_CHARACTERS_PER_LINE ) == 0 )
; 1098 : //      {
; 1099 : //         destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( CARRIAGE_RETURN );
; 1100 : //         number_of_bytes_encoded++;
; 1101 : //
; 1102 : //         destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( LINE_FEED );
; 1103 : //         number_of_bytes_encoded++;
; 1104 :  //     }
; 1105 :    }

  002f0	e9 c2 fd ff ff	 jmp	 $LN2@Encode2
$LN3@Encode2:

; 1106 : 
; 1107 :    destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA );

  002f5	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  002f8	b9 3d 00 00 00	 mov	 ecx, 61			; 0000003dH
  002fd	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  00301	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 1108 : 
; 1109 :    // 1999-09-01
; 1110 :    // Thanks go to Yurong Lin (ylin@dial.pipex.com) for finding a bug here.
; 1111 :    // We must NULL terminate the string before letting CString have the buffer back.
; 1112 : 
; 1113 :    destination[ number_of_bytes_encoded + 1 ] = 0;

  00305	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  00308	ff c0		 inc	 eax
  0030a	8b c0		 mov	 eax, eax
  0030c	33 c9		 xor	 ecx, ecx
  0030e	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  00312	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 1114 : 
; 1115 :    destination_string.ReleaseBuffer( -1 );

  00316	ba ff ff ff ff	 mov	 edx, -1
  0031b	48 8b 8d f0 00
	00 00		 mov	 rcx, QWORD PTR destination_string$[rbp]
  00322	e8 00 00 00 00	 call	 ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer

; 1116 : 
; 1117 :    return( TRUE );

  00327	b8 01 00 00 00	 mov	 eax, 1
$LN1@Encode2:

; 1118 : }

  0032c	48 8b 8d b8 00
	00 00		 mov	 rcx, QWORD PTR __$ArrayPad$[rbp]
  00333	48 33 cd	 xor	 rcx, rbp
  00336	e8 00 00 00 00	 call	 __security_check_cookie
  0033b	48 8d a5 c0 00
	00 00		 lea	 rsp, QWORD PTR [rbp+192]
  00342	5f		 pop	 rdi
  00343	5e		 pop	 rsi
  00344	5d		 pop	 rbp
  00345	c3		 ret	 0
?Encode2@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z ENDP ; CBase64Coding::Encode2
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp
;	COMDAT ?EncodeA@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z
_TEXT	SEGMENT
alphabet$ = 0
loop_index$ = 80
number_of_bytes_to_encode$ = 84
byte_to_add$ = 88
byte_1$ = 89
byte_2$ = 90
byte_3$ = 91
input_buffer$ = 96
number_of_bytes_encoded$ = 104
destination$ = 112
__$ArrayPad$ = 184
this$ = 224
pSource$ = 232
lSource$ = 240
destination_string$ = 248
?EncodeA@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z PROC ; CBase64Coding::EncodeA, COMDAT

; 837  : {

$LN9:
  00000	4c 89 4c 24 20	 mov	 QWORD PTR [rsp+32], r9
  00005	44 89 44 24 18	 mov	 DWORD PTR [rsp+24], r8d
  0000a	48 89 54 24 10	 mov	 QWORD PTR [rsp+16], rdx
  0000f	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00014	55		 push	 rbp
  00015	56		 push	 rsi
  00016	57		 push	 rdi
  00017	48 81 ec e0 00
	00 00		 sub	 rsp, 224		; 000000e0H
  0001e	48 8d 6c 24 20	 lea	 rbp, QWORD PTR [rsp+32]
  00023	48 8b 05 00 00
	00 00		 mov	 rax, QWORD PTR __security_cookie
  0002a	48 33 c5	 xor	 rax, rbp
  0002d	48 89 85 b8 00
	00 00		 mov	 QWORD PTR __$ArrayPad$[rbp], rax

; 838  : 
; 839  :    const char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

  00034	48 8d 45 00	 lea	 rax, QWORD PTR alphabet$[rbp]
  00038	48 8d 0d 00 00
	00 00		 lea	 rcx, OFFSET FLAT:??_C@_0EB@NFPJKBDG@ABCDEFGHIJKLMNOPQRSTUVWXYZabcde@
  0003f	48 8b f8	 mov	 rdi, rax
  00042	48 8b f1	 mov	 rsi, rcx
  00045	b9 41 00 00 00	 mov	 ecx, 65			; 00000041H
  0004a	f3 a4		 rep movsb

; 840  : 
; 841  :    int loop_index                = 0;

  0004c	c7 45 50 00 00
	00 00		 mov	 DWORD PTR loop_index$[rbp], 0

; 842  :    int number_of_bytes_to_encode = lSource;

  00053	8b 85 f0 00 00
	00		 mov	 eax, DWORD PTR lSource$[rbp]
  00059	89 45 54	 mov	 DWORD PTR number_of_bytes_to_encode$[rbp], eax

; 843  : 
; 844  :    BYTE byte_to_add = 0;

  0005c	c6 45 58 00	 mov	 BYTE PTR byte_to_add$[rbp], 0

; 845  :    BYTE byte_1      = 0;

  00060	c6 45 59 00	 mov	 BYTE PTR byte_1$[rbp], 0

; 846  :    BYTE byte_2      = 0;

  00064	c6 45 5a 00	 mov	 BYTE PTR byte_2$[rbp], 0

; 847  :    BYTE byte_3      = 0;

  00068	c6 45 5b 00	 mov	 BYTE PTR byte_3$[rbp], 0

; 848  : 
; 849  :    const BYTE * input_buffer = pSource;

  0006c	48 8b 85 e8 00
	00 00		 mov	 rax, QWORD PTR pSource$[rbp]
  00073	48 89 45 60	 mov	 QWORD PTR input_buffer$[rbp], rax

; 850  : 
; 851  :    DWORD number_of_bytes_encoded = (DWORD) ( (double) number_of_bytes_to_encode / (double) 0.75 ) + 1;

  00077	f2 0f 2a 45 54	 cvtsi2sd xmm0, DWORD PTR number_of_bytes_to_encode$[rbp]
  0007c	f2 0f 5e 05 00
	00 00 00	 divsd	 xmm0, QWORD PTR __real@3fe8000000000000
  00084	f2 48 0f 2c c0	 cvttsd2si rax, xmm0
  00089	ff c0		 inc	 eax
  0008b	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 852  : 
; 853  :    // Now add in the CR/LF pairs, each line is truncated at 72 characters
; 854  : 
; 855  :    // 2000-05-12
; 856  :    // Thanks go to Ilia Golubev (ilia@varicom.co.il) for finding a bug here.
; 857  :    // I was using number_of_bytes_to_encode rather than number_of_bytes_encoded.
; 858  : 
; 859  :    number_of_bytes_encoded += (DWORD)( ( ( number_of_bytes_encoded / BASE64_NUMBER_OF_CHARACTERS_PER_LINE ) + 1 ) * 2 );

  0008e	33 d2		 xor	 edx, edx
  00090	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  00093	b9 48 00 00 00	 mov	 ecx, 72			; 00000048H
  00098	f7 f1		 div	 ecx
  0009a	8b 4d 68	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rbp]
  0009d	8d 44 41 02	 lea	 eax, DWORD PTR [rcx+rax*2+2]
  000a1	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 860  : 
; 861  :    char * destination = destination_string.GetBuffer( number_of_bytes_encoded );

  000a4	8b 55 68	 mov	 edx, DWORD PTR number_of_bytes_encoded$[rbp]
  000a7	48 8b 8d f8 00
	00 00		 mov	 rcx, QWORD PTR destination_string$[rbp]
  000ae	e8 00 00 00 00	 call	 ?GetBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAPEADH@Z ; ATL::CSimpleStringT<char,0>::GetBuffer
  000b3	48 89 45 70	 mov	 QWORD PTR destination$[rbp], rax

; 862  : 
; 863  :    number_of_bytes_encoded = 0;

  000b7	c7 45 68 00 00
	00 00		 mov	 DWORD PTR number_of_bytes_encoded$[rbp], 0
$LN2@EncodeA:

; 864  : 
; 865  :    while( loop_index < number_of_bytes_to_encode )

  000be	8b 45 54	 mov	 eax, DWORD PTR number_of_bytes_to_encode$[rbp]
  000c1	39 45 50	 cmp	 DWORD PTR loop_index$[rbp], eax
  000c4	0f 8d 19 02 00
	00		 jge	 $LN3@EncodeA

; 866  :    {
; 867  :       // Output the first byte
; 868  : 
; 869  :       byte_1 = input_buffer[ loop_index ];

  000ca	48 63 45 50	 movsxd	 rax, DWORD PTR loop_index$[rbp]
  000ce	48 8b 4d 60	 mov	 rcx, QWORD PTR input_buffer$[rbp]
  000d2	0f b6 04 01	 movzx	 eax, BYTE PTR [rcx+rax]
  000d6	88 45 59	 mov	 BYTE PTR byte_1$[rbp], al

; 870  :       byte_to_add = alphabet[ ( byte_1 >> 2 ) ];

  000d9	0f b6 45 59	 movzx	 eax, BYTE PTR byte_1$[rbp]
  000dd	c1 f8 02	 sar	 eax, 2
  000e0	48 98		 cdqe
  000e2	0f b6 44 05 00	 movzx	 eax, BYTE PTR alphabet$[rbp+rax]
  000e7	88 45 58	 mov	 BYTE PTR byte_to_add$[rbp], al

; 871  : 
; 872  :       destination[ number_of_bytes_encoded ] = static_cast< char >( byte_to_add );

  000ea	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  000ed	48 8b 4d 70	 mov	 rcx, QWORD PTR destination$[rbp]
  000f1	0f b6 55 58	 movzx	 edx, BYTE PTR byte_to_add$[rbp]
  000f5	88 14 01	 mov	 BYTE PTR [rcx+rax], dl

; 873  :       number_of_bytes_encoded++;

  000f8	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  000fb	ff c0		 inc	 eax
  000fd	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 874  : 
; 875  :       loop_index++;

  00100	8b 45 50	 mov	 eax, DWORD PTR loop_index$[rbp]
  00103	ff c0		 inc	 eax
  00105	89 45 50	 mov	 DWORD PTR loop_index$[rbp], eax

; 876  : 
; 877  :       if ( loop_index >= number_of_bytes_to_encode )

  00108	8b 45 54	 mov	 eax, DWORD PTR number_of_bytes_to_encode$[rbp]
  0010b	39 45 50	 cmp	 DWORD PTR loop_index$[rbp], eax
  0010e	0f 8c 87 00 00
	00		 jl	 $LN4@EncodeA

; 878  :       {
; 879  :          // We're at the end of the data to encode
; 880  : 
; 881  :          byte_2 = 0;

  00114	c6 45 5a 00	 mov	 BYTE PTR byte_2$[rbp], 0

; 882  :          byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ];

  00118	0f b6 45 59	 movzx	 eax, BYTE PTR byte_1$[rbp]
  0011c	83 e0 03	 and	 eax, 3
  0011f	c1 e0 04	 shl	 eax, 4
  00122	0f b6 4d 5a	 movzx	 ecx, BYTE PTR byte_2$[rbp]
  00126	81 e1 f0 00 00
	00		 and	 ecx, 240		; 000000f0H
  0012c	c1 f9 04	 sar	 ecx, 4
  0012f	0b c1		 or	 eax, ecx
  00131	48 98		 cdqe
  00133	0f b6 44 05 00	 movzx	 eax, BYTE PTR alphabet$[rbp+rax]
  00138	88 45 58	 mov	 BYTE PTR byte_to_add$[rbp], al

; 883  : 
; 884  :          destination[ number_of_bytes_encoded ] = static_cast< char >( byte_to_add );

  0013b	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  0013e	48 8b 4d 70	 mov	 rcx, QWORD PTR destination$[rbp]
  00142	0f b6 55 58	 movzx	 edx, BYTE PTR byte_to_add$[rbp]
  00146	88 14 01	 mov	 BYTE PTR [rcx+rax], dl

; 885  :          number_of_bytes_encoded++;

  00149	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  0014c	ff c0		 inc	 eax
  0014e	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 886  : 
; 887  :          destination[ number_of_bytes_encoded ] = static_cast< char >( END_OF_BASE64_ENCODED_DATA );

  00151	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  00154	48 8b 4d 70	 mov	 rcx, QWORD PTR destination$[rbp]
  00158	c6 04 01 3d	 mov	 BYTE PTR [rcx+rax], 61	; 0000003dH

; 888  :          number_of_bytes_encoded++;

  0015c	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  0015f	ff c0		 inc	 eax
  00161	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 889  : 
; 890  :          destination[ number_of_bytes_encoded ] = static_cast< char >( END_OF_BASE64_ENCODED_DATA );

  00164	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  00167	48 8b 4d 70	 mov	 rcx, QWORD PTR destination$[rbp]
  0016b	c6 04 01 3d	 mov	 BYTE PTR [rcx+rax], 61	; 0000003dH

; 891  : 
; 892  :          // 1999-09-01
; 893  :          // Thanks go to Yurong Lin (ylin@dial.pipex.com) for finding a bug here.
; 894  :          // We must NULL terminate the string before letting CString have the buffer back.
; 895  : 
; 896  :          destination[ number_of_bytes_encoded + 1 ] = 0;

  0016f	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  00172	ff c0		 inc	 eax
  00174	8b c0		 mov	 eax, eax
  00176	48 8b 4d 70	 mov	 rcx, QWORD PTR destination$[rbp]
  0017a	c6 04 01 00	 mov	 BYTE PTR [rcx+rax], 0

; 897  : 
; 898  :          destination_string.ReleaseBuffer( -1 );

  0017e	ba ff ff ff ff	 mov	 edx, -1
  00183	48 8b 8d f8 00
	00 00		 mov	 rcx, QWORD PTR destination_string$[rbp]
  0018a	e8 00 00 00 00	 call	 ?ReleaseBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<char,0>::ReleaseBuffer

; 899  : 
; 900  :          return( TRUE );

  0018f	b8 01 00 00 00	 mov	 eax, 1
  00194	e9 7a 01 00 00	 jmp	 $LN1@EncodeA

; 901  :       }

  00199	eb 0f		 jmp	 SHORT $LN5@EncodeA
$LN4@EncodeA:

; 902  :       else
; 903  :       {
; 904  :          byte_2 = input_buffer[ loop_index ];

  0019b	48 63 45 50	 movsxd	 rax, DWORD PTR loop_index$[rbp]
  0019f	48 8b 4d 60	 mov	 rcx, QWORD PTR input_buffer$[rbp]
  001a3	0f b6 04 01	 movzx	 eax, BYTE PTR [rcx+rax]
  001a7	88 45 5a	 mov	 BYTE PTR byte_2$[rbp], al
$LN5@EncodeA:

; 905  :       }
; 906  : 
; 907  :       byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ];

  001aa	0f b6 45 59	 movzx	 eax, BYTE PTR byte_1$[rbp]
  001ae	83 e0 03	 and	 eax, 3
  001b1	c1 e0 04	 shl	 eax, 4
  001b4	0f b6 4d 5a	 movzx	 ecx, BYTE PTR byte_2$[rbp]
  001b8	81 e1 f0 00 00
	00		 and	 ecx, 240		; 000000f0H
  001be	c1 f9 04	 sar	 ecx, 4
  001c1	0b c1		 or	 eax, ecx
  001c3	48 98		 cdqe
  001c5	0f b6 44 05 00	 movzx	 eax, BYTE PTR alphabet$[rbp+rax]
  001ca	88 45 58	 mov	 BYTE PTR byte_to_add$[rbp], al

; 908  : 
; 909  :       destination[ number_of_bytes_encoded ] = static_cast< char >( byte_to_add );

  001cd	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  001d0	48 8b 4d 70	 mov	 rcx, QWORD PTR destination$[rbp]
  001d4	0f b6 55 58	 movzx	 edx, BYTE PTR byte_to_add$[rbp]
  001d8	88 14 01	 mov	 BYTE PTR [rcx+rax], dl

; 910  :       number_of_bytes_encoded++;

  001db	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  001de	ff c0		 inc	 eax
  001e0	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 911  : 
; 912  :       loop_index++;

  001e3	8b 45 50	 mov	 eax, DWORD PTR loop_index$[rbp]
  001e6	ff c0		 inc	 eax
  001e8	89 45 50	 mov	 DWORD PTR loop_index$[rbp], eax

; 913  : 
; 914  :       if ( loop_index >= number_of_bytes_to_encode )

  001eb	8b 45 54	 mov	 eax, DWORD PTR number_of_bytes_to_encode$[rbp]
  001ee	39 45 50	 cmp	 DWORD PTR loop_index$[rbp], eax
  001f1	7c 74		 jl	 SHORT $LN6@EncodeA

; 915  :       {
; 916  :          // We ran out of bytes, we need to add the last half of byte_2 and pad
; 917  :          byte_3 = 0;

  001f3	c6 45 5b 00	 mov	 BYTE PTR byte_3$[rbp], 0

; 918  : 
; 919  :          byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ];

  001f7	0f b6 45 5a	 movzx	 eax, BYTE PTR byte_2$[rbp]
  001fb	83 e0 0f	 and	 eax, 15
  001fe	c1 e0 02	 shl	 eax, 2
  00201	0f b6 4d 5b	 movzx	 ecx, BYTE PTR byte_3$[rbp]
  00205	81 e1 c0 00 00
	00		 and	 ecx, 192		; 000000c0H
  0020b	c1 f9 06	 sar	 ecx, 6
  0020e	0b c1		 or	 eax, ecx
  00210	48 98		 cdqe
  00212	0f b6 44 05 00	 movzx	 eax, BYTE PTR alphabet$[rbp+rax]
  00217	88 45 58	 mov	 BYTE PTR byte_to_add$[rbp], al

; 920  : 
; 921  :          destination[ number_of_bytes_encoded ] = static_cast< char >( byte_to_add );

  0021a	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  0021d	48 8b 4d 70	 mov	 rcx, QWORD PTR destination$[rbp]
  00221	0f b6 55 58	 movzx	 edx, BYTE PTR byte_to_add$[rbp]
  00225	88 14 01	 mov	 BYTE PTR [rcx+rax], dl

; 922  :          number_of_bytes_encoded++;

  00228	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  0022b	ff c0		 inc	 eax
  0022d	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 923  : 
; 924  :          destination[ number_of_bytes_encoded ] = static_cast< char >( END_OF_BASE64_ENCODED_DATA );

  00230	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  00233	48 8b 4d 70	 mov	 rcx, QWORD PTR destination$[rbp]
  00237	c6 04 01 3d	 mov	 BYTE PTR [rcx+rax], 61	; 0000003dH

; 925  : 
; 926  :          // 1999-09-01
; 927  :          // Thanks go to Yurong Lin (ylin@dial.pipex.com) for finding a bug here.
; 928  :          // We must NULL terminate the string before letting CString have the buffer back.
; 929  : 
; 930  :          destination[ number_of_bytes_encoded + 1 ] = 0;

  0023b	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  0023e	ff c0		 inc	 eax
  00240	8b c0		 mov	 eax, eax
  00242	48 8b 4d 70	 mov	 rcx, QWORD PTR destination$[rbp]
  00246	c6 04 01 00	 mov	 BYTE PTR [rcx+rax], 0

; 931  : 
; 932  :          destination_string.ReleaseBuffer( -1 );

  0024a	ba ff ff ff ff	 mov	 edx, -1
  0024f	48 8b 8d f8 00
	00 00		 mov	 rcx, QWORD PTR destination_string$[rbp]
  00256	e8 00 00 00 00	 call	 ?ReleaseBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<char,0>::ReleaseBuffer

; 933  : 
; 934  :          return( TRUE );

  0025b	b8 01 00 00 00	 mov	 eax, 1
  00260	e9 ae 00 00 00	 jmp	 $LN1@EncodeA

; 935  :       }

  00265	eb 0f		 jmp	 SHORT $LN7@EncodeA
$LN6@EncodeA:

; 936  :       else
; 937  :       {
; 938  :          byte_3 = input_buffer[ loop_index ];

  00267	48 63 45 50	 movsxd	 rax, DWORD PTR loop_index$[rbp]
  0026b	48 8b 4d 60	 mov	 rcx, QWORD PTR input_buffer$[rbp]
  0026f	0f b6 04 01	 movzx	 eax, BYTE PTR [rcx+rax]
  00273	88 45 5b	 mov	 BYTE PTR byte_3$[rbp], al
$LN7@EncodeA:

; 939  :       }
; 940  : 
; 941  :       loop_index++;

  00276	8b 45 50	 mov	 eax, DWORD PTR loop_index$[rbp]
  00279	ff c0		 inc	 eax
  0027b	89 45 50	 mov	 DWORD PTR loop_index$[rbp], eax

; 942  : 
; 943  :       byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ];

  0027e	0f b6 45 5a	 movzx	 eax, BYTE PTR byte_2$[rbp]
  00282	83 e0 0f	 and	 eax, 15
  00285	c1 e0 02	 shl	 eax, 2
  00288	0f b6 4d 5b	 movzx	 ecx, BYTE PTR byte_3$[rbp]
  0028c	81 e1 c0 00 00
	00		 and	 ecx, 192		; 000000c0H
  00292	c1 f9 06	 sar	 ecx, 6
  00295	0b c1		 or	 eax, ecx
  00297	48 98		 cdqe
  00299	0f b6 44 05 00	 movzx	 eax, BYTE PTR alphabet$[rbp+rax]
  0029e	88 45 58	 mov	 BYTE PTR byte_to_add$[rbp], al

; 944  : 
; 945  :       destination[ number_of_bytes_encoded ] = static_cast< char >( byte_to_add );

  002a1	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  002a4	48 8b 4d 70	 mov	 rcx, QWORD PTR destination$[rbp]
  002a8	0f b6 55 58	 movzx	 edx, BYTE PTR byte_to_add$[rbp]
  002ac	88 14 01	 mov	 BYTE PTR [rcx+rax], dl

; 946  :       number_of_bytes_encoded++;

  002af	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  002b2	ff c0		 inc	 eax
  002b4	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 947  : 
; 948  :       byte_to_add = alphabet[ ( byte_3 & 0x3F ) ];

  002b7	0f b6 45 5b	 movzx	 eax, BYTE PTR byte_3$[rbp]
  002bb	83 e0 3f	 and	 eax, 63			; 0000003fH
  002be	48 98		 cdqe
  002c0	0f b6 44 05 00	 movzx	 eax, BYTE PTR alphabet$[rbp+rax]
  002c5	88 45 58	 mov	 BYTE PTR byte_to_add$[rbp], al

; 949  : 
; 950  :       destination[ number_of_bytes_encoded ] = static_cast< char >( byte_to_add );

  002c8	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  002cb	48 8b 4d 70	 mov	 rcx, QWORD PTR destination$[rbp]
  002cf	0f b6 55 58	 movzx	 edx, BYTE PTR byte_to_add$[rbp]
  002d3	88 14 01	 mov	 BYTE PTR [rcx+rax], dl

; 951  :       number_of_bytes_encoded++;

  002d6	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  002d9	ff c0		 inc	 eax
  002db	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 952  : 
; 953  : /*
; 954  :       if ( ( number_of_bytes_encoded % BASE64_NUMBER_OF_CHARACTERS_PER_LINE ) == 0 )
; 955  :       {
; 956  :          destination[ number_of_bytes_encoded ] = static_cast< char >( CARRIAGE_RETURN );
; 957  :          number_of_bytes_encoded++;
; 958  : 
; 959  :          destination[ number_of_bytes_encoded ] = static_cast< char >( LINE_FEED );
; 960  :          number_of_bytes_encoded++;
; 961  :       }
; 962  : */
; 963  :    }

  002de	e9 db fd ff ff	 jmp	 $LN2@EncodeA
$LN3@EncodeA:

; 964  : 
; 965  :    destination[ number_of_bytes_encoded ] = static_cast< char >( END_OF_BASE64_ENCODED_DATA );

  002e3	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  002e6	48 8b 4d 70	 mov	 rcx, QWORD PTR destination$[rbp]
  002ea	c6 04 01 3d	 mov	 BYTE PTR [rcx+rax], 61	; 0000003dH

; 966  : 
; 967  :    // 1999-09-01
; 968  :    // Thanks go to Yurong Lin (ylin@dial.pipex.com) for finding a bug here.
; 969  :    // We must NULL terminate the string before letting CString have the buffer back.
; 970  : 
; 971  :    destination[ number_of_bytes_encoded + 1 ] = 0;

  002ee	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  002f1	ff c0		 inc	 eax
  002f3	8b c0		 mov	 eax, eax
  002f5	48 8b 4d 70	 mov	 rcx, QWORD PTR destination$[rbp]
  002f9	c6 04 01 00	 mov	 BYTE PTR [rcx+rax], 0

; 972  : 
; 973  :    destination_string.ReleaseBuffer( -1 );

  002fd	ba ff ff ff ff	 mov	 edx, -1
  00302	48 8b 8d f8 00
	00 00		 mov	 rcx, QWORD PTR destination_string$[rbp]
  00309	e8 00 00 00 00	 call	 ?ReleaseBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<char,0>::ReleaseBuffer

; 974  : 
; 975  :    return( TRUE );

  0030e	b8 01 00 00 00	 mov	 eax, 1
$LN1@EncodeA:

; 976  : }

  00313	48 8b 8d b8 00
	00 00		 mov	 rcx, QWORD PTR __$ArrayPad$[rbp]
  0031a	48 33 cd	 xor	 rcx, rbp
  0031d	e8 00 00 00 00	 call	 __security_check_cookie
  00322	48 8d a5 c0 00
	00 00		 lea	 rsp, QWORD PTR [rbp+192]
  00329	5f		 pop	 rdi
  0032a	5e		 pop	 rsi
  0032b	5d		 pop	 rbp
  0032c	c3		 ret	 0
?EncodeA@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z ENDP ; CBase64Coding::EncodeA
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp
;	COMDAT ?Encode@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z
_TEXT	SEGMENT
alphabet$ = 0
loop_index$ = 80
number_of_bytes_to_encode$ = 84
byte_to_add$ = 88
byte_1$ = 89
byte_2$ = 90
byte_3$ = 91
input_buffer$ = 96
number_of_bytes_encoded$ = 104
destination$ = 112
__$ArrayPad$ = 184
this$ = 224
pSource$ = 232
lSource$ = 240
destination_string$ = 248
?Encode@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z PROC ; CBase64Coding::Encode, COMDAT

; 695  : {

$LN9:
  00000	4c 89 4c 24 20	 mov	 QWORD PTR [rsp+32], r9
  00005	44 89 44 24 18	 mov	 DWORD PTR [rsp+24], r8d
  0000a	48 89 54 24 10	 mov	 QWORD PTR [rsp+16], rdx
  0000f	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00014	55		 push	 rbp
  00015	56		 push	 rsi
  00016	57		 push	 rdi
  00017	48 81 ec e0 00
	00 00		 sub	 rsp, 224		; 000000e0H
  0001e	48 8d 6c 24 20	 lea	 rbp, QWORD PTR [rsp+32]
  00023	48 8b 05 00 00
	00 00		 mov	 rax, QWORD PTR __security_cookie
  0002a	48 33 c5	 xor	 rax, rbp
  0002d	48 89 85 b8 00
	00 00		 mov	 QWORD PTR __$ArrayPad$[rbp], rax

; 696  : 
; 697  :    const char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

  00034	48 8d 45 00	 lea	 rax, QWORD PTR alphabet$[rbp]
  00038	48 8d 0d 00 00
	00 00		 lea	 rcx, OFFSET FLAT:??_C@_0EB@NFPJKBDG@ABCDEFGHIJKLMNOPQRSTUVWXYZabcde@
  0003f	48 8b f8	 mov	 rdi, rax
  00042	48 8b f1	 mov	 rsi, rcx
  00045	b9 41 00 00 00	 mov	 ecx, 65			; 00000041H
  0004a	f3 a4		 rep movsb

; 698  : 
; 699  :    int loop_index                = 0;

  0004c	c7 45 50 00 00
	00 00		 mov	 DWORD PTR loop_index$[rbp], 0

; 700  :    int number_of_bytes_to_encode = lSource;

  00053	8b 85 f0 00 00
	00		 mov	 eax, DWORD PTR lSource$[rbp]
  00059	89 45 54	 mov	 DWORD PTR number_of_bytes_to_encode$[rbp], eax

; 701  : 
; 702  :    BYTE byte_to_add = 0;

  0005c	c6 45 58 00	 mov	 BYTE PTR byte_to_add$[rbp], 0

; 703  :    BYTE byte_1      = 0;

  00060	c6 45 59 00	 mov	 BYTE PTR byte_1$[rbp], 0

; 704  :    BYTE byte_2      = 0;

  00064	c6 45 5a 00	 mov	 BYTE PTR byte_2$[rbp], 0

; 705  :    BYTE byte_3      = 0;

  00068	c6 45 5b 00	 mov	 BYTE PTR byte_3$[rbp], 0

; 706  : 
; 707  :    const BYTE * input_buffer = pSource;

  0006c	48 8b 85 e8 00
	00 00		 mov	 rax, QWORD PTR pSource$[rbp]
  00073	48 89 45 60	 mov	 QWORD PTR input_buffer$[rbp], rax

; 708  : 
; 709  :    DWORD number_of_bytes_encoded = (DWORD) ( (double) number_of_bytes_to_encode / (double) 0.75 ) + 1;

  00077	f2 0f 2a 45 54	 cvtsi2sd xmm0, DWORD PTR number_of_bytes_to_encode$[rbp]
  0007c	f2 0f 5e 05 00
	00 00 00	 divsd	 xmm0, QWORD PTR __real@3fe8000000000000
  00084	f2 48 0f 2c c0	 cvttsd2si rax, xmm0
  00089	ff c0		 inc	 eax
  0008b	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 710  : 
; 711  :    // Now add in the CR/LF pairs, each line is truncated at 72 characters
; 712  : 
; 713  :    // 2000-05-12
; 714  :    // Thanks go to Ilia Golubev (ilia@varicom.co.il) for finding a bug here.
; 715  :    // I was using number_of_bytes_to_encode rather than number_of_bytes_encoded.
; 716  : 
; 717  :    number_of_bytes_encoded += (DWORD)( ( ( number_of_bytes_encoded / BASE64_NUMBER_OF_CHARACTERS_PER_LINE ) + 1 ) * 2 );

  0008e	33 d2		 xor	 edx, edx
  00090	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  00093	b9 48 00 00 00	 mov	 ecx, 72			; 00000048H
  00098	f7 f1		 div	 ecx
  0009a	8b 4d 68	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rbp]
  0009d	8d 44 41 02	 lea	 eax, DWORD PTR [rcx+rax*2+2]
  000a1	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 718  : 
; 719  :    LPTSTR destination = destination_string.GetBuffer( number_of_bytes_encoded );

  000a4	8b 55 68	 mov	 edx, DWORD PTR number_of_bytes_encoded$[rbp]
  000a7	48 8b 8d f8 00
	00 00		 mov	 rcx, QWORD PTR destination_string$[rbp]
  000ae	e8 00 00 00 00	 call	 ?GetBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAPEA_WH@Z ; ATL::CSimpleStringT<wchar_t,0>::GetBuffer
  000b3	48 89 45 70	 mov	 QWORD PTR destination$[rbp], rax

; 720  : 
; 721  :    number_of_bytes_encoded = 0;

  000b7	c7 45 68 00 00
	00 00		 mov	 DWORD PTR number_of_bytes_encoded$[rbp], 0
$LN2@Encode:

; 722  : 
; 723  :    while( loop_index < number_of_bytes_to_encode )

  000be	8b 45 54	 mov	 eax, DWORD PTR number_of_bytes_to_encode$[rbp]
  000c1	39 45 50	 cmp	 DWORD PTR loop_index$[rbp], eax
  000c4	0f 8d 32 02 00
	00		 jge	 $LN3@Encode

; 724  :    {
; 725  :       // Output the first byte
; 726  : 
; 727  :       byte_1 = input_buffer[ loop_index ];

  000ca	48 63 45 50	 movsxd	 rax, DWORD PTR loop_index$[rbp]
  000ce	48 8b 4d 60	 mov	 rcx, QWORD PTR input_buffer$[rbp]
  000d2	0f b6 04 01	 movzx	 eax, BYTE PTR [rcx+rax]
  000d6	88 45 59	 mov	 BYTE PTR byte_1$[rbp], al

; 728  :       byte_to_add = alphabet[ ( byte_1 >> 2 ) ];

  000d9	0f b6 45 59	 movzx	 eax, BYTE PTR byte_1$[rbp]
  000dd	c1 f8 02	 sar	 eax, 2
  000e0	48 98		 cdqe
  000e2	0f b6 44 05 00	 movzx	 eax, BYTE PTR alphabet$[rbp+rax]
  000e7	88 45 58	 mov	 BYTE PTR byte_to_add$[rbp], al

; 729  : 
; 730  :       destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add );

  000ea	0f b6 45 58	 movzx	 eax, BYTE PTR byte_to_add$[rbp]
  000ee	8b 4d 68	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rbp]
  000f1	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  000f5	66 89 04 4a	 mov	 WORD PTR [rdx+rcx*2], ax

; 731  :       number_of_bytes_encoded++;

  000f9	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  000fc	ff c0		 inc	 eax
  000fe	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 732  : 
; 733  :       loop_index++;

  00101	8b 45 50	 mov	 eax, DWORD PTR loop_index$[rbp]
  00104	ff c0		 inc	 eax
  00106	89 45 50	 mov	 DWORD PTR loop_index$[rbp], eax

; 734  : 
; 735  :       if ( loop_index >= number_of_bytes_to_encode )

  00109	8b 45 54	 mov	 eax, DWORD PTR number_of_bytes_to_encode$[rbp]
  0010c	39 45 50	 cmp	 DWORD PTR loop_index$[rbp], eax
  0010f	0f 8c 94 00 00
	00		 jl	 $LN4@Encode

; 736  :       {
; 737  :          // We're at the end of the data to encode
; 738  : 
; 739  :          byte_2 = 0;

  00115	c6 45 5a 00	 mov	 BYTE PTR byte_2$[rbp], 0

; 740  :          byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ];

  00119	0f b6 45 59	 movzx	 eax, BYTE PTR byte_1$[rbp]
  0011d	83 e0 03	 and	 eax, 3
  00120	c1 e0 04	 shl	 eax, 4
  00123	0f b6 4d 5a	 movzx	 ecx, BYTE PTR byte_2$[rbp]
  00127	81 e1 f0 00 00
	00		 and	 ecx, 240		; 000000f0H
  0012d	c1 f9 04	 sar	 ecx, 4
  00130	0b c1		 or	 eax, ecx
  00132	48 98		 cdqe
  00134	0f b6 44 05 00	 movzx	 eax, BYTE PTR alphabet$[rbp+rax]
  00139	88 45 58	 mov	 BYTE PTR byte_to_add$[rbp], al

; 741  : 
; 742  :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add );

  0013c	0f b6 45 58	 movzx	 eax, BYTE PTR byte_to_add$[rbp]
  00140	8b 4d 68	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rbp]
  00143	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  00147	66 89 04 4a	 mov	 WORD PTR [rdx+rcx*2], ax

; 743  :          number_of_bytes_encoded++;

  0014b	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  0014e	ff c0		 inc	 eax
  00150	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 744  : 
; 745  :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA );

  00153	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  00156	b9 3d 00 00 00	 mov	 ecx, 61			; 0000003dH
  0015b	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  0015f	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 746  :          number_of_bytes_encoded++;

  00163	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  00166	ff c0		 inc	 eax
  00168	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 747  : 
; 748  :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA );

  0016b	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  0016e	b9 3d 00 00 00	 mov	 ecx, 61			; 0000003dH
  00173	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  00177	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 749  : 
; 750  :          // 1999-09-01
; 751  :          // Thanks go to Yurong Lin (ylin@dial.pipex.com) for finding a bug here.
; 752  :          // We must NULL terminate the string before letting CString have the buffer back.
; 753  : 
; 754  :          destination[ number_of_bytes_encoded + 1 ] = 0;

  0017b	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  0017e	ff c0		 inc	 eax
  00180	8b c0		 mov	 eax, eax
  00182	33 c9		 xor	 ecx, ecx
  00184	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  00188	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 755  : 
; 756  :          destination_string.ReleaseBuffer( -1 );

  0018c	ba ff ff ff ff	 mov	 edx, -1
  00191	48 8b 8d f8 00
	00 00		 mov	 rcx, QWORD PTR destination_string$[rbp]
  00198	e8 00 00 00 00	 call	 ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer

; 757  : 
; 758  :          return( TRUE );

  0019d	b8 01 00 00 00	 mov	 eax, 1
  001a2	e9 8c 01 00 00	 jmp	 $LN1@Encode

; 759  :       }

  001a7	eb 0f		 jmp	 SHORT $LN5@Encode
$LN4@Encode:

; 760  :       else
; 761  :       {
; 762  :          byte_2 = input_buffer[ loop_index ];

  001a9	48 63 45 50	 movsxd	 rax, DWORD PTR loop_index$[rbp]
  001ad	48 8b 4d 60	 mov	 rcx, QWORD PTR input_buffer$[rbp]
  001b1	0f b6 04 01	 movzx	 eax, BYTE PTR [rcx+rax]
  001b5	88 45 5a	 mov	 BYTE PTR byte_2$[rbp], al
$LN5@Encode:

; 763  :       }
; 764  : 
; 765  :       byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ];

  001b8	0f b6 45 59	 movzx	 eax, BYTE PTR byte_1$[rbp]
  001bc	83 e0 03	 and	 eax, 3
  001bf	c1 e0 04	 shl	 eax, 4
  001c2	0f b6 4d 5a	 movzx	 ecx, BYTE PTR byte_2$[rbp]
  001c6	81 e1 f0 00 00
	00		 and	 ecx, 240		; 000000f0H
  001cc	c1 f9 04	 sar	 ecx, 4
  001cf	0b c1		 or	 eax, ecx
  001d1	48 98		 cdqe
  001d3	0f b6 44 05 00	 movzx	 eax, BYTE PTR alphabet$[rbp+rax]
  001d8	88 45 58	 mov	 BYTE PTR byte_to_add$[rbp], al

; 766  : 
; 767  :       destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add );

  001db	0f b6 45 58	 movzx	 eax, BYTE PTR byte_to_add$[rbp]
  001df	8b 4d 68	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rbp]
  001e2	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  001e6	66 89 04 4a	 mov	 WORD PTR [rdx+rcx*2], ax

; 768  :       number_of_bytes_encoded++;

  001ea	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  001ed	ff c0		 inc	 eax
  001ef	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 769  : 
; 770  :       loop_index++;

  001f2	8b 45 50	 mov	 eax, DWORD PTR loop_index$[rbp]
  001f5	ff c0		 inc	 eax
  001f7	89 45 50	 mov	 DWORD PTR loop_index$[rbp], eax

; 771  : 
; 772  :       if ( loop_index >= number_of_bytes_to_encode )

  001fa	8b 45 54	 mov	 eax, DWORD PTR number_of_bytes_to_encode$[rbp]
  001fd	39 45 50	 cmp	 DWORD PTR loop_index$[rbp], eax
  00200	7c 7c		 jl	 SHORT $LN6@Encode

; 773  :       {
; 774  :          // We ran out of bytes, we need to add the last half of byte_2 and pad
; 775  :          byte_3 = 0;

  00202	c6 45 5b 00	 mov	 BYTE PTR byte_3$[rbp], 0

; 776  : 
; 777  :          byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ];

  00206	0f b6 45 5a	 movzx	 eax, BYTE PTR byte_2$[rbp]
  0020a	83 e0 0f	 and	 eax, 15
  0020d	c1 e0 02	 shl	 eax, 2
  00210	0f b6 4d 5b	 movzx	 ecx, BYTE PTR byte_3$[rbp]
  00214	81 e1 c0 00 00
	00		 and	 ecx, 192		; 000000c0H
  0021a	c1 f9 06	 sar	 ecx, 6
  0021d	0b c1		 or	 eax, ecx
  0021f	48 98		 cdqe
  00221	0f b6 44 05 00	 movzx	 eax, BYTE PTR alphabet$[rbp+rax]
  00226	88 45 58	 mov	 BYTE PTR byte_to_add$[rbp], al

; 778  : 
; 779  :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add );

  00229	0f b6 45 58	 movzx	 eax, BYTE PTR byte_to_add$[rbp]
  0022d	8b 4d 68	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rbp]
  00230	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  00234	66 89 04 4a	 mov	 WORD PTR [rdx+rcx*2], ax

; 780  :          number_of_bytes_encoded++;

  00238	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  0023b	ff c0		 inc	 eax
  0023d	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 781  : 
; 782  :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA );

  00240	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  00243	b9 3d 00 00 00	 mov	 ecx, 61			; 0000003dH
  00248	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  0024c	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 783  : 
; 784  :          // 1999-09-01
; 785  :          // Thanks go to Yurong Lin (ylin@dial.pipex.com) for finding a bug here.
; 786  :          // We must NULL terminate the string before letting CString have the buffer back.
; 787  : 
; 788  :          destination[ number_of_bytes_encoded + 1 ] = 0;

  00250	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  00253	ff c0		 inc	 eax
  00255	8b c0		 mov	 eax, eax
  00257	33 c9		 xor	 ecx, ecx
  00259	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  0025d	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 789  : 
; 790  :          destination_string.ReleaseBuffer( -1 );

  00261	ba ff ff ff ff	 mov	 edx, -1
  00266	48 8b 8d f8 00
	00 00		 mov	 rcx, QWORD PTR destination_string$[rbp]
  0026d	e8 00 00 00 00	 call	 ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer

; 791  : 
; 792  :          return( TRUE );

  00272	b8 01 00 00 00	 mov	 eax, 1
  00277	e9 b7 00 00 00	 jmp	 $LN1@Encode

; 793  :       }

  0027c	eb 0f		 jmp	 SHORT $LN7@Encode
$LN6@Encode:

; 794  :       else
; 795  :       {
; 796  :          byte_3 = input_buffer[ loop_index ];

  0027e	48 63 45 50	 movsxd	 rax, DWORD PTR loop_index$[rbp]
  00282	48 8b 4d 60	 mov	 rcx, QWORD PTR input_buffer$[rbp]
  00286	0f b6 04 01	 movzx	 eax, BYTE PTR [rcx+rax]
  0028a	88 45 5b	 mov	 BYTE PTR byte_3$[rbp], al
$LN7@Encode:

; 797  :       }
; 798  : 
; 799  :       loop_index++;

  0028d	8b 45 50	 mov	 eax, DWORD PTR loop_index$[rbp]
  00290	ff c0		 inc	 eax
  00292	89 45 50	 mov	 DWORD PTR loop_index$[rbp], eax

; 800  : 
; 801  :       byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ];

  00295	0f b6 45 5a	 movzx	 eax, BYTE PTR byte_2$[rbp]
  00299	83 e0 0f	 and	 eax, 15
  0029c	c1 e0 02	 shl	 eax, 2
  0029f	0f b6 4d 5b	 movzx	 ecx, BYTE PTR byte_3$[rbp]
  002a3	81 e1 c0 00 00
	00		 and	 ecx, 192		; 000000c0H
  002a9	c1 f9 06	 sar	 ecx, 6
  002ac	0b c1		 or	 eax, ecx
  002ae	48 98		 cdqe
  002b0	0f b6 44 05 00	 movzx	 eax, BYTE PTR alphabet$[rbp+rax]
  002b5	88 45 58	 mov	 BYTE PTR byte_to_add$[rbp], al

; 802  : 
; 803  :       destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add );

  002b8	0f b6 45 58	 movzx	 eax, BYTE PTR byte_to_add$[rbp]
  002bc	8b 4d 68	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rbp]
  002bf	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  002c3	66 89 04 4a	 mov	 WORD PTR [rdx+rcx*2], ax

; 804  :       number_of_bytes_encoded++;

  002c7	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  002ca	ff c0		 inc	 eax
  002cc	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 805  : 
; 806  :       byte_to_add = alphabet[ ( byte_3 & 0x3F ) ];

  002cf	0f b6 45 5b	 movzx	 eax, BYTE PTR byte_3$[rbp]
  002d3	83 e0 3f	 and	 eax, 63			; 0000003fH
  002d6	48 98		 cdqe
  002d8	0f b6 44 05 00	 movzx	 eax, BYTE PTR alphabet$[rbp+rax]
  002dd	88 45 58	 mov	 BYTE PTR byte_to_add$[rbp], al

; 807  : 
; 808  :       destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add );

  002e0	0f b6 45 58	 movzx	 eax, BYTE PTR byte_to_add$[rbp]
  002e4	8b 4d 68	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rbp]
  002e7	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  002eb	66 89 04 4a	 mov	 WORD PTR [rdx+rcx*2], ax

; 809  :       number_of_bytes_encoded++;

  002ef	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  002f2	ff c0		 inc	 eax
  002f4	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 810  : 
; 811  : /*
; 812  :       if ( ( number_of_bytes_encoded % BASE64_NUMBER_OF_CHARACTERS_PER_LINE ) == 0 )
; 813  :       {
; 814  :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( CARRIAGE_RETURN );
; 815  :          number_of_bytes_encoded++;
; 816  : 
; 817  :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( LINE_FEED );
; 818  :          number_of_bytes_encoded++;
; 819  :       }
; 820  : */
; 821  :    }

  002f7	e9 c2 fd ff ff	 jmp	 $LN2@Encode
$LN3@Encode:

; 822  : 
; 823  :    destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA );

  002fc	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  002ff	b9 3d 00 00 00	 mov	 ecx, 61			; 0000003dH
  00304	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  00308	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 824  : 
; 825  :    // 1999-09-01
; 826  :    // Thanks go to Yurong Lin (ylin@dial.pipex.com) for finding a bug here.
; 827  :    // We must NULL terminate the string before letting CString have the buffer back.
; 828  : 
; 829  :    destination[ number_of_bytes_encoded + 1 ] = 0;

  0030c	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  0030f	ff c0		 inc	 eax
  00311	8b c0		 mov	 eax, eax
  00313	33 c9		 xor	 ecx, ecx
  00315	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  00319	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 830  : 
; 831  :    destination_string.ReleaseBuffer( -1 );

  0031d	ba ff ff ff ff	 mov	 edx, -1
  00322	48 8b 8d f8 00
	00 00		 mov	 rcx, QWORD PTR destination_string$[rbp]
  00329	e8 00 00 00 00	 call	 ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer

; 832  : 
; 833  :    return( TRUE );

  0032e	b8 01 00 00 00	 mov	 eax, 1
$LN1@Encode:

; 834  : }

  00333	48 8b 8d b8 00
	00 00		 mov	 rcx, QWORD PTR __$ArrayPad$[rbp]
  0033a	48 33 cd	 xor	 rcx, rbp
  0033d	e8 00 00 00 00	 call	 __security_check_cookie
  00342	48 8d a5 c0 00
	00 00		 lea	 rsp, QWORD PTR [rbp+192]
  00349	5f		 pop	 rdi
  0034a	5e		 pop	 rsi
  0034b	5d		 pop	 rbp
  0034c	c3		 ret	 0
?Encode@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z ENDP ; CBase64Coding::Encode
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp
;	COMDAT ?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z
_TEXT	SEGMENT
alphabet$ = 0
loop_index$ = 80
number_of_bytes_to_encode$ = 84
byte_to_add$ = 88
byte_1$ = 89
byte_2$ = 90
byte_3$ = 91
input_buffer$ = 96
number_of_bytes_encoded$ = 104
destination$ = 112
__$ArrayPad$ = 184
this$ = 224
source$ = 232
destination_string$ = 240
?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z PROC ; CBase64Coding::Encode, COMDAT

; 555  : {

$LN10:
  00000	4c 89 44 24 18	 mov	 QWORD PTR [rsp+24], r8
  00005	48 89 54 24 10	 mov	 QWORD PTR [rsp+16], rdx
  0000a	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  0000f	55		 push	 rbp
  00010	56		 push	 rsi
  00011	57		 push	 rdi
  00012	48 81 ec e0 00
	00 00		 sub	 rsp, 224		; 000000e0H
  00019	48 8d 6c 24 20	 lea	 rbp, QWORD PTR [rsp+32]
  0001e	48 8b 05 00 00
	00 00		 mov	 rax, QWORD PTR __security_cookie
  00025	48 33 c5	 xor	 rax, rbp
  00028	48 89 85 b8 00
	00 00		 mov	 QWORD PTR __$ArrayPad$[rbp], rax

; 556  : 
; 557  :    const char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

  0002f	48 8d 45 00	 lea	 rax, QWORD PTR alphabet$[rbp]
  00033	48 8d 0d 00 00
	00 00		 lea	 rcx, OFFSET FLAT:??_C@_0EB@NFPJKBDG@ABCDEFGHIJKLMNOPQRSTUVWXYZabcde@
  0003a	48 8b f8	 mov	 rdi, rax
  0003d	48 8b f1	 mov	 rsi, rcx
  00040	b9 41 00 00 00	 mov	 ecx, 65			; 00000041H
  00045	f3 a4		 rep movsb

; 558  : 
; 559  :    int loop_index                = 0;

  00047	c7 45 50 00 00
	00 00		 mov	 DWORD PTR loop_index$[rbp], 0

; 560  :    int number_of_bytes_to_encode = (int)source.GetSize();

  0004e	48 8b 8d e8 00
	00 00		 mov	 rcx, QWORD PTR source$[rbp]
  00055	e8 00 00 00 00	 call	 ?GetSize@CByteArray@@QEBA_JXZ ; CByteArray::GetSize
  0005a	89 45 54	 mov	 DWORD PTR number_of_bytes_to_encode$[rbp], eax

; 561  : 
; 562  :    BYTE byte_to_add = 0;

  0005d	c6 45 58 00	 mov	 BYTE PTR byte_to_add$[rbp], 0

; 563  :    BYTE byte_1      = 0;

  00061	c6 45 59 00	 mov	 BYTE PTR byte_1$[rbp], 0

; 564  :    BYTE byte_2      = 0;

  00065	c6 45 5a 00	 mov	 BYTE PTR byte_2$[rbp], 0

; 565  :    BYTE byte_3      = 0;

  00069	c6 45 5b 00	 mov	 BYTE PTR byte_3$[rbp], 0

; 566  : 
; 567  :    const BYTE * input_buffer = source.GetData();

  0006d	48 8b 8d e8 00
	00 00		 mov	 rcx, QWORD PTR source$[rbp]
  00074	e8 00 00 00 00	 call	 ?GetData@CByteArray@@QEBAPEBEXZ ; CByteArray::GetData
  00079	48 89 45 60	 mov	 QWORD PTR input_buffer$[rbp], rax

; 568  : 
; 569  :    DWORD number_of_bytes_encoded = (DWORD) ( (double) number_of_bytes_to_encode / (double) 0.75 ) + 1;

  0007d	f2 0f 2a 45 54	 cvtsi2sd xmm0, DWORD PTR number_of_bytes_to_encode$[rbp]
  00082	f2 0f 5e 05 00
	00 00 00	 divsd	 xmm0, QWORD PTR __real@3fe8000000000000
  0008a	f2 48 0f 2c c0	 cvttsd2si rax, xmm0
  0008f	ff c0		 inc	 eax
  00091	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 570  : 
; 571  :    // Now add in the CR/LF pairs, each line is truncated at 72 characters
; 572  : 
; 573  :    // 2000-05-12
; 574  :    // Thanks go to Ilia Golubev (ilia@varicom.co.il) for finding a bug here.
; 575  :    // I was using number_of_bytes_to_encode rather than number_of_bytes_encoded.
; 576  : 
; 577  :    number_of_bytes_encoded += (DWORD)( ( ( number_of_bytes_encoded / BASE64_NUMBER_OF_CHARACTERS_PER_LINE ) + 1 ) * 2 );

  00094	33 d2		 xor	 edx, edx
  00096	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  00099	b9 48 00 00 00	 mov	 ecx, 72			; 00000048H
  0009e	f7 f1		 div	 ecx
  000a0	8b 4d 68	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rbp]
  000a3	8d 44 41 02	 lea	 eax, DWORD PTR [rcx+rax*2+2]
  000a7	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 578  : 
; 579  :    LPTSTR destination = destination_string.GetBuffer( number_of_bytes_encoded );

  000aa	8b 55 68	 mov	 edx, DWORD PTR number_of_bytes_encoded$[rbp]
  000ad	48 8b 8d f0 00
	00 00		 mov	 rcx, QWORD PTR destination_string$[rbp]
  000b4	e8 00 00 00 00	 call	 ?GetBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAPEA_WH@Z ; ATL::CSimpleStringT<wchar_t,0>::GetBuffer
  000b9	48 89 45 70	 mov	 QWORD PTR destination$[rbp], rax

; 580  : 
; 581  :    number_of_bytes_encoded = 0;

  000bd	c7 45 68 00 00
	00 00		 mov	 DWORD PTR number_of_bytes_encoded$[rbp], 0
$LN2@Encode:

; 582  : 
; 583  :    while( loop_index < number_of_bytes_to_encode )

  000c4	8b 45 54	 mov	 eax, DWORD PTR number_of_bytes_to_encode$[rbp]
  000c7	39 45 50	 cmp	 DWORD PTR loop_index$[rbp], eax
  000ca	0f 8d 74 02 00
	00		 jge	 $LN3@Encode

; 584  :    {
; 585  :       // Output the first byte
; 586  : 
; 587  :       byte_1 = input_buffer[ loop_index ];

  000d0	48 63 45 50	 movsxd	 rax, DWORD PTR loop_index$[rbp]
  000d4	48 8b 4d 60	 mov	 rcx, QWORD PTR input_buffer$[rbp]
  000d8	0f b6 04 01	 movzx	 eax, BYTE PTR [rcx+rax]
  000dc	88 45 59	 mov	 BYTE PTR byte_1$[rbp], al

; 588  :       byte_to_add = alphabet[ ( byte_1 >> 2 ) ];

  000df	0f b6 45 59	 movzx	 eax, BYTE PTR byte_1$[rbp]
  000e3	c1 f8 02	 sar	 eax, 2
  000e6	48 98		 cdqe
  000e8	0f b6 44 05 00	 movzx	 eax, BYTE PTR alphabet$[rbp+rax]
  000ed	88 45 58	 mov	 BYTE PTR byte_to_add$[rbp], al

; 589  : 
; 590  :       destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add );

  000f0	0f b6 45 58	 movzx	 eax, BYTE PTR byte_to_add$[rbp]
  000f4	8b 4d 68	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rbp]
  000f7	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  000fb	66 89 04 4a	 mov	 WORD PTR [rdx+rcx*2], ax

; 591  :       number_of_bytes_encoded++;

  000ff	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  00102	ff c0		 inc	 eax
  00104	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 592  : 
; 593  :       loop_index++;

  00107	8b 45 50	 mov	 eax, DWORD PTR loop_index$[rbp]
  0010a	ff c0		 inc	 eax
  0010c	89 45 50	 mov	 DWORD PTR loop_index$[rbp], eax

; 594  : 
; 595  :       if ( loop_index >= number_of_bytes_to_encode )

  0010f	8b 45 54	 mov	 eax, DWORD PTR number_of_bytes_to_encode$[rbp]
  00112	39 45 50	 cmp	 DWORD PTR loop_index$[rbp], eax
  00115	0f 8c 94 00 00
	00		 jl	 $LN4@Encode

; 596  :       {
; 597  :          // We're at the end of the data to encode
; 598  : 
; 599  :          byte_2 = 0;

  0011b	c6 45 5a 00	 mov	 BYTE PTR byte_2$[rbp], 0

; 600  :          byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ];

  0011f	0f b6 45 59	 movzx	 eax, BYTE PTR byte_1$[rbp]
  00123	83 e0 03	 and	 eax, 3
  00126	c1 e0 04	 shl	 eax, 4
  00129	0f b6 4d 5a	 movzx	 ecx, BYTE PTR byte_2$[rbp]
  0012d	81 e1 f0 00 00
	00		 and	 ecx, 240		; 000000f0H
  00133	c1 f9 04	 sar	 ecx, 4
  00136	0b c1		 or	 eax, ecx
  00138	48 98		 cdqe
  0013a	0f b6 44 05 00	 movzx	 eax, BYTE PTR alphabet$[rbp+rax]
  0013f	88 45 58	 mov	 BYTE PTR byte_to_add$[rbp], al

; 601  : 
; 602  :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add );

  00142	0f b6 45 58	 movzx	 eax, BYTE PTR byte_to_add$[rbp]
  00146	8b 4d 68	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rbp]
  00149	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  0014d	66 89 04 4a	 mov	 WORD PTR [rdx+rcx*2], ax

; 603  :          number_of_bytes_encoded++;

  00151	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  00154	ff c0		 inc	 eax
  00156	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 604  : 
; 605  :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA );

  00159	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  0015c	b9 3d 00 00 00	 mov	 ecx, 61			; 0000003dH
  00161	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  00165	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 606  :          number_of_bytes_encoded++;

  00169	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  0016c	ff c0		 inc	 eax
  0016e	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 607  : 
; 608  :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA );

  00171	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  00174	b9 3d 00 00 00	 mov	 ecx, 61			; 0000003dH
  00179	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  0017d	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 609  : 
; 610  :          // 1999-09-01
; 611  :          // Thanks go to Yurong Lin (ylin@dial.pipex.com) for finding a bug here.
; 612  :          // We must NULL terminate the string before letting CString have the buffer back.
; 613  : 
; 614  :          destination[ number_of_bytes_encoded + 1 ] = 0;

  00181	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  00184	ff c0		 inc	 eax
  00186	8b c0		 mov	 eax, eax
  00188	33 c9		 xor	 ecx, ecx
  0018a	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  0018e	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 615  : 
; 616  :          destination_string.ReleaseBuffer( -1 );

  00192	ba ff ff ff ff	 mov	 edx, -1
  00197	48 8b 8d f0 00
	00 00		 mov	 rcx, QWORD PTR destination_string$[rbp]
  0019e	e8 00 00 00 00	 call	 ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer

; 617  : 
; 618  :          return( TRUE );

  001a3	b8 01 00 00 00	 mov	 eax, 1
  001a8	e9 ce 01 00 00	 jmp	 $LN1@Encode

; 619  :       }

  001ad	eb 0f		 jmp	 SHORT $LN5@Encode
$LN4@Encode:

; 620  :       else
; 621  :       {
; 622  :          byte_2 = input_buffer[ loop_index ];

  001af	48 63 45 50	 movsxd	 rax, DWORD PTR loop_index$[rbp]
  001b3	48 8b 4d 60	 mov	 rcx, QWORD PTR input_buffer$[rbp]
  001b7	0f b6 04 01	 movzx	 eax, BYTE PTR [rcx+rax]
  001bb	88 45 5a	 mov	 BYTE PTR byte_2$[rbp], al
$LN5@Encode:

; 623  :       }
; 624  : 
; 625  :       byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ];

  001be	0f b6 45 59	 movzx	 eax, BYTE PTR byte_1$[rbp]
  001c2	83 e0 03	 and	 eax, 3
  001c5	c1 e0 04	 shl	 eax, 4
  001c8	0f b6 4d 5a	 movzx	 ecx, BYTE PTR byte_2$[rbp]
  001cc	81 e1 f0 00 00
	00		 and	 ecx, 240		; 000000f0H
  001d2	c1 f9 04	 sar	 ecx, 4
  001d5	0b c1		 or	 eax, ecx
  001d7	48 98		 cdqe
  001d9	0f b6 44 05 00	 movzx	 eax, BYTE PTR alphabet$[rbp+rax]
  001de	88 45 58	 mov	 BYTE PTR byte_to_add$[rbp], al

; 626  : 
; 627  :       destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add );

  001e1	0f b6 45 58	 movzx	 eax, BYTE PTR byte_to_add$[rbp]
  001e5	8b 4d 68	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rbp]
  001e8	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  001ec	66 89 04 4a	 mov	 WORD PTR [rdx+rcx*2], ax

; 628  :       number_of_bytes_encoded++;

  001f0	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  001f3	ff c0		 inc	 eax
  001f5	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 629  : 
; 630  :       loop_index++;

  001f8	8b 45 50	 mov	 eax, DWORD PTR loop_index$[rbp]
  001fb	ff c0		 inc	 eax
  001fd	89 45 50	 mov	 DWORD PTR loop_index$[rbp], eax

; 631  : 
; 632  :       if ( loop_index >= number_of_bytes_to_encode )

  00200	8b 45 54	 mov	 eax, DWORD PTR number_of_bytes_to_encode$[rbp]
  00203	39 45 50	 cmp	 DWORD PTR loop_index$[rbp], eax
  00206	7c 7c		 jl	 SHORT $LN6@Encode

; 633  :       {
; 634  :          // We ran out of bytes, we need to add the last half of byte_2 and pad
; 635  :          byte_3 = 0;

  00208	c6 45 5b 00	 mov	 BYTE PTR byte_3$[rbp], 0

; 636  : 
; 637  :          byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ];

  0020c	0f b6 45 5a	 movzx	 eax, BYTE PTR byte_2$[rbp]
  00210	83 e0 0f	 and	 eax, 15
  00213	c1 e0 02	 shl	 eax, 2
  00216	0f b6 4d 5b	 movzx	 ecx, BYTE PTR byte_3$[rbp]
  0021a	81 e1 c0 00 00
	00		 and	 ecx, 192		; 000000c0H
  00220	c1 f9 06	 sar	 ecx, 6
  00223	0b c1		 or	 eax, ecx
  00225	48 98		 cdqe
  00227	0f b6 44 05 00	 movzx	 eax, BYTE PTR alphabet$[rbp+rax]
  0022c	88 45 58	 mov	 BYTE PTR byte_to_add$[rbp], al

; 638  : 
; 639  :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add );

  0022f	0f b6 45 58	 movzx	 eax, BYTE PTR byte_to_add$[rbp]
  00233	8b 4d 68	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rbp]
  00236	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  0023a	66 89 04 4a	 mov	 WORD PTR [rdx+rcx*2], ax

; 640  :          number_of_bytes_encoded++;

  0023e	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  00241	ff c0		 inc	 eax
  00243	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 641  : 
; 642  :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA );

  00246	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  00249	b9 3d 00 00 00	 mov	 ecx, 61			; 0000003dH
  0024e	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  00252	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 643  : 
; 644  :          // 1999-09-01
; 645  :          // Thanks go to Yurong Lin (ylin@dial.pipex.com) for finding a bug here.
; 646  :          // We must NULL terminate the string before letting CString have the buffer back.
; 647  : 
; 648  :          destination[ number_of_bytes_encoded + 1 ] = 0;

  00256	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  00259	ff c0		 inc	 eax
  0025b	8b c0		 mov	 eax, eax
  0025d	33 c9		 xor	 ecx, ecx
  0025f	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  00263	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 649  : 
; 650  :          destination_string.ReleaseBuffer( -1 );

  00267	ba ff ff ff ff	 mov	 edx, -1
  0026c	48 8b 8d f0 00
	00 00		 mov	 rcx, QWORD PTR destination_string$[rbp]
  00273	e8 00 00 00 00	 call	 ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer

; 651  : 
; 652  :          return( TRUE );

  00278	b8 01 00 00 00	 mov	 eax, 1
  0027d	e9 f9 00 00 00	 jmp	 $LN1@Encode

; 653  :       }

  00282	eb 0f		 jmp	 SHORT $LN7@Encode
$LN6@Encode:

; 654  :       else
; 655  :       {
; 656  :          byte_3 = input_buffer[ loop_index ];

  00284	48 63 45 50	 movsxd	 rax, DWORD PTR loop_index$[rbp]
  00288	48 8b 4d 60	 mov	 rcx, QWORD PTR input_buffer$[rbp]
  0028c	0f b6 04 01	 movzx	 eax, BYTE PTR [rcx+rax]
  00290	88 45 5b	 mov	 BYTE PTR byte_3$[rbp], al
$LN7@Encode:

; 657  :       }
; 658  : 
; 659  :       loop_index++;

  00293	8b 45 50	 mov	 eax, DWORD PTR loop_index$[rbp]
  00296	ff c0		 inc	 eax
  00298	89 45 50	 mov	 DWORD PTR loop_index$[rbp], eax

; 660  : 
; 661  :       byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ];

  0029b	0f b6 45 5a	 movzx	 eax, BYTE PTR byte_2$[rbp]
  0029f	83 e0 0f	 and	 eax, 15
  002a2	c1 e0 02	 shl	 eax, 2
  002a5	0f b6 4d 5b	 movzx	 ecx, BYTE PTR byte_3$[rbp]
  002a9	81 e1 c0 00 00
	00		 and	 ecx, 192		; 000000c0H
  002af	c1 f9 06	 sar	 ecx, 6
  002b2	0b c1		 or	 eax, ecx
  002b4	48 98		 cdqe
  002b6	0f b6 44 05 00	 movzx	 eax, BYTE PTR alphabet$[rbp+rax]
  002bb	88 45 58	 mov	 BYTE PTR byte_to_add$[rbp], al

; 662  : 
; 663  :       destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add );

  002be	0f b6 45 58	 movzx	 eax, BYTE PTR byte_to_add$[rbp]
  002c2	8b 4d 68	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rbp]
  002c5	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  002c9	66 89 04 4a	 mov	 WORD PTR [rdx+rcx*2], ax

; 664  :       number_of_bytes_encoded++;

  002cd	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  002d0	ff c0		 inc	 eax
  002d2	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 665  : 
; 666  :       byte_to_add = alphabet[ ( byte_3 & 0x3F ) ];

  002d5	0f b6 45 5b	 movzx	 eax, BYTE PTR byte_3$[rbp]
  002d9	83 e0 3f	 and	 eax, 63			; 0000003fH
  002dc	48 98		 cdqe
  002de	0f b6 44 05 00	 movzx	 eax, BYTE PTR alphabet$[rbp+rax]
  002e3	88 45 58	 mov	 BYTE PTR byte_to_add$[rbp], al

; 667  : 
; 668  :       destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add );

  002e6	0f b6 45 58	 movzx	 eax, BYTE PTR byte_to_add$[rbp]
  002ea	8b 4d 68	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rbp]
  002ed	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  002f1	66 89 04 4a	 mov	 WORD PTR [rdx+rcx*2], ax

; 669  :       number_of_bytes_encoded++;

  002f5	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  002f8	ff c0		 inc	 eax
  002fa	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 670  : 
; 671  :       if ( ( number_of_bytes_encoded % BASE64_NUMBER_OF_CHARACTERS_PER_LINE ) == 0 )

  002fd	33 d2		 xor	 edx, edx
  002ff	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  00302	b9 48 00 00 00	 mov	 ecx, 72			; 00000048H
  00307	f7 f1		 div	 ecx
  00309	8b c2		 mov	 eax, edx
  0030b	85 c0		 test	 eax, eax
  0030d	75 30		 jne	 SHORT $LN8@Encode

; 672  :       {
; 673  :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( CARRIAGE_RETURN );

  0030f	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  00312	b9 0d 00 00 00	 mov	 ecx, 13
  00317	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  0031b	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 674  :          number_of_bytes_encoded++;

  0031f	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  00322	ff c0		 inc	 eax
  00324	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax

; 675  : 
; 676  :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( LINE_FEED );

  00327	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  0032a	b9 0a 00 00 00	 mov	 ecx, 10
  0032f	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  00333	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 677  :          number_of_bytes_encoded++;

  00337	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  0033a	ff c0		 inc	 eax
  0033c	89 45 68	 mov	 DWORD PTR number_of_bytes_encoded$[rbp], eax
$LN8@Encode:

; 678  :       }
; 679  :    }

  0033f	e9 80 fd ff ff	 jmp	 $LN2@Encode
$LN3@Encode:

; 680  : 
; 681  :    destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA );

  00344	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  00347	b9 3d 00 00 00	 mov	 ecx, 61			; 0000003dH
  0034c	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  00350	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 682  : 
; 683  :    // 1999-09-01
; 684  :    // Thanks go to Yurong Lin (ylin@dial.pipex.com) for finding a bug here.
; 685  :    // We must NULL terminate the string before letting CString have the buffer back.
; 686  : 
; 687  :    destination[ number_of_bytes_encoded + 1 ] = 0;

  00354	8b 45 68	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rbp]
  00357	ff c0		 inc	 eax
  00359	8b c0		 mov	 eax, eax
  0035b	33 c9		 xor	 ecx, ecx
  0035d	48 8b 55 70	 mov	 rdx, QWORD PTR destination$[rbp]
  00361	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 688  : 
; 689  :    destination_string.ReleaseBuffer( -1 );

  00365	ba ff ff ff ff	 mov	 edx, -1
  0036a	48 8b 8d f0 00
	00 00		 mov	 rcx, QWORD PTR destination_string$[rbp]
  00371	e8 00 00 00 00	 call	 ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer

; 690  : 
; 691  :    return( TRUE );

  00376	b8 01 00 00 00	 mov	 eax, 1
$LN1@Encode:

; 692  : }

  0037b	48 8b 8d b8 00
	00 00		 mov	 rcx, QWORD PTR __$ArrayPad$[rbp]
  00382	48 33 cd	 xor	 rcx, rbp
  00385	e8 00 00 00 00	 call	 __security_check_cookie
  0038a	48 8d a5 c0 00
	00 00		 lea	 rsp, QWORD PTR [rbp+192]
  00391	5f		 pop	 rdi
  00392	5e		 pop	 rsi
  00393	5d		 pop	 rbp
  00394	c3		 ret	 0
?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z ENDP ; CBase64Coding::Encode
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp
;	COMDAT ?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z
_TEXT	SEGMENT
alphabet$ = 0
source_index$ = 80
number_of_bytes_to_encode$ = 84
byte_to_add$ = 88
byte_1$ = 89
byte_2$ = 90
byte_3$ = 91
input_buffer$ = 96
add_index$ = 104
__$ArrayPad$ = 176
this$ = 224
source$ = 232
destination$ = 240
?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z PROC ; CBase64Coding::Encode, COMDAT

; 448  : {

$LN9:
  00000	4c 89 44 24 18	 mov	 QWORD PTR [rsp+24], r8
  00005	48 89 54 24 10	 mov	 QWORD PTR [rsp+16], rdx
  0000a	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  0000f	55		 push	 rbp
  00010	56		 push	 rsi
  00011	57		 push	 rdi
  00012	48 81 ec e0 00
	00 00		 sub	 rsp, 224		; 000000e0H
  00019	48 8d 6c 24 20	 lea	 rbp, QWORD PTR [rsp+32]
  0001e	48 8b 05 00 00
	00 00		 mov	 rax, QWORD PTR __security_cookie
  00025	48 33 c5	 xor	 rax, rbp
  00028	48 89 85 b0 00
	00 00		 mov	 QWORD PTR __$ArrayPad$[rbp], rax

; 449  : 
; 450  :    // We don't want to make this static so we can reduce our
; 451  :    // footprint in the library
; 452  : 
; 453  :    const char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

  0002f	48 8d 45 00	 lea	 rax, QWORD PTR alphabet$[rbp]
  00033	48 8d 0d 00 00
	00 00		 lea	 rcx, OFFSET FLAT:??_C@_0EB@NFPJKBDG@ABCDEFGHIJKLMNOPQRSTUVWXYZabcde@
  0003a	48 8b f8	 mov	 rdi, rax
  0003d	48 8b f1	 mov	 rsi, rcx
  00040	b9 41 00 00 00	 mov	 ecx, 65			; 00000041H
  00045	f3 a4		 rep movsb

; 454  : 
; 455  :    int source_index              = 0;

  00047	c7 45 50 00 00
	00 00		 mov	 DWORD PTR source_index$[rbp], 0

; 456  :    int number_of_bytes_to_encode = (int)source.GetSize();

  0004e	48 8b 8d e8 00
	00 00		 mov	 rcx, QWORD PTR source$[rbp]
  00055	e8 00 00 00 00	 call	 ?GetSize@CByteArray@@QEBA_JXZ ; CByteArray::GetSize
  0005a	89 45 54	 mov	 DWORD PTR number_of_bytes_to_encode$[rbp], eax

; 457  :    
; 458  :    BYTE byte_to_add = 0;

  0005d	c6 45 58 00	 mov	 BYTE PTR byte_to_add$[rbp], 0

; 459  :    BYTE byte_1      = 0;

  00061	c6 45 59 00	 mov	 BYTE PTR byte_1$[rbp], 0

; 460  :    BYTE byte_2      = 0;

  00065	c6 45 5a 00	 mov	 BYTE PTR byte_2$[rbp], 0

; 461  :    BYTE byte_3      = 0;

  00069	c6 45 5b 00	 mov	 BYTE PTR byte_3$[rbp], 0

; 462  : 
; 463  :    const BYTE * input_buffer = source.GetData();

  0006d	48 8b 8d e8 00
	00 00		 mov	 rcx, QWORD PTR source$[rbp]
  00074	e8 00 00 00 00	 call	 ?GetData@CByteArray@@QEBAPEBEXZ ; CByteArray::GetData
  00079	48 89 45 60	 mov	 QWORD PTR input_buffer$[rbp], rax

; 464  : 
; 465  :    DWORD add_index = (DWORD) ( (double) number_of_bytes_to_encode / (double) 0.75 ) + 1;

  0007d	f2 0f 2a 45 54	 cvtsi2sd xmm0, DWORD PTR number_of_bytes_to_encode$[rbp]
  00082	f2 0f 5e 05 00
	00 00 00	 divsd	 xmm0, QWORD PTR __real@3fe8000000000000
  0008a	f2 48 0f 2c c0	 cvttsd2si rax, xmm0
  0008f	ff c0		 inc	 eax
  00091	89 45 68	 mov	 DWORD PTR add_index$[rbp], eax

; 466  :    add_index += ( ( number_of_bytes_to_encode % 3 ) + 1 );

  00094	8b 45 54	 mov	 eax, DWORD PTR number_of_bytes_to_encode$[rbp]
  00097	99		 cdq
  00098	b9 03 00 00 00	 mov	 ecx, 3
  0009d	f7 f9		 idiv	 ecx
  0009f	8b c2		 mov	 eax, edx
  000a1	8b 4d 68	 mov	 ecx, DWORD PTR add_index$[rbp]
  000a4	8d 44 01 01	 lea	 eax, DWORD PTR [rcx+rax+1]
  000a8	89 45 68	 mov	 DWORD PTR add_index$[rbp], eax

; 467  : 
; 468  :    destination.SetSize( add_index );

  000ab	8b 45 68	 mov	 eax, DWORD PTR add_index$[rbp]
  000ae	49 c7 c0 ff ff
	ff ff		 mov	 r8, -1
  000b5	8b d0		 mov	 edx, eax
  000b7	48 8b 8d f0 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  000be	e8 00 00 00 00	 call	 ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize

; 469  :    add_index = 0;

  000c3	c7 45 68 00 00
	00 00		 mov	 DWORD PTR add_index$[rbp], 0
$LN2@Encode:

; 470  : 
; 471  :    while( source_index < number_of_bytes_to_encode )

  000ca	8b 45 54	 mov	 eax, DWORD PTR number_of_bytes_to_encode$[rbp]
  000cd	39 45 50	 cmp	 DWORD PTR source_index$[rbp], eax
  000d0	0f 8d 68 02 00
	00		 jge	 $LN3@Encode

; 472  :    {
; 473  :       // Output the first byte
; 474  : 
; 475  :       byte_1 = input_buffer[ source_index ];

  000d6	48 63 45 50	 movsxd	 rax, DWORD PTR source_index$[rbp]
  000da	48 8b 4d 60	 mov	 rcx, QWORD PTR input_buffer$[rbp]
  000de	0f b6 04 01	 movzx	 eax, BYTE PTR [rcx+rax]
  000e2	88 45 59	 mov	 BYTE PTR byte_1$[rbp], al

; 476  :       byte_to_add = alphabet[ ( byte_1 >> 2 ) ];

  000e5	0f b6 45 59	 movzx	 eax, BYTE PTR byte_1$[rbp]
  000e9	c1 f8 02	 sar	 eax, 2
  000ec	48 98		 cdqe
  000ee	0f b6 44 05 00	 movzx	 eax, BYTE PTR alphabet$[rbp+rax]
  000f3	88 45 58	 mov	 BYTE PTR byte_to_add$[rbp], al

; 477  : 
; 478  :       destination.SetAt( add_index, byte_to_add );

  000f6	8b 45 68	 mov	 eax, DWORD PTR add_index$[rbp]
  000f9	44 0f b6 45 58	 movzx	 r8d, BYTE PTR byte_to_add$[rbp]
  000fe	8b d0		 mov	 edx, eax
  00100	48 8b 8d f0 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  00107	e8 00 00 00 00	 call	 ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt

; 479  :       add_index++;

  0010c	8b 45 68	 mov	 eax, DWORD PTR add_index$[rbp]
  0010f	ff c0		 inc	 eax
  00111	89 45 68	 mov	 DWORD PTR add_index$[rbp], eax

; 480  : 
; 481  :       source_index++;

  00114	8b 45 50	 mov	 eax, DWORD PTR source_index$[rbp]
  00117	ff c0		 inc	 eax
  00119	89 45 50	 mov	 DWORD PTR source_index$[rbp], eax

; 482  : 
; 483  :       if ( source_index >= number_of_bytes_to_encode )

  0011c	8b 45 54	 mov	 eax, DWORD PTR number_of_bytes_to_encode$[rbp]
  0011f	39 45 50	 cmp	 DWORD PTR source_index$[rbp], eax
  00122	0f 8c a1 00 00
	00		 jl	 $LN4@Encode

; 484  :       {
; 485  :          // We're at the end of the data to encode
; 486  : 
; 487  :          byte_2 = 0;

  00128	c6 45 5a 00	 mov	 BYTE PTR byte_2$[rbp], 0

; 488  :          byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ];

  0012c	0f b6 45 59	 movzx	 eax, BYTE PTR byte_1$[rbp]
  00130	83 e0 03	 and	 eax, 3
  00133	c1 e0 04	 shl	 eax, 4
  00136	0f b6 4d 5a	 movzx	 ecx, BYTE PTR byte_2$[rbp]
  0013a	81 e1 f0 00 00
	00		 and	 ecx, 240		; 000000f0H
  00140	c1 f9 04	 sar	 ecx, 4
  00143	0b c1		 or	 eax, ecx
  00145	48 98		 cdqe
  00147	0f b6 44 05 00	 movzx	 eax, BYTE PTR alphabet$[rbp+rax]
  0014c	88 45 58	 mov	 BYTE PTR byte_to_add$[rbp], al

; 489  : 
; 490  :          destination.SetAt( add_index, byte_to_add );

  0014f	8b 45 68	 mov	 eax, DWORD PTR add_index$[rbp]
  00152	44 0f b6 45 58	 movzx	 r8d, BYTE PTR byte_to_add$[rbp]
  00157	8b d0		 mov	 edx, eax
  00159	48 8b 8d f0 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  00160	e8 00 00 00 00	 call	 ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt

; 491  :          add_index++;

  00165	8b 45 68	 mov	 eax, DWORD PTR add_index$[rbp]
  00168	ff c0		 inc	 eax
  0016a	89 45 68	 mov	 DWORD PTR add_index$[rbp], eax

; 492  : 
; 493  :          destination.SetAt( add_index, END_OF_BASE64_ENCODED_DATA );

  0016d	8b 45 68	 mov	 eax, DWORD PTR add_index$[rbp]
  00170	41 b0 3d	 mov	 r8b, 61			; 0000003dH
  00173	8b d0		 mov	 edx, eax
  00175	48 8b 8d f0 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  0017c	e8 00 00 00 00	 call	 ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt

; 494  :          add_index++;

  00181	8b 45 68	 mov	 eax, DWORD PTR add_index$[rbp]
  00184	ff c0		 inc	 eax
  00186	89 45 68	 mov	 DWORD PTR add_index$[rbp], eax

; 495  : 
; 496  :          destination.SetAt( add_index, END_OF_BASE64_ENCODED_DATA );

  00189	8b 45 68	 mov	 eax, DWORD PTR add_index$[rbp]
  0018c	41 b0 3d	 mov	 r8b, 61			; 0000003dH
  0018f	8b d0		 mov	 edx, eax
  00191	48 8b 8d f0 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  00198	e8 00 00 00 00	 call	 ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt

; 497  :          add_index++;

  0019d	8b 45 68	 mov	 eax, DWORD PTR add_index$[rbp]
  001a0	ff c0		 inc	 eax
  001a2	89 45 68	 mov	 DWORD PTR add_index$[rbp], eax

; 498  : 
; 499  :          destination.SetSize( add_index );

  001a5	8b 45 68	 mov	 eax, DWORD PTR add_index$[rbp]
  001a8	49 c7 c0 ff ff
	ff ff		 mov	 r8, -1
  001af	8b d0		 mov	 edx, eax
  001b1	48 8b 8d f0 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  001b8	e8 00 00 00 00	 call	 ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize

; 500  :          return( TRUE );

  001bd	b8 01 00 00 00	 mov	 eax, 1
  001c2	e9 b0 01 00 00	 jmp	 $LN1@Encode

; 501  :       }

  001c7	eb 0f		 jmp	 SHORT $LN5@Encode
$LN4@Encode:

; 502  :       else
; 503  :       {
; 504  :          byte_2 = input_buffer[ source_index ];

  001c9	48 63 45 50	 movsxd	 rax, DWORD PTR source_index$[rbp]
  001cd	48 8b 4d 60	 mov	 rcx, QWORD PTR input_buffer$[rbp]
  001d1	0f b6 04 01	 movzx	 eax, BYTE PTR [rcx+rax]
  001d5	88 45 5a	 mov	 BYTE PTR byte_2$[rbp], al
$LN5@Encode:

; 505  :       }
; 506  : 
; 507  :       byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ];

  001d8	0f b6 45 59	 movzx	 eax, BYTE PTR byte_1$[rbp]
  001dc	83 e0 03	 and	 eax, 3
  001df	c1 e0 04	 shl	 eax, 4
  001e2	0f b6 4d 5a	 movzx	 ecx, BYTE PTR byte_2$[rbp]
  001e6	81 e1 f0 00 00
	00		 and	 ecx, 240		; 000000f0H
  001ec	c1 f9 04	 sar	 ecx, 4
  001ef	0b c1		 or	 eax, ecx
  001f1	48 98		 cdqe
  001f3	0f b6 44 05 00	 movzx	 eax, BYTE PTR alphabet$[rbp+rax]
  001f8	88 45 58	 mov	 BYTE PTR byte_to_add$[rbp], al

; 508  :       destination.SetAt( add_index, byte_to_add );

  001fb	8b 45 68	 mov	 eax, DWORD PTR add_index$[rbp]
  001fe	44 0f b6 45 58	 movzx	 r8d, BYTE PTR byte_to_add$[rbp]
  00203	8b d0		 mov	 edx, eax
  00205	48 8b 8d f0 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  0020c	e8 00 00 00 00	 call	 ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt

; 509  :       add_index++;

  00211	8b 45 68	 mov	 eax, DWORD PTR add_index$[rbp]
  00214	ff c0		 inc	 eax
  00216	89 45 68	 mov	 DWORD PTR add_index$[rbp], eax

; 510  : 
; 511  :       source_index++;

  00219	8b 45 50	 mov	 eax, DWORD PTR source_index$[rbp]
  0021c	ff c0		 inc	 eax
  0021e	89 45 50	 mov	 DWORD PTR source_index$[rbp], eax

; 512  : 
; 513  :       if ( source_index >= number_of_bytes_to_encode )

  00221	8b 45 54	 mov	 eax, DWORD PTR number_of_bytes_to_encode$[rbp]
  00224	39 45 50	 cmp	 DWORD PTR source_index$[rbp], eax
  00227	0f 8c 85 00 00
	00		 jl	 $LN6@Encode

; 514  :       {
; 515  :          // We ran out of bytes, we need to add the last half of byte_2 and pad
; 516  :          byte_3 = 0;

  0022d	c6 45 5b 00	 mov	 BYTE PTR byte_3$[rbp], 0

; 517  : 
; 518  :          byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ];

  00231	0f b6 45 5a	 movzx	 eax, BYTE PTR byte_2$[rbp]
  00235	83 e0 0f	 and	 eax, 15
  00238	c1 e0 02	 shl	 eax, 2
  0023b	0f b6 4d 5b	 movzx	 ecx, BYTE PTR byte_3$[rbp]
  0023f	81 e1 c0 00 00
	00		 and	 ecx, 192		; 000000c0H
  00245	c1 f9 06	 sar	 ecx, 6
  00248	0b c1		 or	 eax, ecx
  0024a	48 98		 cdqe
  0024c	0f b6 44 05 00	 movzx	 eax, BYTE PTR alphabet$[rbp+rax]
  00251	88 45 58	 mov	 BYTE PTR byte_to_add$[rbp], al

; 519  : 
; 520  :          destination.SetAt( add_index, byte_to_add );

  00254	8b 45 68	 mov	 eax, DWORD PTR add_index$[rbp]
  00257	44 0f b6 45 58	 movzx	 r8d, BYTE PTR byte_to_add$[rbp]
  0025c	8b d0		 mov	 edx, eax
  0025e	48 8b 8d f0 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  00265	e8 00 00 00 00	 call	 ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt

; 521  :          add_index++;

  0026a	8b 45 68	 mov	 eax, DWORD PTR add_index$[rbp]
  0026d	ff c0		 inc	 eax
  0026f	89 45 68	 mov	 DWORD PTR add_index$[rbp], eax

; 522  : 
; 523  :          destination.SetAt( add_index, END_OF_BASE64_ENCODED_DATA );

  00272	8b 45 68	 mov	 eax, DWORD PTR add_index$[rbp]
  00275	41 b0 3d	 mov	 r8b, 61			; 0000003dH
  00278	8b d0		 mov	 edx, eax
  0027a	48 8b 8d f0 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  00281	e8 00 00 00 00	 call	 ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt

; 524  :          add_index++;

  00286	8b 45 68	 mov	 eax, DWORD PTR add_index$[rbp]
  00289	ff c0		 inc	 eax
  0028b	89 45 68	 mov	 DWORD PTR add_index$[rbp], eax

; 525  : 
; 526  :          destination.SetSize( add_index );

  0028e	8b 45 68	 mov	 eax, DWORD PTR add_index$[rbp]
  00291	49 c7 c0 ff ff
	ff ff		 mov	 r8, -1
  00298	8b d0		 mov	 edx, eax
  0029a	48 8b 8d f0 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  002a1	e8 00 00 00 00	 call	 ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize

; 527  :          return( TRUE );

  002a6	b8 01 00 00 00	 mov	 eax, 1
  002ab	e9 c7 00 00 00	 jmp	 $LN1@Encode

; 528  :       }

  002b0	eb 0f		 jmp	 SHORT $LN7@Encode
$LN6@Encode:

; 529  :       else
; 530  :       {
; 531  :          byte_3 = input_buffer[ source_index ];

  002b2	48 63 45 50	 movsxd	 rax, DWORD PTR source_index$[rbp]
  002b6	48 8b 4d 60	 mov	 rcx, QWORD PTR input_buffer$[rbp]
  002ba	0f b6 04 01	 movzx	 eax, BYTE PTR [rcx+rax]
  002be	88 45 5b	 mov	 BYTE PTR byte_3$[rbp], al
$LN7@Encode:

; 532  :       }
; 533  : 
; 534  :       source_index++;

  002c1	8b 45 50	 mov	 eax, DWORD PTR source_index$[rbp]
  002c4	ff c0		 inc	 eax
  002c6	89 45 50	 mov	 DWORD PTR source_index$[rbp], eax

; 535  : 
; 536  :       byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ];

  002c9	0f b6 45 5a	 movzx	 eax, BYTE PTR byte_2$[rbp]
  002cd	83 e0 0f	 and	 eax, 15
  002d0	c1 e0 02	 shl	 eax, 2
  002d3	0f b6 4d 5b	 movzx	 ecx, BYTE PTR byte_3$[rbp]
  002d7	81 e1 c0 00 00
	00		 and	 ecx, 192		; 000000c0H
  002dd	c1 f9 06	 sar	 ecx, 6
  002e0	0b c1		 or	 eax, ecx
  002e2	48 98		 cdqe
  002e4	0f b6 44 05 00	 movzx	 eax, BYTE PTR alphabet$[rbp+rax]
  002e9	88 45 58	 mov	 BYTE PTR byte_to_add$[rbp], al

; 537  : 
; 538  :       destination.SetAt( add_index, byte_to_add );

  002ec	8b 45 68	 mov	 eax, DWORD PTR add_index$[rbp]
  002ef	44 0f b6 45 58	 movzx	 r8d, BYTE PTR byte_to_add$[rbp]
  002f4	8b d0		 mov	 edx, eax
  002f6	48 8b 8d f0 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  002fd	e8 00 00 00 00	 call	 ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt

; 539  :       add_index++;

  00302	8b 45 68	 mov	 eax, DWORD PTR add_index$[rbp]
  00305	ff c0		 inc	 eax
  00307	89 45 68	 mov	 DWORD PTR add_index$[rbp], eax

; 540  : 
; 541  :       byte_to_add = alphabet[ ( byte_3 & 0x3F ) ];

  0030a	0f b6 45 5b	 movzx	 eax, BYTE PTR byte_3$[rbp]
  0030e	83 e0 3f	 and	 eax, 63			; 0000003fH
  00311	48 98		 cdqe
  00313	0f b6 44 05 00	 movzx	 eax, BYTE PTR alphabet$[rbp+rax]
  00318	88 45 58	 mov	 BYTE PTR byte_to_add$[rbp], al

; 542  : 
; 543  :       destination.SetAt( add_index, byte_to_add );

  0031b	8b 45 68	 mov	 eax, DWORD PTR add_index$[rbp]
  0031e	44 0f b6 45 58	 movzx	 r8d, BYTE PTR byte_to_add$[rbp]
  00323	8b d0		 mov	 edx, eax
  00325	48 8b 8d f0 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  0032c	e8 00 00 00 00	 call	 ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt

; 544  :       add_index++;

  00331	8b 45 68	 mov	 eax, DWORD PTR add_index$[rbp]
  00334	ff c0		 inc	 eax
  00336	89 45 68	 mov	 DWORD PTR add_index$[rbp], eax

; 545  :    }

  00339	e9 8c fd ff ff	 jmp	 $LN2@Encode
$LN3@Encode:

; 546  : 
; 547  :    destination.SetAt( add_index, END_OF_BASE64_ENCODED_DATA );

  0033e	8b 45 68	 mov	 eax, DWORD PTR add_index$[rbp]
  00341	41 b0 3d	 mov	 r8b, 61			; 0000003dH
  00344	8b d0		 mov	 edx, eax
  00346	48 8b 8d f0 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  0034d	e8 00 00 00 00	 call	 ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt

; 548  :    add_index++;

  00352	8b 45 68	 mov	 eax, DWORD PTR add_index$[rbp]
  00355	ff c0		 inc	 eax
  00357	89 45 68	 mov	 DWORD PTR add_index$[rbp], eax

; 549  : 
; 550  :    destination.SetSize( add_index );

  0035a	8b 45 68	 mov	 eax, DWORD PTR add_index$[rbp]
  0035d	49 c7 c0 ff ff
	ff ff		 mov	 r8, -1
  00364	8b d0		 mov	 edx, eax
  00366	48 8b 8d f0 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  0036d	e8 00 00 00 00	 call	 ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize

; 551  :    return( TRUE );

  00372	b8 01 00 00 00	 mov	 eax, 1
$LN1@Encode:

; 552  : }

  00377	48 8b 8d b0 00
	00 00		 mov	 rcx, QWORD PTR __$ArrayPad$[rbp]
  0037e	48 33 cd	 xor	 rcx, rbp
  00381	e8 00 00 00 00	 call	 __security_check_cookie
  00386	48 8d a5 c0 00
	00 00		 lea	 rsp, QWORD PTR [rbp+192]
  0038d	5f		 pop	 rdi
  0038e	5e		 pop	 rsi
  0038f	5d		 pop	 rbp
  00390	c3		 ret	 0
?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z ENDP ; CBase64Coding::Encode
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp
;	COMDAT ?Decode@CBase64Coding@@UEAAHAEBV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@AEAVCByteArray@@@Z
_TEXT	SEGMENT
return_value$ = 0
byte_to_add$ = 4
character_1$ = 5
character_2$ = 6
character_3$ = 7
character_4$ = 8
index$ = 12
number_of_bytes_to_decode$ = 16
add_index$ = 20
input_buffer$ = 24
this$ = 112
source$ = 120
destination$ = 128
?Decode@CBase64Coding@@UEAAHAEBV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@AEAVCByteArray@@@Z PROC ; CBase64Coding::Decode, COMDAT

; 302  : {

$LN23:
  00000	4c 89 44 24 18	 mov	 QWORD PTR [rsp+24], r8
  00005	48 89 54 24 10	 mov	 QWORD PTR [rsp+16], rdx
  0000a	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  0000f	55		 push	 rbp
  00010	48 81 ec 80 00
	00 00		 sub	 rsp, 128		; 00000080H
  00017	48 8d 6c 24 20	 lea	 rbp, QWORD PTR [rsp+32]

; 303  : 
; 304  :    if ( m_DecoderTable[ 0 ] == 0x00 )

  0001c	b8 01 00 00 00	 mov	 eax, 1
  00021	48 6b c0 00	 imul	 rax, rax, 0
  00025	48 8b 4d 70	 mov	 rcx, QWORD PTR this$[rbp]
  00029	0f b6 44 01 08	 movzx	 eax, BYTE PTR [rcx+rax+8]
  0002e	85 c0		 test	 eax, eax
  00030	75 0d		 jne	 SHORT $LN4@Decode

; 305  :    {
; 306  :       m_InitializeDecoderTable();

  00032	48 8b 45 70	 mov	 rax, QWORD PTR this$[rbp]
  00036	48 8b 00	 mov	 rax, QWORD PTR [rax]
  00039	48 8b 4d 70	 mov	 rcx, QWORD PTR this$[rbp]
  0003d	ff 10		 call	 QWORD PTR [rax]
$LN4@Decode:

; 307  :    }
; 308  : 
; 309  :    BOOL return_value = TRUE; //Ĭ�Ϸ��سɹ�

  0003f	c7 45 00 01 00
	00 00		 mov	 DWORD PTR return_value$[rbp], 1

; 310  : 
; 311  :    BYTE byte_to_add = 0;

  00046	c6 45 04 00	 mov	 BYTE PTR byte_to_add$[rbp], 0

; 312  :    BYTE character_1 = 0;

  0004a	c6 45 05 00	 mov	 BYTE PTR character_1$[rbp], 0

; 313  :    BYTE character_2 = 0;

  0004e	c6 45 06 00	 mov	 BYTE PTR character_2$[rbp], 0

; 314  :    BYTE character_3 = 0;

  00052	c6 45 07 00	 mov	 BYTE PTR character_3$[rbp], 0

; 315  :    BYTE character_4 = 0;

  00056	c6 45 08 00	 mov	 BYTE PTR character_4$[rbp], 0

; 316  : 
; 317  :    int index                     = 0;

  0005a	c7 45 0c 00 00
	00 00		 mov	 DWORD PTR index$[rbp], 0

; 318  :    int number_of_bytes_to_decode = source.GetLength();

  00061	48 8b 4d 78	 mov	 rcx, QWORD PTR source$[rbp]
  00065	e8 00 00 00 00	 call	 ?GetLength@?$CSimpleStringT@D$0A@@ATL@@QEBAHXZ ; ATL::CSimpleStringT<char,0>::GetLength
  0006a	89 45 10	 mov	 DWORD PTR number_of_bytes_to_decode$[rbp], eax

; 319  : 
; 320  :    DWORD add_index = (DWORD) ( (double) number_of_bytes_to_decode * (double) 0.75 ) + 1;

  0006d	f2 0f 2a 45 10	 cvtsi2sd xmm0, DWORD PTR number_of_bytes_to_decode$[rbp]
  00072	f2 0f 59 05 00
	00 00 00	 mulsd	 xmm0, QWORD PTR __real@3fe8000000000000
  0007a	f2 48 0f 2c c0	 cvttsd2si rax, xmm0
  0007f	ff c0		 inc	 eax
  00081	89 45 14	 mov	 DWORD PTR add_index$[rbp], eax

; 321  : 
; 322  :    destination.SetSize( add_index );

  00084	8b 45 14	 mov	 eax, DWORD PTR add_index$[rbp]
  00087	49 c7 c0 ff ff
	ff ff		 mov	 r8, -1
  0008e	8b d0		 mov	 edx, eax
  00090	48 8b 8d 80 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  00097	e8 00 00 00 00	 call	 ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize

; 323  :    add_index = 0;

  0009c	c7 45 14 00 00
	00 00		 mov	 DWORD PTR add_index$[rbp], 0

; 324  : 
; 325  :    // Since we're decoding, we are most likely in a performance-minded
; 326  :    // part of an application, let's go for a speedy method for accessing
; 327  :    // the source data.
; 328  : 
; 329  :    char * input_buffer = (char*)(const char *)source;

  000a3	48 8b 4d 78	 mov	 rcx, QWORD PTR source$[rbp]
  000a7	e8 00 00 00 00	 call	 ??B?$CSimpleStringT@D$0A@@ATL@@QEBAPEBDXZ ; ATL::CSimpleStringT<char,0>::operator char const *
  000ac	48 89 45 18	 mov	 QWORD PTR input_buffer$[rbp], rax
$LN2@Decode:

; 330  : 
; 331  :    while( index < number_of_bytes_to_decode )

  000b0	8b 45 10	 mov	 eax, DWORD PTR number_of_bytes_to_decode$[rbp]
  000b3	39 45 0c	 cmp	 DWORD PTR index$[rbp], eax
  000b6	0f 8d 02 03 00
	00		 jge	 $LN3@Decode

; 332  :    {
; 333  :       character_1 = __get_character( reinterpret_cast< const BYTE * >( input_buffer ), m_DecoderTable, index, number_of_bytes_to_decode );

  000bc	48 8b 45 70	 mov	 rax, QWORD PTR this$[rbp]
  000c0	48 83 c0 08	 add	 rax, 8
  000c4	44 8b 4d 10	 mov	 r9d, DWORD PTR number_of_bytes_to_decode$[rbp]
  000c8	4c 8d 45 0c	 lea	 r8, QWORD PTR index$[rbp]
  000cc	48 8b d0	 mov	 rdx, rax
  000cf	48 8b 4d 18	 mov	 rcx, QWORD PTR input_buffer$[rbp]
  000d3	e8 00 00 00 00	 call	 ?__get_character@@YAEPEBE0AEAHH@Z ; __get_character
  000d8	88 45 05	 mov	 BYTE PTR character_1$[rbp], al

; 334  : 
; 335  :       if ( character_1 != END_OF_BASE64_ENCODED_DATA )

  000db	0f b6 45 05	 movzx	 eax, BYTE PTR character_1$[rbp]
  000df	83 f8 3d	 cmp	 eax, 61			; 0000003dH
  000e2	0f 84 62 01 00
	00		 je	 $LN5@Decode

; 336  :       {
; 337  :          if ( m_DecoderTable[ character_1 ] == BASE64_UNKNOWN_VALUE )

  000e8	0f b6 45 05	 movzx	 eax, BYTE PTR character_1$[rbp]
  000ec	48 8b 4d 70	 mov	 rcx, QWORD PTR this$[rbp]
  000f0	0f b6 44 01 08	 movzx	 eax, BYTE PTR [rcx+rax+8]
  000f5	3d ff 00 00 00	 cmp	 eax, 255		; 000000ffH
  000fa	75 13		 jne	 SHORT $LN7@Decode

; 338  :          {
; 339  :             destination.RemoveAll();

  000fc	48 8b 8d 80 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  00103	e8 00 00 00 00	 call	 ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll

; 340  :             return( FALSE );

  00108	33 c0		 xor	 eax, eax
  0010a	e9 ca 02 00 00	 jmp	 $LN1@Decode
$LN7@Decode:

; 341  :          }
; 342  : 
; 343  :          character_2 = __get_character( reinterpret_cast< const BYTE * >( input_buffer ), m_DecoderTable, index, number_of_bytes_to_decode );

  0010f	48 8b 45 70	 mov	 rax, QWORD PTR this$[rbp]
  00113	48 83 c0 08	 add	 rax, 8
  00117	44 8b 4d 10	 mov	 r9d, DWORD PTR number_of_bytes_to_decode$[rbp]
  0011b	4c 8d 45 0c	 lea	 r8, QWORD PTR index$[rbp]
  0011f	48 8b d0	 mov	 rdx, rax
  00122	48 8b 4d 18	 mov	 rcx, QWORD PTR input_buffer$[rbp]
  00126	e8 00 00 00 00	 call	 ?__get_character@@YAEPEBE0AEAHH@Z ; __get_character
  0012b	88 45 06	 mov	 BYTE PTR character_2$[rbp], al

; 344  : 
; 345  :          if ( character_2 != END_OF_BASE64_ENCODED_DATA )

  0012e	0f b6 45 06	 movzx	 eax, BYTE PTR character_2$[rbp]
  00132	83 f8 3d	 cmp	 eax, 61			; 0000003dH
  00135	0f 84 05 01 00
	00		 je	 $LN8@Decode

; 346  :          {
; 347  :             if ( m_DecoderTable[ character_2 ] == BASE64_UNKNOWN_VALUE )

  0013b	0f b6 45 06	 movzx	 eax, BYTE PTR character_2$[rbp]
  0013f	48 8b 4d 70	 mov	 rcx, QWORD PTR this$[rbp]
  00143	0f b6 44 01 08	 movzx	 eax, BYTE PTR [rcx+rax+8]
  00148	3d ff 00 00 00	 cmp	 eax, 255		; 000000ffH
  0014d	75 13		 jne	 SHORT $LN10@Decode

; 348  :             {
; 349  :                destination.RemoveAll();

  0014f	48 8b 8d 80 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  00156	e8 00 00 00 00	 call	 ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll

; 350  :                return( FALSE );

  0015b	33 c0		 xor	 eax, eax
  0015d	e9 77 02 00 00	 jmp	 $LN1@Decode
$LN10@Decode:

; 351  :             }
; 352  : 
; 353  :             character_3 = __get_character( reinterpret_cast< const BYTE * >( input_buffer ), m_DecoderTable, index, number_of_bytes_to_decode );

  00162	48 8b 45 70	 mov	 rax, QWORD PTR this$[rbp]
  00166	48 83 c0 08	 add	 rax, 8
  0016a	44 8b 4d 10	 mov	 r9d, DWORD PTR number_of_bytes_to_decode$[rbp]
  0016e	4c 8d 45 0c	 lea	 r8, QWORD PTR index$[rbp]
  00172	48 8b d0	 mov	 rdx, rax
  00175	48 8b 4d 18	 mov	 rcx, QWORD PTR input_buffer$[rbp]
  00179	e8 00 00 00 00	 call	 ?__get_character@@YAEPEBE0AEAHH@Z ; __get_character
  0017e	88 45 07	 mov	 BYTE PTR character_3$[rbp], al

; 354  : 
; 355  :             if ( character_3 != END_OF_BASE64_ENCODED_DATA )

  00181	0f b6 45 07	 movzx	 eax, BYTE PTR character_3$[rbp]
  00185	83 f8 3d	 cmp	 eax, 61			; 0000003dH
  00188	0f 84 ac 00 00
	00		 je	 $LN11@Decode

; 356  :             {
; 357  :                if ( m_DecoderTable[ character_3 ] == BASE64_UNKNOWN_VALUE )

  0018e	0f b6 45 07	 movzx	 eax, BYTE PTR character_3$[rbp]
  00192	48 8b 4d 70	 mov	 rcx, QWORD PTR this$[rbp]
  00196	0f b6 44 01 08	 movzx	 eax, BYTE PTR [rcx+rax+8]
  0019b	3d ff 00 00 00	 cmp	 eax, 255		; 000000ffH
  001a0	75 13		 jne	 SHORT $LN13@Decode

; 358  :                {
; 359  :                   destination.RemoveAll();

  001a2	48 8b 8d 80 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  001a9	e8 00 00 00 00	 call	 ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll

; 360  :                   return( FALSE );

  001ae	33 c0		 xor	 eax, eax
  001b0	e9 24 02 00 00	 jmp	 $LN1@Decode
$LN13@Decode:

; 361  :                }
; 362  : 
; 363  :                character_4 = __get_character( reinterpret_cast< const BYTE * >( input_buffer ), m_DecoderTable, index, number_of_bytes_to_decode );

  001b5	48 8b 45 70	 mov	 rax, QWORD PTR this$[rbp]
  001b9	48 83 c0 08	 add	 rax, 8
  001bd	44 8b 4d 10	 mov	 r9d, DWORD PTR number_of_bytes_to_decode$[rbp]
  001c1	4c 8d 45 0c	 lea	 r8, QWORD PTR index$[rbp]
  001c5	48 8b d0	 mov	 rdx, rax
  001c8	48 8b 4d 18	 mov	 rcx, QWORD PTR input_buffer$[rbp]
  001cc	e8 00 00 00 00	 call	 ?__get_character@@YAEPEBE0AEAHH@Z ; __get_character
  001d1	88 45 08	 mov	 BYTE PTR character_4$[rbp], al

; 364  : 
; 365  :                if ( character_4 != END_OF_BASE64_ENCODED_DATA )

  001d4	0f b6 45 08	 movzx	 eax, BYTE PTR character_4$[rbp]
  001d8	83 f8 3d	 cmp	 eax, 61			; 0000003dH
  001db	74 27		 je	 SHORT $LN14@Decode

; 366  :                {
; 367  :                   if ( m_DecoderTable[ character_4 ] == BASE64_UNKNOWN_VALUE )

  001dd	0f b6 45 08	 movzx	 eax, BYTE PTR character_4$[rbp]
  001e1	48 8b 4d 70	 mov	 rcx, QWORD PTR this$[rbp]
  001e5	0f b6 44 01 08	 movzx	 eax, BYTE PTR [rcx+rax+8]
  001ea	3d ff 00 00 00	 cmp	 eax, 255		; 000000ffH
  001ef	75 13		 jne	 SHORT $LN15@Decode

; 368  :                   {
; 369  :                      destination.RemoveAll();

  001f1	48 8b 8d 80 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  001f8	e8 00 00 00 00	 call	 ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll

; 370  :                      return( FALSE );

  001fd	33 c0		 xor	 eax, eax
  001ff	e9 d5 01 00 00	 jmp	 $LN1@Decode
$LN15@Decode:
$LN14@Decode:

; 371  :                   }
; 372  :                }
; 373  : 
; 374  :                if ( character_2 == BASE64_END_OF_BUFFER ||
; 375  :                     character_3 == BASE64_END_OF_BUFFER ||

  00204	0f b6 45 06	 movzx	 eax, BYTE PTR character_2$[rbp]
  00208	3d fd 00 00 00	 cmp	 eax, 253		; 000000fdH
  0020d	74 16		 je	 SHORT $LN17@Decode
  0020f	0f b6 45 07	 movzx	 eax, BYTE PTR character_3$[rbp]
  00213	3d fd 00 00 00	 cmp	 eax, 253		; 000000fdH
  00218	74 0b		 je	 SHORT $LN17@Decode
  0021a	0f b6 45 08	 movzx	 eax, BYTE PTR character_4$[rbp]
  0021e	3d fd 00 00 00	 cmp	 eax, 253		; 000000fdH
  00223	75 13		 jne	 SHORT $LN16@Decode
$LN17@Decode:

; 376  :                     character_4 == BASE64_END_OF_BUFFER )
; 377  :                { 
; 378  :                   destination.RemoveAll();

  00225	48 8b 8d 80 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  0022c	e8 00 00 00 00	 call	 ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll

; 379  :                   return( FALSE );

  00231	33 c0		 xor	 eax, eax
  00233	e9 a1 01 00 00	 jmp	 $LN1@Decode
$LN16@Decode:

; 380  :                }
; 381  :             }

  00238	eb 04		 jmp	 SHORT $LN12@Decode
$LN11@Decode:

; 382  :             else
; 383  :             {
; 384  :                character_4 = END_OF_BASE64_ENCODED_DATA;

  0023a	c6 45 08 3d	 mov	 BYTE PTR character_4$[rbp], 61 ; 0000003dH
$LN12@Decode:

; 385  :             }
; 386  :          }

  0023e	eb 08		 jmp	 SHORT $LN9@Decode
$LN8@Decode:

; 387  :          else
; 388  :          {
; 389  :             character_3 = END_OF_BASE64_ENCODED_DATA;

  00240	c6 45 07 3d	 mov	 BYTE PTR character_3$[rbp], 61 ; 0000003dH

; 390  :             character_4 = END_OF_BASE64_ENCODED_DATA;

  00244	c6 45 08 3d	 mov	 BYTE PTR character_4$[rbp], 61 ; 0000003dH
$LN9@Decode:

; 391  :          }
; 392  :       }

  00248	eb 0c		 jmp	 SHORT $LN6@Decode
$LN5@Decode:

; 393  :       else
; 394  :       {
; 395  :          character_2 = END_OF_BASE64_ENCODED_DATA;

  0024a	c6 45 06 3d	 mov	 BYTE PTR character_2$[rbp], 61 ; 0000003dH

; 396  :          character_3 = END_OF_BASE64_ENCODED_DATA;

  0024e	c6 45 07 3d	 mov	 BYTE PTR character_3$[rbp], 61 ; 0000003dH

; 397  :          character_4 = END_OF_BASE64_ENCODED_DATA;

  00252	c6 45 08 3d	 mov	 BYTE PTR character_4$[rbp], 61 ; 0000003dH
$LN6@Decode:

; 398  :       }
; 399  : 
; 400  :       if ( character_1 == END_OF_BASE64_ENCODED_DATA ||

  00256	0f b6 45 05	 movzx	 eax, BYTE PTR character_1$[rbp]
  0025a	83 f8 3d	 cmp	 eax, 61			; 0000003dH
  0025d	74 09		 je	 SHORT $LN19@Decode
  0025f	0f b6 45 06	 movzx	 eax, BYTE PTR character_2$[rbp]
  00263	83 f8 3d	 cmp	 eax, 61			; 0000003dH
  00266	75 22		 jne	 SHORT $LN18@Decode
$LN19@Decode:

; 401  :            character_2 == END_OF_BASE64_ENCODED_DATA )
; 402  :       {
; 403  :          destination.SetSize( add_index );

  00268	8b 45 14	 mov	 eax, DWORD PTR add_index$[rbp]
  0026b	49 c7 c0 ff ff
	ff ff		 mov	 r8, -1
  00272	8b d0		 mov	 edx, eax
  00274	48 8b 8d 80 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  0027b	e8 00 00 00 00	 call	 ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize

; 404  :          return( TRUE );

  00280	b8 01 00 00 00	 mov	 eax, 1
  00285	e9 4f 01 00 00	 jmp	 $LN1@Decode
$LN18@Decode:

; 405  :       }
; 406  : 
; 407  :       character_1 = m_DecoderTable[ character_1 ];

  0028a	0f b6 45 05	 movzx	 eax, BYTE PTR character_1$[rbp]
  0028e	48 8b 4d 70	 mov	 rcx, QWORD PTR this$[rbp]
  00292	0f b6 44 01 08	 movzx	 eax, BYTE PTR [rcx+rax+8]
  00297	88 45 05	 mov	 BYTE PTR character_1$[rbp], al

; 408  :       character_2 = m_DecoderTable[ character_2 ];

  0029a	0f b6 45 06	 movzx	 eax, BYTE PTR character_2$[rbp]
  0029e	48 8b 4d 70	 mov	 rcx, QWORD PTR this$[rbp]
  002a2	0f b6 44 01 08	 movzx	 eax, BYTE PTR [rcx+rax+8]
  002a7	88 45 06	 mov	 BYTE PTR character_2$[rbp], al

; 409  : 
; 410  :       byte_to_add = static_cast< BYTE>( ( ( character_1 << 2 ) | ( ( character_2 & 0x30 ) >> 4 ) ) );

  002aa	0f b6 45 05	 movzx	 eax, BYTE PTR character_1$[rbp]
  002ae	c1 e0 02	 shl	 eax, 2
  002b1	0f b6 4d 06	 movzx	 ecx, BYTE PTR character_2$[rbp]
  002b5	83 e1 30	 and	 ecx, 48			; 00000030H
  002b8	c1 f9 04	 sar	 ecx, 4
  002bb	0b c1		 or	 eax, ecx
  002bd	88 45 04	 mov	 BYTE PTR byte_to_add$[rbp], al

; 411  : 
; 412  :       destination.SetAt( add_index, byte_to_add );

  002c0	8b 45 14	 mov	 eax, DWORD PTR add_index$[rbp]
  002c3	44 0f b6 45 04	 movzx	 r8d, BYTE PTR byte_to_add$[rbp]
  002c8	8b d0		 mov	 edx, eax
  002ca	48 8b 8d 80 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  002d1	e8 00 00 00 00	 call	 ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt

; 413  :       add_index++;

  002d6	8b 45 14	 mov	 eax, DWORD PTR add_index$[rbp]
  002d9	ff c0		 inc	 eax
  002db	89 45 14	 mov	 DWORD PTR add_index$[rbp], eax

; 414  : 
; 415  :       if ( character_3 == END_OF_BASE64_ENCODED_DATA )

  002de	0f b6 45 07	 movzx	 eax, BYTE PTR character_3$[rbp]
  002e2	83 f8 3d	 cmp	 eax, 61			; 0000003dH
  002e5	75 22		 jne	 SHORT $LN20@Decode

; 416  :       {
; 417  :          destination.SetSize( add_index );

  002e7	8b 45 14	 mov	 eax, DWORD PTR add_index$[rbp]
  002ea	49 c7 c0 ff ff
	ff ff		 mov	 r8, -1
  002f1	8b d0		 mov	 edx, eax
  002f3	48 8b 8d 80 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  002fa	e8 00 00 00 00	 call	 ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize

; 418  :          return( TRUE );

  002ff	b8 01 00 00 00	 mov	 eax, 1
  00304	e9 d0 00 00 00	 jmp	 $LN1@Decode
$LN20@Decode:

; 419  :       }
; 420  : 
; 421  :       character_3 = m_DecoderTable[ character_3 ];

  00309	0f b6 45 07	 movzx	 eax, BYTE PTR character_3$[rbp]
  0030d	48 8b 4d 70	 mov	 rcx, QWORD PTR this$[rbp]
  00311	0f b6 44 01 08	 movzx	 eax, BYTE PTR [rcx+rax+8]
  00316	88 45 07	 mov	 BYTE PTR character_3$[rbp], al

; 422  : 
; 423  :       byte_to_add = static_cast< BYTE >( ( ( ( ( character_2 & 0x0F ) << 4 ) | ( ( character_3 & 0x3C ) >> 2 ) ) ) );

  00319	0f b6 45 06	 movzx	 eax, BYTE PTR character_2$[rbp]
  0031d	83 e0 0f	 and	 eax, 15
  00320	c1 e0 04	 shl	 eax, 4
  00323	0f b6 4d 07	 movzx	 ecx, BYTE PTR character_3$[rbp]
  00327	83 e1 3c	 and	 ecx, 60			; 0000003cH
  0032a	c1 f9 02	 sar	 ecx, 2
  0032d	0b c1		 or	 eax, ecx
  0032f	88 45 04	 mov	 BYTE PTR byte_to_add$[rbp], al

; 424  : 
; 425  :       destination.SetAt( add_index, byte_to_add );

  00332	8b 45 14	 mov	 eax, DWORD PTR add_index$[rbp]
  00335	44 0f b6 45 04	 movzx	 r8d, BYTE PTR byte_to_add$[rbp]
  0033a	8b d0		 mov	 edx, eax
  0033c	48 8b 8d 80 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  00343	e8 00 00 00 00	 call	 ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt

; 426  :       add_index++;

  00348	8b 45 14	 mov	 eax, DWORD PTR add_index$[rbp]
  0034b	ff c0		 inc	 eax
  0034d	89 45 14	 mov	 DWORD PTR add_index$[rbp], eax

; 427  : 
; 428  :       if ( character_4 == END_OF_BASE64_ENCODED_DATA )

  00350	0f b6 45 08	 movzx	 eax, BYTE PTR character_4$[rbp]
  00354	83 f8 3d	 cmp	 eax, 61			; 0000003dH
  00357	75 1f		 jne	 SHORT $LN21@Decode

; 429  :       {
; 430  :          destination.SetSize( add_index );

  00359	8b 45 14	 mov	 eax, DWORD PTR add_index$[rbp]
  0035c	49 c7 c0 ff ff
	ff ff		 mov	 r8, -1
  00363	8b d0		 mov	 edx, eax
  00365	48 8b 8d 80 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  0036c	e8 00 00 00 00	 call	 ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize

; 431  :          return( TRUE );

  00371	b8 01 00 00 00	 mov	 eax, 1
  00376	eb 61		 jmp	 SHORT $LN1@Decode
$LN21@Decode:

; 432  :       }
; 433  : 
; 434  :       character_4 = m_DecoderTable[ character_4 ];

  00378	0f b6 45 08	 movzx	 eax, BYTE PTR character_4$[rbp]
  0037c	48 8b 4d 70	 mov	 rcx, QWORD PTR this$[rbp]
  00380	0f b6 44 01 08	 movzx	 eax, BYTE PTR [rcx+rax+8]
  00385	88 45 08	 mov	 BYTE PTR character_4$[rbp], al

; 435  : 
; 436  :       byte_to_add = static_cast< BYTE >( ( ( ( character_3 & 0x03 ) << 6 ) | character_4 ) );

  00388	0f b6 45 07	 movzx	 eax, BYTE PTR character_3$[rbp]
  0038c	83 e0 03	 and	 eax, 3
  0038f	c1 e0 06	 shl	 eax, 6
  00392	0f b6 4d 08	 movzx	 ecx, BYTE PTR character_4$[rbp]
  00396	0b c1		 or	 eax, ecx
  00398	88 45 04	 mov	 BYTE PTR byte_to_add$[rbp], al

; 437  : 
; 438  :       destination.SetAt( add_index, byte_to_add );

  0039b	8b 45 14	 mov	 eax, DWORD PTR add_index$[rbp]
  0039e	44 0f b6 45 04	 movzx	 r8d, BYTE PTR byte_to_add$[rbp]
  003a3	8b d0		 mov	 edx, eax
  003a5	48 8b 8d 80 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  003ac	e8 00 00 00 00	 call	 ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt

; 439  :       add_index++;

  003b1	8b 45 14	 mov	 eax, DWORD PTR add_index$[rbp]
  003b4	ff c0		 inc	 eax
  003b6	89 45 14	 mov	 DWORD PTR add_index$[rbp], eax

; 440  :    }

  003b9	e9 f2 fc ff ff	 jmp	 $LN2@Decode
$LN3@Decode:

; 441  : 
; 442  :    destination.SetSize( add_index );

  003be	8b 45 14	 mov	 eax, DWORD PTR add_index$[rbp]
  003c1	49 c7 c0 ff ff
	ff ff		 mov	 r8, -1
  003c8	8b d0		 mov	 edx, eax
  003ca	48 8b 8d 80 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  003d1	e8 00 00 00 00	 call	 ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize

; 443  : 
; 444  :    return( return_value );

  003d6	8b 45 00	 mov	 eax, DWORD PTR return_value$[rbp]
$LN1@Decode:

; 445  : }

  003d9	48 8d 65 60	 lea	 rsp, QWORD PTR [rbp+96]
  003dd	5d		 pop	 rbp
  003de	c3		 ret	 0
?Decode@CBase64Coding@@UEAAHAEBV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@AEAVCByteArray@@@Z ENDP ; CBase64Coding::Decode
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp
;	COMDAT ?Decode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z
_TEXT	SEGMENT
return_value$ = 0
byte_to_add$ = 4
character_1$ = 5
character_2$ = 6
character_3$ = 7
character_4$ = 8
index$ = 12
number_of_bytes_to_decode$ = 16
add_index$ = 20
input_buffer$ = 24
this$ = 112
source$ = 120
destination$ = 128
?Decode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z PROC ; CBase64Coding::Decode, COMDAT

; 156  : {

$LN23:
  00000	4c 89 44 24 18	 mov	 QWORD PTR [rsp+24], r8
  00005	48 89 54 24 10	 mov	 QWORD PTR [rsp+16], rdx
  0000a	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  0000f	55		 push	 rbp
  00010	48 81 ec 80 00
	00 00		 sub	 rsp, 128		; 00000080H
  00017	48 8d 6c 24 20	 lea	 rbp, QWORD PTR [rsp+32]

; 157  : 
; 158  :    if ( m_DecoderTable[ 0 ] == 0x00 )

  0001c	b8 01 00 00 00	 mov	 eax, 1
  00021	48 6b c0 00	 imul	 rax, rax, 0
  00025	48 8b 4d 70	 mov	 rcx, QWORD PTR this$[rbp]
  00029	0f b6 44 01 08	 movzx	 eax, BYTE PTR [rcx+rax+8]
  0002e	85 c0		 test	 eax, eax
  00030	75 0d		 jne	 SHORT $LN4@Decode

; 159  :    {
; 160  :       m_InitializeDecoderTable();

  00032	48 8b 45 70	 mov	 rax, QWORD PTR this$[rbp]
  00036	48 8b 00	 mov	 rax, QWORD PTR [rax]
  00039	48 8b 4d 70	 mov	 rcx, QWORD PTR this$[rbp]
  0003d	ff 10		 call	 QWORD PTR [rax]
$LN4@Decode:

; 161  :    }
; 162  : 
; 163  :    BOOL return_value = FALSE;

  0003f	c7 45 00 00 00
	00 00		 mov	 DWORD PTR return_value$[rbp], 0

; 164  : 
; 165  :    BYTE byte_to_add = 0;

  00046	c6 45 04 00	 mov	 BYTE PTR byte_to_add$[rbp], 0

; 166  :    BYTE character_1 = 0;

  0004a	c6 45 05 00	 mov	 BYTE PTR character_1$[rbp], 0

; 167  :    BYTE character_2 = 0;

  0004e	c6 45 06 00	 mov	 BYTE PTR character_2$[rbp], 0

; 168  :    BYTE character_3 = 0;

  00052	c6 45 07 00	 mov	 BYTE PTR character_3$[rbp], 0

; 169  :    BYTE character_4 = 0;

  00056	c6 45 08 00	 mov	 BYTE PTR character_4$[rbp], 0

; 170  : 
; 171  :    int index                     = 0;

  0005a	c7 45 0c 00 00
	00 00		 mov	 DWORD PTR index$[rbp], 0

; 172  :    int number_of_bytes_to_decode = (int)source.GetSize();

  00061	48 8b 4d 78	 mov	 rcx, QWORD PTR source$[rbp]
  00065	e8 00 00 00 00	 call	 ?GetSize@CByteArray@@QEBA_JXZ ; CByteArray::GetSize
  0006a	89 45 10	 mov	 DWORD PTR number_of_bytes_to_decode$[rbp], eax

; 173  : 
; 174  :    DWORD add_index = (DWORD) ( (double) number_of_bytes_to_decode * (double) 0.75 ) + 1;

  0006d	f2 0f 2a 45 10	 cvtsi2sd xmm0, DWORD PTR number_of_bytes_to_decode$[rbp]
  00072	f2 0f 59 05 00
	00 00 00	 mulsd	 xmm0, QWORD PTR __real@3fe8000000000000
  0007a	f2 48 0f 2c c0	 cvttsd2si rax, xmm0
  0007f	ff c0		 inc	 eax
  00081	89 45 14	 mov	 DWORD PTR add_index$[rbp], eax

; 175  : 
; 176  :    destination.SetSize( add_index );

  00084	8b 45 14	 mov	 eax, DWORD PTR add_index$[rbp]
  00087	49 c7 c0 ff ff
	ff ff		 mov	 r8, -1
  0008e	8b d0		 mov	 edx, eax
  00090	48 8b 8d 80 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  00097	e8 00 00 00 00	 call	 ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize

; 177  :    add_index = 0;

  0009c	c7 45 14 00 00
	00 00		 mov	 DWORD PTR add_index$[rbp], 0

; 178  : 
; 179  :    // Since we're decoding, we are most likely in a performance-minded
; 180  :    // part of an application, let's go for a speedy method for accessing
; 181  :    // the source data.
; 182  : 
; 183  :    const BYTE * input_buffer = source.GetData();

  000a3	48 8b 4d 78	 mov	 rcx, QWORD PTR source$[rbp]
  000a7	e8 00 00 00 00	 call	 ?GetData@CByteArray@@QEBAPEBEXZ ; CByteArray::GetData
  000ac	48 89 45 18	 mov	 QWORD PTR input_buffer$[rbp], rax
$LN2@Decode:

; 184  : 
; 185  :    while( index < number_of_bytes_to_decode )

  000b0	8b 45 10	 mov	 eax, DWORD PTR number_of_bytes_to_decode$[rbp]
  000b3	39 45 0c	 cmp	 DWORD PTR index$[rbp], eax
  000b6	0f 8d 02 03 00
	00		 jge	 $LN3@Decode

; 186  :    {
; 187  :       character_1 = __get_character( input_buffer, m_DecoderTable, index, number_of_bytes_to_decode );

  000bc	48 8b 45 70	 mov	 rax, QWORD PTR this$[rbp]
  000c0	48 83 c0 08	 add	 rax, 8
  000c4	44 8b 4d 10	 mov	 r9d, DWORD PTR number_of_bytes_to_decode$[rbp]
  000c8	4c 8d 45 0c	 lea	 r8, QWORD PTR index$[rbp]
  000cc	48 8b d0	 mov	 rdx, rax
  000cf	48 8b 4d 18	 mov	 rcx, QWORD PTR input_buffer$[rbp]
  000d3	e8 00 00 00 00	 call	 ?__get_character@@YAEPEBE0AEAHH@Z ; __get_character
  000d8	88 45 05	 mov	 BYTE PTR character_1$[rbp], al

; 188  : 
; 189  :       if ( character_1 != END_OF_BASE64_ENCODED_DATA )

  000db	0f b6 45 05	 movzx	 eax, BYTE PTR character_1$[rbp]
  000df	83 f8 3d	 cmp	 eax, 61			; 0000003dH
  000e2	0f 84 62 01 00
	00		 je	 $LN5@Decode

; 190  :       {
; 191  :          if ( m_DecoderTable[ character_1 ] == BASE64_UNKNOWN_VALUE )

  000e8	0f b6 45 05	 movzx	 eax, BYTE PTR character_1$[rbp]
  000ec	48 8b 4d 70	 mov	 rcx, QWORD PTR this$[rbp]
  000f0	0f b6 44 01 08	 movzx	 eax, BYTE PTR [rcx+rax+8]
  000f5	3d ff 00 00 00	 cmp	 eax, 255		; 000000ffH
  000fa	75 13		 jne	 SHORT $LN7@Decode

; 192  :          {
; 193  :             destination.RemoveAll();

  000fc	48 8b 8d 80 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  00103	e8 00 00 00 00	 call	 ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll

; 194  :             return( FALSE );

  00108	33 c0		 xor	 eax, eax
  0010a	e9 ca 02 00 00	 jmp	 $LN1@Decode
$LN7@Decode:

; 195  :          }
; 196  : 
; 197  :          character_2 = __get_character( input_buffer, m_DecoderTable, index, number_of_bytes_to_decode );

  0010f	48 8b 45 70	 mov	 rax, QWORD PTR this$[rbp]
  00113	48 83 c0 08	 add	 rax, 8
  00117	44 8b 4d 10	 mov	 r9d, DWORD PTR number_of_bytes_to_decode$[rbp]
  0011b	4c 8d 45 0c	 lea	 r8, QWORD PTR index$[rbp]
  0011f	48 8b d0	 mov	 rdx, rax
  00122	48 8b 4d 18	 mov	 rcx, QWORD PTR input_buffer$[rbp]
  00126	e8 00 00 00 00	 call	 ?__get_character@@YAEPEBE0AEAHH@Z ; __get_character
  0012b	88 45 06	 mov	 BYTE PTR character_2$[rbp], al

; 198  : 
; 199  :          if ( character_2 != END_OF_BASE64_ENCODED_DATA )

  0012e	0f b6 45 06	 movzx	 eax, BYTE PTR character_2$[rbp]
  00132	83 f8 3d	 cmp	 eax, 61			; 0000003dH
  00135	0f 84 05 01 00
	00		 je	 $LN8@Decode

; 200  :          {
; 201  :             if ( m_DecoderTable[ character_2 ] == BASE64_UNKNOWN_VALUE )

  0013b	0f b6 45 06	 movzx	 eax, BYTE PTR character_2$[rbp]
  0013f	48 8b 4d 70	 mov	 rcx, QWORD PTR this$[rbp]
  00143	0f b6 44 01 08	 movzx	 eax, BYTE PTR [rcx+rax+8]
  00148	3d ff 00 00 00	 cmp	 eax, 255		; 000000ffH
  0014d	75 13		 jne	 SHORT $LN10@Decode

; 202  :             {
; 203  :                destination.RemoveAll();

  0014f	48 8b 8d 80 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  00156	e8 00 00 00 00	 call	 ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll

; 204  :                return( FALSE );

  0015b	33 c0		 xor	 eax, eax
  0015d	e9 77 02 00 00	 jmp	 $LN1@Decode
$LN10@Decode:

; 205  :             }
; 206  : 
; 207  :             character_3 = __get_character( input_buffer, m_DecoderTable, index, number_of_bytes_to_decode );

  00162	48 8b 45 70	 mov	 rax, QWORD PTR this$[rbp]
  00166	48 83 c0 08	 add	 rax, 8
  0016a	44 8b 4d 10	 mov	 r9d, DWORD PTR number_of_bytes_to_decode$[rbp]
  0016e	4c 8d 45 0c	 lea	 r8, QWORD PTR index$[rbp]
  00172	48 8b d0	 mov	 rdx, rax
  00175	48 8b 4d 18	 mov	 rcx, QWORD PTR input_buffer$[rbp]
  00179	e8 00 00 00 00	 call	 ?__get_character@@YAEPEBE0AEAHH@Z ; __get_character
  0017e	88 45 07	 mov	 BYTE PTR character_3$[rbp], al

; 208  : 
; 209  :             if ( character_3 != END_OF_BASE64_ENCODED_DATA )

  00181	0f b6 45 07	 movzx	 eax, BYTE PTR character_3$[rbp]
  00185	83 f8 3d	 cmp	 eax, 61			; 0000003dH
  00188	0f 84 ac 00 00
	00		 je	 $LN11@Decode

; 210  :             {
; 211  :                if ( m_DecoderTable[ character_3 ] == BASE64_UNKNOWN_VALUE )

  0018e	0f b6 45 07	 movzx	 eax, BYTE PTR character_3$[rbp]
  00192	48 8b 4d 70	 mov	 rcx, QWORD PTR this$[rbp]
  00196	0f b6 44 01 08	 movzx	 eax, BYTE PTR [rcx+rax+8]
  0019b	3d ff 00 00 00	 cmp	 eax, 255		; 000000ffH
  001a0	75 13		 jne	 SHORT $LN13@Decode

; 212  :                {
; 213  :                   destination.RemoveAll();

  001a2	48 8b 8d 80 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  001a9	e8 00 00 00 00	 call	 ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll

; 214  :                   return( FALSE );

  001ae	33 c0		 xor	 eax, eax
  001b0	e9 24 02 00 00	 jmp	 $LN1@Decode
$LN13@Decode:

; 215  :                }
; 216  : 
; 217  :                character_4 = __get_character( input_buffer, m_DecoderTable, index, number_of_bytes_to_decode );

  001b5	48 8b 45 70	 mov	 rax, QWORD PTR this$[rbp]
  001b9	48 83 c0 08	 add	 rax, 8
  001bd	44 8b 4d 10	 mov	 r9d, DWORD PTR number_of_bytes_to_decode$[rbp]
  001c1	4c 8d 45 0c	 lea	 r8, QWORD PTR index$[rbp]
  001c5	48 8b d0	 mov	 rdx, rax
  001c8	48 8b 4d 18	 mov	 rcx, QWORD PTR input_buffer$[rbp]
  001cc	e8 00 00 00 00	 call	 ?__get_character@@YAEPEBE0AEAHH@Z ; __get_character
  001d1	88 45 08	 mov	 BYTE PTR character_4$[rbp], al

; 218  : 
; 219  :                if ( character_4 != END_OF_BASE64_ENCODED_DATA )

  001d4	0f b6 45 08	 movzx	 eax, BYTE PTR character_4$[rbp]
  001d8	83 f8 3d	 cmp	 eax, 61			; 0000003dH
  001db	74 27		 je	 SHORT $LN14@Decode

; 220  :                {
; 221  :                   if ( m_DecoderTable[ character_4 ] == BASE64_UNKNOWN_VALUE )

  001dd	0f b6 45 08	 movzx	 eax, BYTE PTR character_4$[rbp]
  001e1	48 8b 4d 70	 mov	 rcx, QWORD PTR this$[rbp]
  001e5	0f b6 44 01 08	 movzx	 eax, BYTE PTR [rcx+rax+8]
  001ea	3d ff 00 00 00	 cmp	 eax, 255		; 000000ffH
  001ef	75 13		 jne	 SHORT $LN15@Decode

; 222  :                   {
; 223  :                      destination.RemoveAll();

  001f1	48 8b 8d 80 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  001f8	e8 00 00 00 00	 call	 ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll

; 224  :                      return( FALSE );

  001fd	33 c0		 xor	 eax, eax
  001ff	e9 d5 01 00 00	 jmp	 $LN1@Decode
$LN15@Decode:
$LN14@Decode:

; 225  :                   }
; 226  :                }
; 227  : 
; 228  :                if ( character_2 == BASE64_END_OF_BUFFER ||
; 229  :                     character_3 == BASE64_END_OF_BUFFER ||

  00204	0f b6 45 06	 movzx	 eax, BYTE PTR character_2$[rbp]
  00208	3d fd 00 00 00	 cmp	 eax, 253		; 000000fdH
  0020d	74 16		 je	 SHORT $LN17@Decode
  0020f	0f b6 45 07	 movzx	 eax, BYTE PTR character_3$[rbp]
  00213	3d fd 00 00 00	 cmp	 eax, 253		; 000000fdH
  00218	74 0b		 je	 SHORT $LN17@Decode
  0021a	0f b6 45 08	 movzx	 eax, BYTE PTR character_4$[rbp]
  0021e	3d fd 00 00 00	 cmp	 eax, 253		; 000000fdH
  00223	75 13		 jne	 SHORT $LN16@Decode
$LN17@Decode:

; 230  :                     character_4 == BASE64_END_OF_BUFFER )
; 231  :                { 
; 232  :                   destination.RemoveAll();

  00225	48 8b 8d 80 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  0022c	e8 00 00 00 00	 call	 ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll

; 233  :                   return( FALSE );

  00231	33 c0		 xor	 eax, eax
  00233	e9 a1 01 00 00	 jmp	 $LN1@Decode
$LN16@Decode:

; 234  :                }
; 235  :             }

  00238	eb 04		 jmp	 SHORT $LN12@Decode
$LN11@Decode:

; 236  :             else
; 237  :             {
; 238  :                character_4 = END_OF_BASE64_ENCODED_DATA;

  0023a	c6 45 08 3d	 mov	 BYTE PTR character_4$[rbp], 61 ; 0000003dH
$LN12@Decode:

; 239  :             }
; 240  :          }

  0023e	eb 08		 jmp	 SHORT $LN9@Decode
$LN8@Decode:

; 241  :          else
; 242  :          {
; 243  :             character_3 = END_OF_BASE64_ENCODED_DATA;

  00240	c6 45 07 3d	 mov	 BYTE PTR character_3$[rbp], 61 ; 0000003dH

; 244  :             character_4 = END_OF_BASE64_ENCODED_DATA;

  00244	c6 45 08 3d	 mov	 BYTE PTR character_4$[rbp], 61 ; 0000003dH
$LN9@Decode:

; 245  :          }
; 246  :       }

  00248	eb 0c		 jmp	 SHORT $LN6@Decode
$LN5@Decode:

; 247  :       else
; 248  :       {
; 249  :          character_2 = END_OF_BASE64_ENCODED_DATA;

  0024a	c6 45 06 3d	 mov	 BYTE PTR character_2$[rbp], 61 ; 0000003dH

; 250  :          character_3 = END_OF_BASE64_ENCODED_DATA;

  0024e	c6 45 07 3d	 mov	 BYTE PTR character_3$[rbp], 61 ; 0000003dH

; 251  :          character_4 = END_OF_BASE64_ENCODED_DATA;

  00252	c6 45 08 3d	 mov	 BYTE PTR character_4$[rbp], 61 ; 0000003dH
$LN6@Decode:

; 252  :       }
; 253  : 
; 254  :       if ( character_1 == END_OF_BASE64_ENCODED_DATA ||

  00256	0f b6 45 05	 movzx	 eax, BYTE PTR character_1$[rbp]
  0025a	83 f8 3d	 cmp	 eax, 61			; 0000003dH
  0025d	74 09		 je	 SHORT $LN19@Decode
  0025f	0f b6 45 06	 movzx	 eax, BYTE PTR character_2$[rbp]
  00263	83 f8 3d	 cmp	 eax, 61			; 0000003dH
  00266	75 22		 jne	 SHORT $LN18@Decode
$LN19@Decode:

; 255  :            character_2 == END_OF_BASE64_ENCODED_DATA )
; 256  :       {
; 257  :          destination.SetSize( add_index );

  00268	8b 45 14	 mov	 eax, DWORD PTR add_index$[rbp]
  0026b	49 c7 c0 ff ff
	ff ff		 mov	 r8, -1
  00272	8b d0		 mov	 edx, eax
  00274	48 8b 8d 80 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  0027b	e8 00 00 00 00	 call	 ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize

; 258  :          return( TRUE );

  00280	b8 01 00 00 00	 mov	 eax, 1
  00285	e9 4f 01 00 00	 jmp	 $LN1@Decode
$LN18@Decode:

; 259  :       }
; 260  : 
; 261  :       character_1 = m_DecoderTable[ character_1 ];

  0028a	0f b6 45 05	 movzx	 eax, BYTE PTR character_1$[rbp]
  0028e	48 8b 4d 70	 mov	 rcx, QWORD PTR this$[rbp]
  00292	0f b6 44 01 08	 movzx	 eax, BYTE PTR [rcx+rax+8]
  00297	88 45 05	 mov	 BYTE PTR character_1$[rbp], al

; 262  :       character_2 = m_DecoderTable[ character_2 ];

  0029a	0f b6 45 06	 movzx	 eax, BYTE PTR character_2$[rbp]
  0029e	48 8b 4d 70	 mov	 rcx, QWORD PTR this$[rbp]
  002a2	0f b6 44 01 08	 movzx	 eax, BYTE PTR [rcx+rax+8]
  002a7	88 45 06	 mov	 BYTE PTR character_2$[rbp], al

; 263  : 
; 264  :       byte_to_add = static_cast< BYTE>( ( ( character_1 << 2 ) | ( ( character_2 & 0x30 ) >> 4 ) ) );

  002aa	0f b6 45 05	 movzx	 eax, BYTE PTR character_1$[rbp]
  002ae	c1 e0 02	 shl	 eax, 2
  002b1	0f b6 4d 06	 movzx	 ecx, BYTE PTR character_2$[rbp]
  002b5	83 e1 30	 and	 ecx, 48			; 00000030H
  002b8	c1 f9 04	 sar	 ecx, 4
  002bb	0b c1		 or	 eax, ecx
  002bd	88 45 04	 mov	 BYTE PTR byte_to_add$[rbp], al

; 265  : 
; 266  :       destination.SetAt( add_index, byte_to_add );

  002c0	8b 45 14	 mov	 eax, DWORD PTR add_index$[rbp]
  002c3	44 0f b6 45 04	 movzx	 r8d, BYTE PTR byte_to_add$[rbp]
  002c8	8b d0		 mov	 edx, eax
  002ca	48 8b 8d 80 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  002d1	e8 00 00 00 00	 call	 ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt

; 267  :       add_index++;

  002d6	8b 45 14	 mov	 eax, DWORD PTR add_index$[rbp]
  002d9	ff c0		 inc	 eax
  002db	89 45 14	 mov	 DWORD PTR add_index$[rbp], eax

; 268  : 
; 269  :       if ( character_3 == END_OF_BASE64_ENCODED_DATA )

  002de	0f b6 45 07	 movzx	 eax, BYTE PTR character_3$[rbp]
  002e2	83 f8 3d	 cmp	 eax, 61			; 0000003dH
  002e5	75 22		 jne	 SHORT $LN20@Decode

; 270  :       {
; 271  :          destination.SetSize( add_index );

  002e7	8b 45 14	 mov	 eax, DWORD PTR add_index$[rbp]
  002ea	49 c7 c0 ff ff
	ff ff		 mov	 r8, -1
  002f1	8b d0		 mov	 edx, eax
  002f3	48 8b 8d 80 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  002fa	e8 00 00 00 00	 call	 ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize

; 272  :          return( TRUE );

  002ff	b8 01 00 00 00	 mov	 eax, 1
  00304	e9 d0 00 00 00	 jmp	 $LN1@Decode
$LN20@Decode:

; 273  :       }
; 274  : 
; 275  :       character_3 = m_DecoderTable[ character_3 ];

  00309	0f b6 45 07	 movzx	 eax, BYTE PTR character_3$[rbp]
  0030d	48 8b 4d 70	 mov	 rcx, QWORD PTR this$[rbp]
  00311	0f b6 44 01 08	 movzx	 eax, BYTE PTR [rcx+rax+8]
  00316	88 45 07	 mov	 BYTE PTR character_3$[rbp], al

; 276  : 
; 277  :       byte_to_add = static_cast< BYTE >( ( ( ( ( character_2 & 0x0F ) << 4 ) | ( ( character_3 & 0x3C ) >> 2 ) ) ) );

  00319	0f b6 45 06	 movzx	 eax, BYTE PTR character_2$[rbp]
  0031d	83 e0 0f	 and	 eax, 15
  00320	c1 e0 04	 shl	 eax, 4
  00323	0f b6 4d 07	 movzx	 ecx, BYTE PTR character_3$[rbp]
  00327	83 e1 3c	 and	 ecx, 60			; 0000003cH
  0032a	c1 f9 02	 sar	 ecx, 2
  0032d	0b c1		 or	 eax, ecx
  0032f	88 45 04	 mov	 BYTE PTR byte_to_add$[rbp], al

; 278  : 
; 279  :       destination.SetAt( add_index, byte_to_add );

  00332	8b 45 14	 mov	 eax, DWORD PTR add_index$[rbp]
  00335	44 0f b6 45 04	 movzx	 r8d, BYTE PTR byte_to_add$[rbp]
  0033a	8b d0		 mov	 edx, eax
  0033c	48 8b 8d 80 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  00343	e8 00 00 00 00	 call	 ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt

; 280  :       add_index++;

  00348	8b 45 14	 mov	 eax, DWORD PTR add_index$[rbp]
  0034b	ff c0		 inc	 eax
  0034d	89 45 14	 mov	 DWORD PTR add_index$[rbp], eax

; 281  : 
; 282  :       if ( character_4 == END_OF_BASE64_ENCODED_DATA )

  00350	0f b6 45 08	 movzx	 eax, BYTE PTR character_4$[rbp]
  00354	83 f8 3d	 cmp	 eax, 61			; 0000003dH
  00357	75 1f		 jne	 SHORT $LN21@Decode

; 283  :       {
; 284  :          destination.SetSize( add_index );

  00359	8b 45 14	 mov	 eax, DWORD PTR add_index$[rbp]
  0035c	49 c7 c0 ff ff
	ff ff		 mov	 r8, -1
  00363	8b d0		 mov	 edx, eax
  00365	48 8b 8d 80 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  0036c	e8 00 00 00 00	 call	 ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize

; 285  :          return( TRUE );

  00371	b8 01 00 00 00	 mov	 eax, 1
  00376	eb 61		 jmp	 SHORT $LN1@Decode
$LN21@Decode:

; 286  :       }
; 287  : 
; 288  :       character_4 = m_DecoderTable[ character_4 ];

  00378	0f b6 45 08	 movzx	 eax, BYTE PTR character_4$[rbp]
  0037c	48 8b 4d 70	 mov	 rcx, QWORD PTR this$[rbp]
  00380	0f b6 44 01 08	 movzx	 eax, BYTE PTR [rcx+rax+8]
  00385	88 45 08	 mov	 BYTE PTR character_4$[rbp], al

; 289  : 
; 290  :       byte_to_add = static_cast< BYTE >( ( ( ( character_3 & 0x03 ) << 6 ) | character_4 ) );

  00388	0f b6 45 07	 movzx	 eax, BYTE PTR character_3$[rbp]
  0038c	83 e0 03	 and	 eax, 3
  0038f	c1 e0 06	 shl	 eax, 6
  00392	0f b6 4d 08	 movzx	 ecx, BYTE PTR character_4$[rbp]
  00396	0b c1		 or	 eax, ecx
  00398	88 45 04	 mov	 BYTE PTR byte_to_add$[rbp], al

; 291  : 
; 292  :       destination.SetAt( add_index, byte_to_add );

  0039b	8b 45 14	 mov	 eax, DWORD PTR add_index$[rbp]
  0039e	44 0f b6 45 04	 movzx	 r8d, BYTE PTR byte_to_add$[rbp]
  003a3	8b d0		 mov	 edx, eax
  003a5	48 8b 8d 80 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  003ac	e8 00 00 00 00	 call	 ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt

; 293  :       add_index++;

  003b1	8b 45 14	 mov	 eax, DWORD PTR add_index$[rbp]
  003b4	ff c0		 inc	 eax
  003b6	89 45 14	 mov	 DWORD PTR add_index$[rbp], eax

; 294  :    }

  003b9	e9 f2 fc ff ff	 jmp	 $LN2@Decode
$LN3@Decode:

; 295  : 
; 296  :    destination.SetSize( add_index );

  003be	8b 45 14	 mov	 eax, DWORD PTR add_index$[rbp]
  003c1	49 c7 c0 ff ff
	ff ff		 mov	 r8, -1
  003c8	8b d0		 mov	 edx, eax
  003ca	48 8b 8d 80 00
	00 00		 mov	 rcx, QWORD PTR destination$[rbp]
  003d1	e8 00 00 00 00	 call	 ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize

; 297  : 
; 298  :    return( return_value );

  003d6	8b 45 00	 mov	 eax, DWORD PTR return_value$[rbp]
$LN1@Decode:

; 299  : }

  003d9	48 8d 65 60	 lea	 rsp, QWORD PTR [rbp+96]
  003dd	5d		 pop	 rbp
  003de	c3		 ret	 0
?Decode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z ENDP ; CBase64Coding::Decode
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp
;	COMDAT ??1CBase64Coding@@UEAA@XZ
_TEXT	SEGMENT
this$ = 80
??1CBase64Coding@@UEAA@XZ PROC				; CBase64Coding::~CBase64Coding, COMDAT

; 66   : {

$LN3:
  00000	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00005	55		 push	 rbp
  00006	48 83 ec 40	 sub	 rsp, 64			; 00000040H
  0000a	48 8b ec	 mov	 rbp, rsp
  0000d	48 8b 45 50	 mov	 rax, QWORD PTR this$[rbp]
  00011	48 8d 0d 00 00
	00 00		 lea	 rcx, OFFSET FLAT:??_7CBase64Coding@@6B@
  00018	48 89 08	 mov	 QWORD PTR [rax], rcx

; 67   : }

  0001b	48 8d 65 40	 lea	 rsp, QWORD PTR [rbp+64]
  0001f	5d		 pop	 rbp
  00020	c3		 ret	 0
??1CBase64Coding@@UEAA@XZ ENDP				; CBase64Coding::~CBase64Coding
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp
;	COMDAT ??0CBase64Coding@@QEAA@XZ
_TEXT	SEGMENT
this$ = 80
??0CBase64Coding@@QEAA@XZ PROC				; CBase64Coding::CBase64Coding, COMDAT

; 61   : {

$LN3:
  00000	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00005	55		 push	 rbp
  00006	48 83 ec 40	 sub	 rsp, 64			; 00000040H
  0000a	48 8b ec	 mov	 rbp, rsp
  0000d	48 8b 45 50	 mov	 rax, QWORD PTR this$[rbp]
  00011	48 8d 0d 00 00
	00 00		 lea	 rcx, OFFSET FLAT:??_7CBase64Coding@@6B@
  00018	48 89 08	 mov	 QWORD PTR [rax], rcx

; 62   :    m_DecoderTable[ 0 ] = 0x00;

  0001b	b8 01 00 00 00	 mov	 eax, 1
  00020	48 6b c0 00	 imul	 rax, rax, 0
  00024	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  00028	c6 44 01 08 00	 mov	 BYTE PTR [rcx+rax+8], 0

; 63   : }

  0002d	48 8b 45 50	 mov	 rax, QWORD PTR this$[rbp]
  00031	48 8d 65 40	 lea	 rsp, QWORD PTR [rbp+64]
  00035	5d		 pop	 rbp
  00036	c3		 ret	 0
??0CBase64Coding@@QEAA@XZ ENDP				; CBase64Coding::CBase64Coding
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp
;	COMDAT ?m_InitializeDecoderTable@CBase64Coding@@MEAAXXZ
_TEXT	SEGMENT
this$ = 80
?m_InitializeDecoderTable@CBase64Coding@@MEAAXXZ PROC	; CBase64Coding::m_InitializeDecoderTable, COMDAT

; 70   : {

$LN3:
  00000	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00005	55		 push	 rbp
  00006	48 83 ec 60	 sub	 rsp, 96			; 00000060H
  0000a	48 8d 6c 24 20	 lea	 rbp, QWORD PTR [rsp+32]

; 71   : 
; 72   :    // Fill the table with an invalid value. If the decoder receives
; 73   :    // this value as a result of a lookup, it knows that the input
; 74   :    // character must have been an invalid one.
; 75   : 
; 76   :    ::memset( m_DecoderTable, BASE64_UNKNOWN_VALUE, sizeof( m_DecoderTable ) );

  0000f	48 8b 45 50	 mov	 rax, QWORD PTR this$[rbp]
  00013	48 83 c0 08	 add	 rax, 8
  00017	41 b8 00 01 00
	00		 mov	 r8d, 256		; 00000100H
  0001d	ba ff 00 00 00	 mov	 edx, 255		; 000000ffH
  00022	48 8b c8	 mov	 rcx, rax
  00025	e8 00 00 00 00	 call	 memset

; 77   : 
; 78   :    // Now let's fill the table with translatable values
; 79   :    // The table is loaded with table[ ASCII_VALUE ] = TRANSLATED_VALUE
; 80   : 
; 81   :     m_DecoderTable[  43 ] = 62;

  0002a	b8 01 00 00 00	 mov	 eax, 1
  0002f	48 6b c0 2b	 imul	 rax, rax, 43		; 0000002bH
  00033	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  00037	c6 44 01 08 3e	 mov	 BYTE PTR [rcx+rax+8], 62 ; 0000003eH

; 82   :     m_DecoderTable[  47 ] = 63;

  0003c	b8 01 00 00 00	 mov	 eax, 1
  00041	48 6b c0 2f	 imul	 rax, rax, 47		; 0000002fH
  00045	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  00049	c6 44 01 08 3f	 mov	 BYTE PTR [rcx+rax+8], 63 ; 0000003fH

; 83   :     m_DecoderTable[  48 ] = 52;

  0004e	b8 01 00 00 00	 mov	 eax, 1
  00053	48 6b c0 30	 imul	 rax, rax, 48		; 00000030H
  00057	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  0005b	c6 44 01 08 34	 mov	 BYTE PTR [rcx+rax+8], 52 ; 00000034H

; 84   :     m_DecoderTable[  49 ] = 53;

  00060	b8 01 00 00 00	 mov	 eax, 1
  00065	48 6b c0 31	 imul	 rax, rax, 49		; 00000031H
  00069	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  0006d	c6 44 01 08 35	 mov	 BYTE PTR [rcx+rax+8], 53 ; 00000035H

; 85   :     m_DecoderTable[  50 ] = 54;

  00072	b8 01 00 00 00	 mov	 eax, 1
  00077	48 6b c0 32	 imul	 rax, rax, 50		; 00000032H
  0007b	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  0007f	c6 44 01 08 36	 mov	 BYTE PTR [rcx+rax+8], 54 ; 00000036H

; 86   :     m_DecoderTable[  51 ] = 55;

  00084	b8 01 00 00 00	 mov	 eax, 1
  00089	48 6b c0 33	 imul	 rax, rax, 51		; 00000033H
  0008d	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  00091	c6 44 01 08 37	 mov	 BYTE PTR [rcx+rax+8], 55 ; 00000037H

; 87   :     m_DecoderTable[  52 ] = 56;

  00096	b8 01 00 00 00	 mov	 eax, 1
  0009b	48 6b c0 34	 imul	 rax, rax, 52		; 00000034H
  0009f	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  000a3	c6 44 01 08 38	 mov	 BYTE PTR [rcx+rax+8], 56 ; 00000038H

; 88   :     m_DecoderTable[  53 ] = 57;

  000a8	b8 01 00 00 00	 mov	 eax, 1
  000ad	48 6b c0 35	 imul	 rax, rax, 53		; 00000035H
  000b1	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  000b5	c6 44 01 08 39	 mov	 BYTE PTR [rcx+rax+8], 57 ; 00000039H

; 89   :     m_DecoderTable[  54 ] = 58;

  000ba	b8 01 00 00 00	 mov	 eax, 1
  000bf	48 6b c0 36	 imul	 rax, rax, 54		; 00000036H
  000c3	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  000c7	c6 44 01 08 3a	 mov	 BYTE PTR [rcx+rax+8], 58 ; 0000003aH

; 90   :     m_DecoderTable[  55 ] = 59;

  000cc	b8 01 00 00 00	 mov	 eax, 1
  000d1	48 6b c0 37	 imul	 rax, rax, 55		; 00000037H
  000d5	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  000d9	c6 44 01 08 3b	 mov	 BYTE PTR [rcx+rax+8], 59 ; 0000003bH

; 91   :     m_DecoderTable[  56 ] = 60;

  000de	b8 01 00 00 00	 mov	 eax, 1
  000e3	48 6b c0 38	 imul	 rax, rax, 56		; 00000038H
  000e7	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  000eb	c6 44 01 08 3c	 mov	 BYTE PTR [rcx+rax+8], 60 ; 0000003cH

; 92   :     m_DecoderTable[  57 ] = 61;

  000f0	b8 01 00 00 00	 mov	 eax, 1
  000f5	48 6b c0 39	 imul	 rax, rax, 57		; 00000039H
  000f9	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  000fd	c6 44 01 08 3d	 mov	 BYTE PTR [rcx+rax+8], 61 ; 0000003dH

; 93   :     m_DecoderTable[  65 ] = 0;

  00102	b8 01 00 00 00	 mov	 eax, 1
  00107	48 6b c0 41	 imul	 rax, rax, 65		; 00000041H
  0010b	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  0010f	c6 44 01 08 00	 mov	 BYTE PTR [rcx+rax+8], 0

; 94   :     m_DecoderTable[  66 ] = 1;

  00114	b8 01 00 00 00	 mov	 eax, 1
  00119	48 6b c0 42	 imul	 rax, rax, 66		; 00000042H
  0011d	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  00121	c6 44 01 08 01	 mov	 BYTE PTR [rcx+rax+8], 1

; 95   :     m_DecoderTable[  67 ] = 2;

  00126	b8 01 00 00 00	 mov	 eax, 1
  0012b	48 6b c0 43	 imul	 rax, rax, 67		; 00000043H
  0012f	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  00133	c6 44 01 08 02	 mov	 BYTE PTR [rcx+rax+8], 2

; 96   :     m_DecoderTable[  68 ] = 3;

  00138	b8 01 00 00 00	 mov	 eax, 1
  0013d	48 6b c0 44	 imul	 rax, rax, 68		; 00000044H
  00141	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  00145	c6 44 01 08 03	 mov	 BYTE PTR [rcx+rax+8], 3

; 97   :     m_DecoderTable[  69 ] = 4;

  0014a	b8 01 00 00 00	 mov	 eax, 1
  0014f	48 6b c0 45	 imul	 rax, rax, 69		; 00000045H
  00153	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  00157	c6 44 01 08 04	 mov	 BYTE PTR [rcx+rax+8], 4

; 98   :     m_DecoderTable[  70 ] = 5;

  0015c	b8 01 00 00 00	 mov	 eax, 1
  00161	48 6b c0 46	 imul	 rax, rax, 70		; 00000046H
  00165	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  00169	c6 44 01 08 05	 mov	 BYTE PTR [rcx+rax+8], 5

; 99   :     m_DecoderTable[  71 ] = 6;

  0016e	b8 01 00 00 00	 mov	 eax, 1
  00173	48 6b c0 47	 imul	 rax, rax, 71		; 00000047H
  00177	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  0017b	c6 44 01 08 06	 mov	 BYTE PTR [rcx+rax+8], 6

; 100  :     m_DecoderTable[  72 ] = 7;

  00180	b8 01 00 00 00	 mov	 eax, 1
  00185	48 6b c0 48	 imul	 rax, rax, 72		; 00000048H
  00189	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  0018d	c6 44 01 08 07	 mov	 BYTE PTR [rcx+rax+8], 7

; 101  :     m_DecoderTable[  73 ] = 8;

  00192	b8 01 00 00 00	 mov	 eax, 1
  00197	48 6b c0 49	 imul	 rax, rax, 73		; 00000049H
  0019b	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  0019f	c6 44 01 08 08	 mov	 BYTE PTR [rcx+rax+8], 8

; 102  :     m_DecoderTable[  74 ] = 9;

  001a4	b8 01 00 00 00	 mov	 eax, 1
  001a9	48 6b c0 4a	 imul	 rax, rax, 74		; 0000004aH
  001ad	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  001b1	c6 44 01 08 09	 mov	 BYTE PTR [rcx+rax+8], 9

; 103  :     m_DecoderTable[  75 ] = 10;

  001b6	b8 01 00 00 00	 mov	 eax, 1
  001bb	48 6b c0 4b	 imul	 rax, rax, 75		; 0000004bH
  001bf	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  001c3	c6 44 01 08 0a	 mov	 BYTE PTR [rcx+rax+8], 10

; 104  :     m_DecoderTable[  76 ] = 11;

  001c8	b8 01 00 00 00	 mov	 eax, 1
  001cd	48 6b c0 4c	 imul	 rax, rax, 76		; 0000004cH
  001d1	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  001d5	c6 44 01 08 0b	 mov	 BYTE PTR [rcx+rax+8], 11

; 105  :     m_DecoderTable[  77 ] = 12;

  001da	b8 01 00 00 00	 mov	 eax, 1
  001df	48 6b c0 4d	 imul	 rax, rax, 77		; 0000004dH
  001e3	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  001e7	c6 44 01 08 0c	 mov	 BYTE PTR [rcx+rax+8], 12

; 106  :     m_DecoderTable[  78 ] = 13;

  001ec	b8 01 00 00 00	 mov	 eax, 1
  001f1	48 6b c0 4e	 imul	 rax, rax, 78		; 0000004eH
  001f5	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  001f9	c6 44 01 08 0d	 mov	 BYTE PTR [rcx+rax+8], 13

; 107  :     m_DecoderTable[  79 ] = 14;

  001fe	b8 01 00 00 00	 mov	 eax, 1
  00203	48 6b c0 4f	 imul	 rax, rax, 79		; 0000004fH
  00207	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  0020b	c6 44 01 08 0e	 mov	 BYTE PTR [rcx+rax+8], 14

; 108  :     m_DecoderTable[  80 ] = 15;

  00210	b8 01 00 00 00	 mov	 eax, 1
  00215	48 6b c0 50	 imul	 rax, rax, 80		; 00000050H
  00219	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  0021d	c6 44 01 08 0f	 mov	 BYTE PTR [rcx+rax+8], 15

; 109  :     m_DecoderTable[  81 ] = 16;

  00222	b8 01 00 00 00	 mov	 eax, 1
  00227	48 6b c0 51	 imul	 rax, rax, 81		; 00000051H
  0022b	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  0022f	c6 44 01 08 10	 mov	 BYTE PTR [rcx+rax+8], 16

; 110  :     m_DecoderTable[  82 ] = 17;

  00234	b8 01 00 00 00	 mov	 eax, 1
  00239	48 6b c0 52	 imul	 rax, rax, 82		; 00000052H
  0023d	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  00241	c6 44 01 08 11	 mov	 BYTE PTR [rcx+rax+8], 17

; 111  :     m_DecoderTable[  83 ] = 18;

  00246	b8 01 00 00 00	 mov	 eax, 1
  0024b	48 6b c0 53	 imul	 rax, rax, 83		; 00000053H
  0024f	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  00253	c6 44 01 08 12	 mov	 BYTE PTR [rcx+rax+8], 18

; 112  :     m_DecoderTable[  84 ] = 19;

  00258	b8 01 00 00 00	 mov	 eax, 1
  0025d	48 6b c0 54	 imul	 rax, rax, 84		; 00000054H
  00261	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  00265	c6 44 01 08 13	 mov	 BYTE PTR [rcx+rax+8], 19

; 113  :     m_DecoderTable[  85 ] = 20;

  0026a	b8 01 00 00 00	 mov	 eax, 1
  0026f	48 6b c0 55	 imul	 rax, rax, 85		; 00000055H
  00273	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  00277	c6 44 01 08 14	 mov	 BYTE PTR [rcx+rax+8], 20

; 114  :     m_DecoderTable[  86 ] = 21;

  0027c	b8 01 00 00 00	 mov	 eax, 1
  00281	48 6b c0 56	 imul	 rax, rax, 86		; 00000056H
  00285	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  00289	c6 44 01 08 15	 mov	 BYTE PTR [rcx+rax+8], 21

; 115  :     m_DecoderTable[  87 ] = 22;

  0028e	b8 01 00 00 00	 mov	 eax, 1
  00293	48 6b c0 57	 imul	 rax, rax, 87		; 00000057H
  00297	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  0029b	c6 44 01 08 16	 mov	 BYTE PTR [rcx+rax+8], 22

; 116  :     m_DecoderTable[  88 ] = 23;

  002a0	b8 01 00 00 00	 mov	 eax, 1
  002a5	48 6b c0 58	 imul	 rax, rax, 88		; 00000058H
  002a9	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  002ad	c6 44 01 08 17	 mov	 BYTE PTR [rcx+rax+8], 23

; 117  :     m_DecoderTable[  89 ] = 24;

  002b2	b8 01 00 00 00	 mov	 eax, 1
  002b7	48 6b c0 59	 imul	 rax, rax, 89		; 00000059H
  002bb	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  002bf	c6 44 01 08 18	 mov	 BYTE PTR [rcx+rax+8], 24

; 118  :     m_DecoderTable[  90 ] = 25;

  002c4	b8 01 00 00 00	 mov	 eax, 1
  002c9	48 6b c0 5a	 imul	 rax, rax, 90		; 0000005aH
  002cd	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  002d1	c6 44 01 08 19	 mov	 BYTE PTR [rcx+rax+8], 25

; 119  :     m_DecoderTable[  97 ] = 26;

  002d6	b8 01 00 00 00	 mov	 eax, 1
  002db	48 6b c0 61	 imul	 rax, rax, 97		; 00000061H
  002df	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  002e3	c6 44 01 08 1a	 mov	 BYTE PTR [rcx+rax+8], 26

; 120  :     m_DecoderTable[  98 ] = 27;

  002e8	b8 01 00 00 00	 mov	 eax, 1
  002ed	48 6b c0 62	 imul	 rax, rax, 98		; 00000062H
  002f1	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  002f5	c6 44 01 08 1b	 mov	 BYTE PTR [rcx+rax+8], 27

; 121  :     m_DecoderTable[  99 ] = 28;

  002fa	b8 01 00 00 00	 mov	 eax, 1
  002ff	48 6b c0 63	 imul	 rax, rax, 99		; 00000063H
  00303	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  00307	c6 44 01 08 1c	 mov	 BYTE PTR [rcx+rax+8], 28

; 122  :     m_DecoderTable[ 100 ] = 29;

  0030c	b8 01 00 00 00	 mov	 eax, 1
  00311	48 6b c0 64	 imul	 rax, rax, 100		; 00000064H
  00315	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  00319	c6 44 01 08 1d	 mov	 BYTE PTR [rcx+rax+8], 29

; 123  :     m_DecoderTable[ 101 ] = 30;

  0031e	b8 01 00 00 00	 mov	 eax, 1
  00323	48 6b c0 65	 imul	 rax, rax, 101		; 00000065H
  00327	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  0032b	c6 44 01 08 1e	 mov	 BYTE PTR [rcx+rax+8], 30

; 124  :     m_DecoderTable[ 102 ] = 31;

  00330	b8 01 00 00 00	 mov	 eax, 1
  00335	48 6b c0 66	 imul	 rax, rax, 102		; 00000066H
  00339	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  0033d	c6 44 01 08 1f	 mov	 BYTE PTR [rcx+rax+8], 31

; 125  :     m_DecoderTable[ 103 ] = 32;

  00342	b8 01 00 00 00	 mov	 eax, 1
  00347	48 6b c0 67	 imul	 rax, rax, 103		; 00000067H
  0034b	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  0034f	c6 44 01 08 20	 mov	 BYTE PTR [rcx+rax+8], 32 ; 00000020H

; 126  :     m_DecoderTable[ 104 ] = 33;

  00354	b8 01 00 00 00	 mov	 eax, 1
  00359	48 6b c0 68	 imul	 rax, rax, 104		; 00000068H
  0035d	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  00361	c6 44 01 08 21	 mov	 BYTE PTR [rcx+rax+8], 33 ; 00000021H

; 127  :     m_DecoderTable[ 105 ] = 34;

  00366	b8 01 00 00 00	 mov	 eax, 1
  0036b	48 6b c0 69	 imul	 rax, rax, 105		; 00000069H
  0036f	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  00373	c6 44 01 08 22	 mov	 BYTE PTR [rcx+rax+8], 34 ; 00000022H

; 128  :     m_DecoderTable[ 106 ] = 35;

  00378	b8 01 00 00 00	 mov	 eax, 1
  0037d	48 6b c0 6a	 imul	 rax, rax, 106		; 0000006aH
  00381	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  00385	c6 44 01 08 23	 mov	 BYTE PTR [rcx+rax+8], 35 ; 00000023H

; 129  :     m_DecoderTable[ 107 ] = 36;

  0038a	b8 01 00 00 00	 mov	 eax, 1
  0038f	48 6b c0 6b	 imul	 rax, rax, 107		; 0000006bH
  00393	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  00397	c6 44 01 08 24	 mov	 BYTE PTR [rcx+rax+8], 36 ; 00000024H

; 130  :     m_DecoderTable[ 108 ] = 37;

  0039c	b8 01 00 00 00	 mov	 eax, 1
  003a1	48 6b c0 6c	 imul	 rax, rax, 108		; 0000006cH
  003a5	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  003a9	c6 44 01 08 25	 mov	 BYTE PTR [rcx+rax+8], 37 ; 00000025H

; 131  :     m_DecoderTable[ 109 ] = 38;

  003ae	b8 01 00 00 00	 mov	 eax, 1
  003b3	48 6b c0 6d	 imul	 rax, rax, 109		; 0000006dH
  003b7	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  003bb	c6 44 01 08 26	 mov	 BYTE PTR [rcx+rax+8], 38 ; 00000026H

; 132  :     m_DecoderTable[ 110 ] = 39;

  003c0	b8 01 00 00 00	 mov	 eax, 1
  003c5	48 6b c0 6e	 imul	 rax, rax, 110		; 0000006eH
  003c9	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  003cd	c6 44 01 08 27	 mov	 BYTE PTR [rcx+rax+8], 39 ; 00000027H

; 133  :     m_DecoderTable[ 111 ] = 40;

  003d2	b8 01 00 00 00	 mov	 eax, 1
  003d7	48 6b c0 6f	 imul	 rax, rax, 111		; 0000006fH
  003db	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  003df	c6 44 01 08 28	 mov	 BYTE PTR [rcx+rax+8], 40 ; 00000028H

; 134  :     m_DecoderTable[ 112 ] = 41;

  003e4	b8 01 00 00 00	 mov	 eax, 1
  003e9	48 6b c0 70	 imul	 rax, rax, 112		; 00000070H
  003ed	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  003f1	c6 44 01 08 29	 mov	 BYTE PTR [rcx+rax+8], 41 ; 00000029H

; 135  :     m_DecoderTable[ 113 ] = 42;

  003f6	b8 01 00 00 00	 mov	 eax, 1
  003fb	48 6b c0 71	 imul	 rax, rax, 113		; 00000071H
  003ff	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  00403	c6 44 01 08 2a	 mov	 BYTE PTR [rcx+rax+8], 42 ; 0000002aH

; 136  :     m_DecoderTable[ 114 ] = 43;

  00408	b8 01 00 00 00	 mov	 eax, 1
  0040d	48 6b c0 72	 imul	 rax, rax, 114		; 00000072H
  00411	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  00415	c6 44 01 08 2b	 mov	 BYTE PTR [rcx+rax+8], 43 ; 0000002bH

; 137  :     m_DecoderTable[ 115 ] = 44;

  0041a	b8 01 00 00 00	 mov	 eax, 1
  0041f	48 6b c0 73	 imul	 rax, rax, 115		; 00000073H
  00423	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  00427	c6 44 01 08 2c	 mov	 BYTE PTR [rcx+rax+8], 44 ; 0000002cH

; 138  :     m_DecoderTable[ 116 ] = 45;

  0042c	b8 01 00 00 00	 mov	 eax, 1
  00431	48 6b c0 74	 imul	 rax, rax, 116		; 00000074H
  00435	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  00439	c6 44 01 08 2d	 mov	 BYTE PTR [rcx+rax+8], 45 ; 0000002dH

; 139  :     m_DecoderTable[ 117 ] = 46;

  0043e	b8 01 00 00 00	 mov	 eax, 1
  00443	48 6b c0 75	 imul	 rax, rax, 117		; 00000075H
  00447	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  0044b	c6 44 01 08 2e	 mov	 BYTE PTR [rcx+rax+8], 46 ; 0000002eH

; 140  :     m_DecoderTable[ 118 ] = 47;

  00450	b8 01 00 00 00	 mov	 eax, 1
  00455	48 6b c0 76	 imul	 rax, rax, 118		; 00000076H
  00459	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  0045d	c6 44 01 08 2f	 mov	 BYTE PTR [rcx+rax+8], 47 ; 0000002fH

; 141  :     m_DecoderTable[ 119 ] = 48;

  00462	b8 01 00 00 00	 mov	 eax, 1
  00467	48 6b c0 77	 imul	 rax, rax, 119		; 00000077H
  0046b	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  0046f	c6 44 01 08 30	 mov	 BYTE PTR [rcx+rax+8], 48 ; 00000030H

; 142  :     m_DecoderTable[ 120 ] = 49;

  00474	b8 01 00 00 00	 mov	 eax, 1
  00479	48 6b c0 78	 imul	 rax, rax, 120		; 00000078H
  0047d	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  00481	c6 44 01 08 31	 mov	 BYTE PTR [rcx+rax+8], 49 ; 00000031H

; 143  :     m_DecoderTable[ 121 ] = 50;

  00486	b8 01 00 00 00	 mov	 eax, 1
  0048b	48 6b c0 79	 imul	 rax, rax, 121		; 00000079H
  0048f	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  00493	c6 44 01 08 32	 mov	 BYTE PTR [rcx+rax+8], 50 ; 00000032H

; 144  :     m_DecoderTable[ 122 ] = 51;

  00498	b8 01 00 00 00	 mov	 eax, 1
  0049d	48 6b c0 7a	 imul	 rax, rax, 122		; 0000007aH
  004a1	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  004a5	c6 44 01 08 33	 mov	 BYTE PTR [rcx+rax+8], 51 ; 00000033H

; 145  : 
; 146  :     // OK, there's our translation table, now let's be a little
; 147  :     // forgiving about end-of-lines, tabs, spaces, etc.
; 148  : 
; 149  :     m_DecoderTable[ 9               ] = BASE64_IGNORABLE_CHARACTER; // TAB character (Tabs suck!)

  004aa	b8 01 00 00 00	 mov	 eax, 1
  004af	48 6b c0 09	 imul	 rax, rax, 9
  004b3	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  004b7	c6 44 01 08 fe	 mov	 BYTE PTR [rcx+rax+8], 254 ; 000000feH

; 150  :     m_DecoderTable[ 32              ] = BASE64_IGNORABLE_CHARACTER; // Space character

  004bc	b8 01 00 00 00	 mov	 eax, 1
  004c1	48 6b c0 20	 imul	 rax, rax, 32		; 00000020H
  004c5	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  004c9	c6 44 01 08 fe	 mov	 BYTE PTR [rcx+rax+8], 254 ; 000000feH

; 151  :     m_DecoderTable[ CARRIAGE_RETURN ] = BASE64_IGNORABLE_CHARACTER;

  004ce	b8 01 00 00 00	 mov	 eax, 1
  004d3	48 6b c0 0d	 imul	 rax, rax, 13
  004d7	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  004db	c6 44 01 08 fe	 mov	 BYTE PTR [rcx+rax+8], 254 ; 000000feH

; 152  :     m_DecoderTable[ LINE_FEED       ] = BASE64_IGNORABLE_CHARACTER;

  004e0	b8 01 00 00 00	 mov	 eax, 1
  004e5	48 6b c0 0a	 imul	 rax, rax, 10
  004e9	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  004ed	c6 44 01 08 fe	 mov	 BYTE PTR [rcx+rax+8], 254 ; 000000feH

; 153  : }

  004f2	48 8d 65 40	 lea	 rsp, QWORD PTR [rbp+64]
  004f6	5d		 pop	 rbp
  004f7	c3		 ret	 0
?m_InitializeDecoderTable@CBase64Coding@@MEAAXXZ ENDP	; CBase64Coding::m_InitializeDecoderTable
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?SetLength@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z
_TEXT	SEGMENT
this$ = 80
nLength$ = 88
?SetLength@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z PROC	; ATL::CSimpleStringT<char,0>::SetLength, COMDAT

; 867  : 	{

$LN5:
  00000	89 54 24 10	 mov	 DWORD PTR [rsp+16], edx
  00004	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00009	55		 push	 rbp
  0000a	48 83 ec 60	 sub	 rsp, 96			; 00000060H
  0000e	48 8d 6c 24 20	 lea	 rbp, QWORD PTR [rsp+32]

; 868  : 		ATLASSERT( nLength >= 0 );
; 869  : 		ATLASSERT( nLength <= GetData()->nAllocLength );
; 870  : 
; 871  : 		if( nLength < 0 || nLength > GetData()->nAllocLength)

  00013	83 7d 58 00	 cmp	 DWORD PTR nLength$[rbp], 0
  00017	7c 11		 jl	 SHORT $LN3@SetLength
  00019	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  0001d	e8 00 00 00 00	 call	 ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<char,0>::GetData
  00022	8b 40 0c	 mov	 eax, DWORD PTR [rax+12]
  00025	39 45 58	 cmp	 DWORD PTR nLength$[rbp], eax
  00028	7e 0a		 jle	 SHORT $LN2@SetLength
$LN3@SetLength:

; 872  : 			AtlThrow(E_INVALIDARG);

  0002a	b9 57 00 07 80	 mov	 ecx, -2147024809	; ffffffff80070057H
  0002f	e8 00 00 00 00	 call	 ?AtlThrowImpl@ATL@@YAXJ@Z ; ATL::AtlThrowImpl
$LN2@SetLength:

; 873  : 
; 874  : 		GetData()->nDataLength = nLength;

  00034	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  00038	e8 00 00 00 00	 call	 ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<char,0>::GetData
  0003d	8b 4d 58	 mov	 ecx, DWORD PTR nLength$[rbp]
  00040	89 48 08	 mov	 DWORD PTR [rax+8], ecx

; 875  : 		m_pszData[nLength] = 0;

  00043	48 63 45 58	 movsxd	 rax, DWORD PTR nLength$[rbp]
  00047	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  0004b	48 8b 09	 mov	 rcx, QWORD PTR [rcx]
  0004e	c6 04 01 00	 mov	 BYTE PTR [rcx+rax], 0
$LN4@SetLength:

; 876  : 	}

  00052	48 8d 65 40	 lea	 rsp, QWORD PTR [rbp+64]
  00056	5d		 pop	 rbp
  00057	c3		 ret	 0
?SetLength@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ENDP	; ATL::CSimpleStringT<char,0>::SetLength
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?Reallocate@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z
_TEXT	SEGMENT
pOldData$ = 0
pStringMgr$ = 8
pNewData$ = 16
tv78 = 88
this$ = 112
nLength$ = 120
?Reallocate@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z PROC	; ATL::CSimpleStringT<char,0>::Reallocate, COMDAT

; 849  : 	{

$LN6:
  00000	89 54 24 10	 mov	 DWORD PTR [rsp+16], edx
  00004	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00009	55		 push	 rbp
  0000a	48 81 ec 80 00
	00 00		 sub	 rsp, 128		; 00000080H
  00011	48 8d 6c 24 20	 lea	 rbp, QWORD PTR [rsp+32]

; 850  : 		CStringData* pOldData = GetData();

  00016	48 8b 4d 70	 mov	 rcx, QWORD PTR this$[rbp]
  0001a	e8 00 00 00 00	 call	 ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<char,0>::GetData
  0001f	48 89 45 00	 mov	 QWORD PTR pOldData$[rbp], rax

; 851  : 		ATLASSERT( pOldData->nAllocLength < nLength );
; 852  : 		IAtlStringMgr* pStringMgr = pOldData->pStringMgr;

  00023	48 8b 45 00	 mov	 rax, QWORD PTR pOldData$[rbp]
  00027	48 8b 00	 mov	 rax, QWORD PTR [rax]
  0002a	48 89 45 08	 mov	 QWORD PTR pStringMgr$[rbp], rax

; 853  : 		if ( pOldData->nAllocLength >= nLength || nLength <= 0)

  0002e	48 8b 45 00	 mov	 rax, QWORD PTR pOldData$[rbp]
  00032	8b 4d 78	 mov	 ecx, DWORD PTR nLength$[rbp]
  00035	39 48 0c	 cmp	 DWORD PTR [rax+12], ecx
  00038	7d 06		 jge	 SHORT $LN3@Reallocate
  0003a	83 7d 78 00	 cmp	 DWORD PTR nLength$[rbp], 0
  0003e	7f 07		 jg	 SHORT $LN2@Reallocate
$LN3@Reallocate:

; 854  : 		{
; 855  : 			ThrowMemoryException();

  00040	e8 00 00 00 00	 call	 ?ThrowMemoryException@?$CSimpleStringT@D$0A@@ATL@@KAXXZ ; ATL::CSimpleStringT<char,0>::ThrowMemoryException

; 856  : 			return;

  00045	eb 41		 jmp	 SHORT $LN1@Reallocate
$LN2@Reallocate:

; 857  : 		}
; 858  : 		CStringData* pNewData = pStringMgr->Reallocate( pOldData, nLength, sizeof( XCHAR ) );

  00047	48 8b 45 08	 mov	 rax, QWORD PTR pStringMgr$[rbp]
  0004b	48 8b 00	 mov	 rax, QWORD PTR [rax]
  0004e	48 8b 40 10	 mov	 rax, QWORD PTR [rax+16]
  00052	48 89 45 58	 mov	 QWORD PTR tv78[rbp], rax
  00056	41 b9 01 00 00
	00		 mov	 r9d, 1
  0005c	44 8b 45 78	 mov	 r8d, DWORD PTR nLength$[rbp]
  00060	48 8b 55 00	 mov	 rdx, QWORD PTR pOldData$[rbp]
  00064	48 8b 4d 08	 mov	 rcx, QWORD PTR pStringMgr$[rbp]
  00068	ff 55 58	 call	 QWORD PTR tv78[rbp]
  0006b	48 89 45 10	 mov	 QWORD PTR pNewData$[rbp], rax

; 859  : 		if( pNewData == NULL )

  0006f	48 83 7d 10 00	 cmp	 QWORD PTR pNewData$[rbp], 0
  00074	75 05		 jne	 SHORT $LN4@Reallocate

; 860  : 		{
; 861  : 			ThrowMemoryException();

  00076	e8 00 00 00 00	 call	 ?ThrowMemoryException@?$CSimpleStringT@D$0A@@ATL@@KAXXZ ; ATL::CSimpleStringT<char,0>::ThrowMemoryException
$LN4@Reallocate:

; 862  : 		}
; 863  : 		Attach( pNewData );

  0007b	48 8b 55 10	 mov	 rdx, QWORD PTR pNewData$[rbp]
  0007f	48 8b 4d 70	 mov	 rcx, QWORD PTR this$[rbp]
  00083	e8 00 00 00 00	 call	 ?Attach@?$CSimpleStringT@D$0A@@ATL@@AEAAXPEAUCStringData@2@@Z ; ATL::CSimpleStringT<char,0>::Attach
$LN1@Reallocate:
$LN5@Reallocate:

; 864  : 	}

  00088	48 8d 65 60	 lea	 rsp, QWORD PTR [rbp+96]
  0008c	5d		 pop	 rbp
  0008d	c3		 ret	 0
?Reallocate@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ENDP	; ATL::CSimpleStringT<char,0>::Reallocate
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?PrepareWrite2@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z
_TEXT	SEGMENT
pOldData$ = 0
nNewLength$1 = 8
this$ = 96
nLength$ = 104
?PrepareWrite2@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z PROC ; ATL::CSimpleStringT<char,0>::PrepareWrite2, COMDAT

; 818  : 	{

$LN10:
  00000	89 54 24 10	 mov	 DWORD PTR [rsp+16], edx
  00004	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00009	55		 push	 rbp
  0000a	48 83 ec 70	 sub	 rsp, 112		; 00000070H
  0000e	48 8d 6c 24 20	 lea	 rbp, QWORD PTR [rsp+32]

; 819  : 		CStringData* pOldData = GetData();

  00013	48 8b 4d 60	 mov	 rcx, QWORD PTR this$[rbp]
  00017	e8 00 00 00 00	 call	 ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<char,0>::GetData
  0001c	48 89 45 00	 mov	 QWORD PTR pOldData$[rbp], rax

; 820  : 		if( pOldData->nDataLength > nLength )

  00020	48 8b 45 00	 mov	 rax, QWORD PTR pOldData$[rbp]
  00024	8b 4d 68	 mov	 ecx, DWORD PTR nLength$[rbp]
  00027	39 48 08	 cmp	 DWORD PTR [rax+8], ecx
  0002a	7e 0a		 jle	 SHORT $LN2@PrepareWri

; 821  : 		{
; 822  : 			nLength = pOldData->nDataLength;

  0002c	48 8b 45 00	 mov	 rax, QWORD PTR pOldData$[rbp]
  00030	8b 40 08	 mov	 eax, DWORD PTR [rax+8]
  00033	89 45 68	 mov	 DWORD PTR nLength$[rbp], eax
$LN2@PrepareWri:

; 823  : 		}
; 824  : 		if( pOldData->IsShared() )

  00036	48 8b 4d 00	 mov	 rcx, QWORD PTR pOldData$[rbp]
  0003a	e8 00 00 00 00	 call	 ?IsShared@CStringData@ATL@@QEBA_NXZ ; ATL::CStringData::IsShared
  0003f	0f b6 c0	 movzx	 eax, al
  00042	85 c0		 test	 eax, eax
  00044	74 0e		 je	 SHORT $LN3@PrepareWri

; 825  : 		{
; 826  : 			Fork( nLength );

  00046	8b 55 68	 mov	 edx, DWORD PTR nLength$[rbp]
  00049	48 8b 4d 60	 mov	 rcx, QWORD PTR this$[rbp]
  0004d	e8 00 00 00 00	 call	 ?Fork@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<char,0>::Fork

; 827  : 		}

  00052	eb 58		 jmp	 SHORT $LN4@PrepareWri
$LN3@PrepareWri:

; 828  : 		else if( pOldData->nAllocLength < nLength )

  00054	48 8b 45 00	 mov	 rax, QWORD PTR pOldData$[rbp]
  00058	8b 4d 68	 mov	 ecx, DWORD PTR nLength$[rbp]
  0005b	39 48 0c	 cmp	 DWORD PTR [rax+12], ecx
  0005e	7d 4c		 jge	 SHORT $LN5@PrepareWri

; 829  : 		{
; 830  : 			// Grow exponentially, until we hit 1G, then by 1M thereafter.
; 831  : 			int nNewLength = pOldData->nAllocLength;

  00060	48 8b 45 00	 mov	 rax, QWORD PTR pOldData$[rbp]
  00064	8b 40 0c	 mov	 eax, DWORD PTR [rax+12]
  00067	89 45 08	 mov	 DWORD PTR nNewLength$1[rbp], eax

; 832  : 			if( nNewLength > 1024 * 1024 * 1024 )

  0006a	81 7d 08 00 00
	00 40		 cmp	 DWORD PTR nNewLength$1[rbp], 1073741824 ; 40000000H
  00071	7e 0d		 jle	 SHORT $LN6@PrepareWri

; 833  : 			{
; 834  : 				nNewLength += 1024 * 1024;

  00073	8b 45 08	 mov	 eax, DWORD PTR nNewLength$1[rbp]
  00076	05 00 00 10 00	 add	 eax, 1048576		; 00100000H
  0007b	89 45 08	 mov	 DWORD PTR nNewLength$1[rbp], eax

; 835  : 			}

  0007e	eb 12		 jmp	 SHORT $LN7@PrepareWri
$LN6@PrepareWri:

; 836  : 			else
; 837  : 			{
; 838  : 				// Exponential growth factor is 1.5.
; 839  : 				nNewLength = nNewLength + nNewLength / 2;

  00080	8b 45 08	 mov	 eax, DWORD PTR nNewLength$1[rbp]
  00083	99		 cdq
  00084	2b c2		 sub	 eax, edx
  00086	d1 f8		 sar	 eax, 1
  00088	8b 4d 08	 mov	 ecx, DWORD PTR nNewLength$1[rbp]
  0008b	03 c8		 add	 ecx, eax
  0008d	8b c1		 mov	 eax, ecx
  0008f	89 45 08	 mov	 DWORD PTR nNewLength$1[rbp], eax
$LN7@PrepareWri:

; 840  : 			}
; 841  : 			if( nNewLength < nLength )

  00092	8b 45 68	 mov	 eax, DWORD PTR nLength$[rbp]
  00095	39 45 08	 cmp	 DWORD PTR nNewLength$1[rbp], eax
  00098	7d 06		 jge	 SHORT $LN8@PrepareWri

; 842  : 			{
; 843  : 				nNewLength = nLength;

  0009a	8b 45 68	 mov	 eax, DWORD PTR nLength$[rbp]
  0009d	89 45 08	 mov	 DWORD PTR nNewLength$1[rbp], eax
$LN8@PrepareWri:

; 844  : 			}
; 845  : 			Reallocate( nNewLength );

  000a0	8b 55 08	 mov	 edx, DWORD PTR nNewLength$1[rbp]
  000a3	48 8b 4d 60	 mov	 rcx, QWORD PTR this$[rbp]
  000a7	e8 00 00 00 00	 call	 ?Reallocate@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<char,0>::Reallocate
$LN5@PrepareWri:
$LN4@PrepareWri:

; 846  : 		}
; 847  : 	}

  000ac	48 8d 65 50	 lea	 rsp, QWORD PTR [rbp+80]
  000b0	5d		 pop	 rbp
  000b1	c3		 ret	 0
?PrepareWrite2@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ENDP ; ATL::CSimpleStringT<char,0>::PrepareWrite2
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?PrepareWrite@?$CSimpleStringT@D$0A@@ATL@@AEAAPEADH@Z
_TEXT	SEGMENT
pOldData$ = 0
nShared$ = 8
nTooShort$ = 12
this$ = 96
nLength$ = 104
?PrepareWrite@?$CSimpleStringT@D$0A@@ATL@@AEAAPEADH@Z PROC ; ATL::CSimpleStringT<char,0>::PrepareWrite, COMDAT

; 803  : 	{

$LN5:
  00000	89 54 24 10	 mov	 DWORD PTR [rsp+16], edx
  00004	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00009	55		 push	 rbp
  0000a	48 83 ec 70	 sub	 rsp, 112		; 00000070H
  0000e	48 8d 6c 24 20	 lea	 rbp, QWORD PTR [rsp+32]

; 804  : 		if (nLength < 0)

  00013	83 7d 68 00	 cmp	 DWORD PTR nLength$[rbp], 0
  00017	7d 0a		 jge	 SHORT $LN2@PrepareWri

; 805  : 			AtlThrow(E_INVALIDARG);

  00019	b9 57 00 07 80	 mov	 ecx, -2147024809	; ffffffff80070057H
  0001e	e8 00 00 00 00	 call	 ?AtlThrowImpl@ATL@@YAXJ@Z ; ATL::AtlThrowImpl
$LN2@PrepareWri:

; 806  : 
; 807  : 		CStringData* pOldData = GetData();

  00023	48 8b 4d 60	 mov	 rcx, QWORD PTR this$[rbp]
  00027	e8 00 00 00 00	 call	 ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<char,0>::GetData
  0002c	48 89 45 00	 mov	 QWORD PTR pOldData$[rbp], rax

; 808  : 		int nShared = 1-pOldData->nRefs;  // nShared < 0 means true, >= 0 means false

  00030	48 8b 45 00	 mov	 rax, QWORD PTR pOldData$[rbp]
  00034	b9 01 00 00 00	 mov	 ecx, 1
  00039	2b 48 10	 sub	 ecx, DWORD PTR [rax+16]
  0003c	8b c1		 mov	 eax, ecx
  0003e	89 45 08	 mov	 DWORD PTR nShared$[rbp], eax

; 809  : 		int nTooShort = pOldData->nAllocLength-nLength;  // nTooShort < 0 means true, >= 0 means false

  00041	48 8b 45 00	 mov	 rax, QWORD PTR pOldData$[rbp]
  00045	8b 4d 68	 mov	 ecx, DWORD PTR nLength$[rbp]
  00048	8b 40 0c	 mov	 eax, DWORD PTR [rax+12]
  0004b	2b c1		 sub	 eax, ecx
  0004d	89 45 0c	 mov	 DWORD PTR nTooShort$[rbp], eax

; 810  : 		if( (nShared|nTooShort) < 0 )  // If either sign bit is set (i.e. either is less than zero), we need to copy data

  00050	8b 45 0c	 mov	 eax, DWORD PTR nTooShort$[rbp]
  00053	8b 4d 08	 mov	 ecx, DWORD PTR nShared$[rbp]
  00056	0b c8		 or	 ecx, eax
  00058	8b c1		 mov	 eax, ecx
  0005a	85 c0		 test	 eax, eax
  0005c	7d 0c		 jge	 SHORT $LN3@PrepareWri

; 811  : 		{
; 812  : 			PrepareWrite2( nLength );

  0005e	8b 55 68	 mov	 edx, DWORD PTR nLength$[rbp]
  00061	48 8b 4d 60	 mov	 rcx, QWORD PTR this$[rbp]
  00065	e8 00 00 00 00	 call	 ?PrepareWrite2@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<char,0>::PrepareWrite2
$LN3@PrepareWri:

; 813  : 		}
; 814  : 
; 815  : 		return( m_pszData );

  0006a	48 8b 45 60	 mov	 rax, QWORD PTR this$[rbp]
  0006e	48 8b 00	 mov	 rax, QWORD PTR [rax]
$LN4@PrepareWri:

; 816  : 	}

  00071	48 8d 65 50	 lea	 rsp, QWORD PTR [rbp+80]
  00075	5d		 pop	 rbp
  00076	c3		 ret	 0
?PrepareWrite@?$CSimpleStringT@D$0A@@ATL@@AEAAPEADH@Z ENDP ; ATL::CSimpleStringT<char,0>::PrepareWrite
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ
_TEXT	SEGMENT
this$ = 80
?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ PROC ; ATL::CSimpleStringT<char,0>::GetData, COMDAT

; 799  : 	{

$LN3:
  00000	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00005	55		 push	 rbp
  00006	48 83 ec 40	 sub	 rsp, 64			; 00000040H
  0000a	48 8b ec	 mov	 rbp, rsp

; 800  : 		return( reinterpret_cast< CStringData* >( m_pszData )-1 );

  0000d	48 8b 45 50	 mov	 rax, QWORD PTR this$[rbp]
  00011	48 8b 00	 mov	 rax, QWORD PTR [rax]
  00014	48 83 e8 18	 sub	 rax, 24

; 801  : 	}

  00018	48 8d 65 40	 lea	 rsp, QWORD PTR [rbp+64]
  0001c	5d		 pop	 rbp
  0001d	c3		 ret	 0
?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ENDP ; ATL::CSimpleStringT<char,0>::GetData
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?Fork@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z
_TEXT	SEGMENT
pOldData$ = 0
nOldLength$ = 8
pNewData$ = 16
nCharsToCopy$ = 24
tv86 = 92
tv134 = 96
tv76 = 96
tv132 = 104
tv83 = 104
this$ = 128
nLength$ = 136
?Fork@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z PROC		; ATL::CSimpleStringT<char,0>::Fork, COMDAT

; 783  : 	{

$LN6:
  00000	89 54 24 10	 mov	 DWORD PTR [rsp+16], edx
  00004	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00009	55		 push	 rbp
  0000a	48 81 ec 90 00
	00 00		 sub	 rsp, 144		; 00000090H
  00011	48 8d 6c 24 20	 lea	 rbp, QWORD PTR [rsp+32]

; 784  : 		CStringData* pOldData = GetData();

  00016	48 8b 8d 80 00
	00 00		 mov	 rcx, QWORD PTR this$[rbp]
  0001d	e8 00 00 00 00	 call	 ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<char,0>::GetData
  00022	48 89 45 00	 mov	 QWORD PTR pOldData$[rbp], rax

; 785  : 		int nOldLength = pOldData->nDataLength;

  00026	48 8b 45 00	 mov	 rax, QWORD PTR pOldData$[rbp]
  0002a	8b 40 08	 mov	 eax, DWORD PTR [rax+8]
  0002d	89 45 08	 mov	 DWORD PTR nOldLength$[rbp], eax

; 786  : 		CStringData* pNewData = pOldData->pStringMgr->Clone()->Allocate( nLength, sizeof( XCHAR ) );

  00030	48 8b 45 00	 mov	 rax, QWORD PTR pOldData$[rbp]
  00034	48 8b 00	 mov	 rax, QWORD PTR [rax]
  00037	48 8b 4d 00	 mov	 rcx, QWORD PTR pOldData$[rbp]
  0003b	48 8b 09	 mov	 rcx, QWORD PTR [rcx]
  0003e	48 8b 00	 mov	 rax, QWORD PTR [rax]
  00041	ff 50 20	 call	 QWORD PTR [rax+32]
  00044	48 89 45 60	 mov	 QWORD PTR tv76[rbp], rax
  00048	48 8b 45 60	 mov	 rax, QWORD PTR tv76[rbp]
  0004c	48 8b 00	 mov	 rax, QWORD PTR [rax]
  0004f	48 8b 00	 mov	 rax, QWORD PTR [rax]
  00052	48 89 45 68	 mov	 QWORD PTR tv83[rbp], rax
  00056	41 b8 01 00 00
	00		 mov	 r8d, 1
  0005c	8b 95 88 00 00
	00		 mov	 edx, DWORD PTR nLength$[rbp]
  00062	48 8b 4d 60	 mov	 rcx, QWORD PTR tv76[rbp]
  00066	ff 55 68	 call	 QWORD PTR tv83[rbp]
  00069	48 89 45 10	 mov	 QWORD PTR pNewData$[rbp], rax

; 787  : 		if( pNewData == NULL )

  0006d	48 83 7d 10 00	 cmp	 QWORD PTR pNewData$[rbp], 0
  00072	75 05		 jne	 SHORT $LN2@Fork

; 788  : 		{
; 789  : 			ThrowMemoryException();

  00074	e8 00 00 00 00	 call	 ?ThrowMemoryException@?$CSimpleStringT@D$0A@@ATL@@KAXXZ ; ATL::CSimpleStringT<char,0>::ThrowMemoryException
$LN2@Fork:

; 790  : 		}
; 791  : 		int nCharsToCopy = ((nOldLength < nLength) ? nOldLength : nLength)+1;  // Copy '\0'

  00079	8b 85 88 00 00
	00		 mov	 eax, DWORD PTR nLength$[rbp]
  0007f	39 45 08	 cmp	 DWORD PTR nOldLength$[rbp], eax
  00082	7d 08		 jge	 SHORT $LN4@Fork
  00084	8b 45 08	 mov	 eax, DWORD PTR nOldLength$[rbp]
  00087	89 45 5c	 mov	 DWORD PTR tv86[rbp], eax
  0008a	eb 09		 jmp	 SHORT $LN5@Fork
$LN4@Fork:
  0008c	8b 85 88 00 00
	00		 mov	 eax, DWORD PTR nLength$[rbp]
  00092	89 45 5c	 mov	 DWORD PTR tv86[rbp], eax
$LN5@Fork:
  00095	8b 45 5c	 mov	 eax, DWORD PTR tv86[rbp]
  00098	ff c0		 inc	 eax
  0009a	89 45 18	 mov	 DWORD PTR nCharsToCopy$[rbp], eax

; 792  : 		memcpy_s( PXSTR( pNewData->data() ), nCharsToCopy * sizeof( XCHAR ),

  0009d	48 8b 4d 00	 mov	 rcx, QWORD PTR pOldData$[rbp]
  000a1	e8 00 00 00 00	 call	 ?data@CStringData@ATL@@QEAAPEAXXZ ; ATL::CStringData::data
  000a6	48 89 45 60	 mov	 QWORD PTR tv134[rbp], rax
  000aa	48 8b 4d 10	 mov	 rcx, QWORD PTR pNewData$[rbp]
  000ae	e8 00 00 00 00	 call	 ?data@CStringData@ATL@@QEAAPEAXXZ ; ATL::CStringData::data
  000b3	48 89 45 68	 mov	 QWORD PTR tv132[rbp], rax
  000b7	48 63 45 18	 movsxd	 rax, DWORD PTR nCharsToCopy$[rbp]
  000bb	48 63 4d 18	 movsxd	 rcx, DWORD PTR nCharsToCopy$[rbp]
  000bf	4c 8b c8	 mov	 r9, rax
  000c2	4c 8b 45 60	 mov	 r8, QWORD PTR tv134[rbp]
  000c6	48 8b d1	 mov	 rdx, rcx
  000c9	48 8b 4d 68	 mov	 rcx, QWORD PTR tv132[rbp]
  000cd	e8 00 00 00 00	 call	 memcpy_s

; 793  : 			PCXSTR( pOldData->data() ), nCharsToCopy * sizeof( XCHAR ));
; 794  : 		pNewData->nDataLength = nOldLength;

  000d2	48 8b 45 10	 mov	 rax, QWORD PTR pNewData$[rbp]
  000d6	8b 4d 08	 mov	 ecx, DWORD PTR nOldLength$[rbp]
  000d9	89 48 08	 mov	 DWORD PTR [rax+8], ecx

; 795  : 		pOldData->Release();

  000dc	48 8b 4d 00	 mov	 rcx, QWORD PTR pOldData$[rbp]
  000e0	e8 00 00 00 00	 call	 ?Release@CStringData@ATL@@QEAAXXZ ; ATL::CStringData::Release

; 796  : 		Attach( pNewData );

  000e5	48 8b 55 10	 mov	 rdx, QWORD PTR pNewData$[rbp]
  000e9	48 8b 8d 80 00
	00 00		 mov	 rcx, QWORD PTR this$[rbp]
  000f0	e8 00 00 00 00	 call	 ?Attach@?$CSimpleStringT@D$0A@@ATL@@AEAAXPEAUCStringData@2@@Z ; ATL::CSimpleStringT<char,0>::Attach
$LN3@Fork:

; 797  : 	}

  000f5	48 8d 65 70	 lea	 rsp, QWORD PTR [rbp+112]
  000f9	5d		 pop	 rbp
  000fa	c3		 ret	 0
?Fork@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ENDP		; ATL::CSimpleStringT<char,0>::Fork
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?Attach@?$CSimpleStringT@D$0A@@ATL@@AEAAXPEAUCStringData@2@@Z
_TEXT	SEGMENT
this$ = 80
pData$ = 88
?Attach@?$CSimpleStringT@D$0A@@ATL@@AEAAXPEAUCStringData@2@@Z PROC ; ATL::CSimpleStringT<char,0>::Attach, COMDAT

; 779  : 	{

$LN3:
  00000	48 89 54 24 10	 mov	 QWORD PTR [rsp+16], rdx
  00005	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  0000a	55		 push	 rbp
  0000b	48 83 ec 60	 sub	 rsp, 96			; 00000060H
  0000f	48 8d 6c 24 20	 lea	 rbp, QWORD PTR [rsp+32]

; 780  : 		m_pszData = static_cast< PXSTR >( pData->data() );

  00014	48 8b 4d 58	 mov	 rcx, QWORD PTR pData$[rbp]
  00018	e8 00 00 00 00	 call	 ?data@CStringData@ATL@@QEAAPEAXXZ ; ATL::CStringData::data
  0001d	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  00021	48 89 01	 mov	 QWORD PTR [rcx], rax

; 781  : 	}

  00024	48 8d 65 40	 lea	 rsp, QWORD PTR [rbp+64]
  00028	5d		 pop	 rbp
  00029	c3		 ret	 0
?Attach@?$CSimpleStringT@D$0A@@ATL@@AEAAXPEAUCStringData@2@@Z ENDP ; ATL::CSimpleStringT<char,0>::Attach
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?ThrowMemoryException@?$CSimpleStringT@D$0A@@ATL@@KAXXZ
_TEXT	SEGMENT
?ThrowMemoryException@?$CSimpleStringT@D$0A@@ATL@@KAXXZ PROC ; ATL::CSimpleStringT<char,0>::ThrowMemoryException, COMDAT

; 772  : 	{

$LN3:
  00000	40 55		 push	 rbp
  00002	48 83 ec 60	 sub	 rsp, 96			; 00000060H
  00006	48 8d 6c 24 20	 lea	 rbp, QWORD PTR [rsp+32]

; 773  : 		AtlThrow( E_OUTOFMEMORY );

  0000b	b9 0e 00 07 80	 mov	 ecx, -2147024882	; ffffffff8007000eH
  00010	e8 00 00 00 00	 call	 ?AtlThrowImpl@ATL@@YAXJ@Z ; ATL::AtlThrowImpl
$LN2@ThrowMemor:

; 774  : 	}

  00015	48 8d 65 40	 lea	 rsp, QWORD PTR [rbp+64]
  00019	5d		 pop	 rbp
  0001a	c3		 ret	 0
?ThrowMemoryException@?$CSimpleStringT@D$0A@@ATL@@KAXXZ ENDP ; ATL::CSimpleStringT<char,0>::ThrowMemoryException
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z
_TEXT	SEGMENT
psz$ = 80
sizeInXChar$ = 88
?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z PROC ; ATL::CSimpleStringT<char,0>::StringLengthN, COMDAT

; 739  : 	{

$LN4:
  00000	48 89 54 24 10	 mov	 QWORD PTR [rsp+16], rdx
  00005	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  0000a	55		 push	 rbp
  0000b	48 83 ec 60	 sub	 rsp, 96			; 00000060H
  0000f	48 8d 6c 24 20	 lea	 rbp, QWORD PTR [rsp+32]

; 740  : 		if( psz == NULL )

  00014	48 83 7d 50 00	 cmp	 QWORD PTR psz$[rbp], 0
  00019	75 04		 jne	 SHORT $LN2@StringLeng

; 741  : 		{
; 742  : 			return( 0 );

  0001b	33 c0		 xor	 eax, eax
  0001d	eb 0e		 jmp	 SHORT $LN1@StringLeng
$LN2@StringLeng:

; 743  : 		}
; 744  : 		return( int( strnlen( psz, sizeInXChar ) ) );

  0001f	48 8b 55 58	 mov	 rdx, QWORD PTR sizeInXChar$[rbp]
  00023	48 8b 4d 50	 mov	 rcx, QWORD PTR psz$[rbp]
  00027	e8 00 00 00 00	 call	 strnlen
  0002c	90		 npad	 1
$LN1@StringLeng:

; 745  : 	}

  0002d	48 8d 65 40	 lea	 rsp, QWORD PTR [rbp+64]
  00031	5d		 pop	 rbp
  00032	c3		 ret	 0
?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z ENDP ; ATL::CSimpleStringT<char,0>::StringLengthN
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?ReleaseBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAXH@Z
_TEXT	SEGMENT
nAlloc$1 = 0
this$ = 96
nNewLength$ = 104
?ReleaseBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAXH@Z PROC ; ATL::CSimpleStringT<char,0>::ReleaseBuffer, COMDAT

; 557  : 	{

$LN4:
  00000	89 54 24 10	 mov	 DWORD PTR [rsp+16], edx
  00004	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00009	55		 push	 rbp
  0000a	48 83 ec 70	 sub	 rsp, 112		; 00000070H
  0000e	48 8d 6c 24 20	 lea	 rbp, QWORD PTR [rsp+32]

; 558  : 		if( nNewLength == -1 )

  00013	83 7d 68 ff	 cmp	 DWORD PTR nNewLength$[rbp], -1
  00017	75 25		 jne	 SHORT $LN2@ReleaseBuf

; 559  : 		{
; 560  : 			int nAlloc = GetData()->nAllocLength;

  00019	48 8b 4d 60	 mov	 rcx, QWORD PTR this$[rbp]
  0001d	e8 00 00 00 00	 call	 ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<char,0>::GetData
  00022	8b 40 0c	 mov	 eax, DWORD PTR [rax+12]
  00025	89 45 00	 mov	 DWORD PTR nAlloc$1[rbp], eax

; 561  : 			nNewLength = StringLengthN( m_pszData, nAlloc);

  00028	48 63 45 00	 movsxd	 rax, DWORD PTR nAlloc$1[rbp]
  0002c	48 8b d0	 mov	 rdx, rax
  0002f	48 8b 45 60	 mov	 rax, QWORD PTR this$[rbp]
  00033	48 8b 08	 mov	 rcx, QWORD PTR [rax]
  00036	e8 00 00 00 00	 call	 ?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z ; ATL::CSimpleStringT<char,0>::StringLengthN
  0003b	89 45 68	 mov	 DWORD PTR nNewLength$[rbp], eax
$LN2@ReleaseBuf:

; 562  : 		}
; 563  : 		SetLength( nNewLength );

  0003e	8b 55 68	 mov	 edx, DWORD PTR nNewLength$[rbp]
  00041	48 8b 4d 60	 mov	 rcx, QWORD PTR this$[rbp]
  00045	e8 00 00 00 00	 call	 ?SetLength@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<char,0>::SetLength

; 564  : 	}

  0004a	48 8d 65 50	 lea	 rsp, QWORD PTR [rbp+80]
  0004e	5d		 pop	 rbp
  0004f	c3		 ret	 0
?ReleaseBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAXH@Z ENDP ; ATL::CSimpleStringT<char,0>::ReleaseBuffer
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?GetLength@?$CSimpleStringT@D$0A@@ATL@@QEBAHXZ
_TEXT	SEGMENT
this$ = 80
?GetLength@?$CSimpleStringT@D$0A@@ATL@@QEBAHXZ PROC	; ATL::CSimpleStringT<char,0>::GetLength, COMDAT

; 518  : 	{

$LN3:
  00000	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00005	55		 push	 rbp
  00006	48 83 ec 60	 sub	 rsp, 96			; 00000060H
  0000a	48 8d 6c 24 20	 lea	 rbp, QWORD PTR [rsp+32]

; 519  : 		return( GetData()->nDataLength );

  0000f	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  00013	e8 00 00 00 00	 call	 ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<char,0>::GetData
  00018	8b 40 08	 mov	 eax, DWORD PTR [rax+8]

; 520  : 	}

  0001b	48 8d 65 40	 lea	 rsp, QWORD PTR [rbp+64]
  0001f	5d		 pop	 rbp
  00020	c3		 ret	 0
?GetLength@?$CSimpleStringT@D$0A@@ATL@@QEBAHXZ ENDP	; ATL::CSimpleStringT<char,0>::GetLength
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?GetBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAPEADH@Z
_TEXT	SEGMENT
this$ = 80
nMinBufferLength$ = 88
?GetBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAPEADH@Z PROC	; ATL::CSimpleStringT<char,0>::GetBuffer, COMDAT

; 507  : 	{

$LN3:
  00000	89 54 24 10	 mov	 DWORD PTR [rsp+16], edx
  00004	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00009	55		 push	 rbp
  0000a	48 83 ec 60	 sub	 rsp, 96			; 00000060H
  0000e	48 8d 6c 24 20	 lea	 rbp, QWORD PTR [rsp+32]

; 508  : 		return( PrepareWrite( nMinBufferLength ) );

  00013	8b 55 58	 mov	 edx, DWORD PTR nMinBufferLength$[rbp]
  00016	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  0001a	e8 00 00 00 00	 call	 ?PrepareWrite@?$CSimpleStringT@D$0A@@ATL@@AEAAPEADH@Z ; ATL::CSimpleStringT<char,0>::PrepareWrite

; 509  : 	}

  0001f	48 8d 65 40	 lea	 rsp, QWORD PTR [rbp+64]
  00023	5d		 pop	 rbp
  00024	c3		 ret	 0
?GetBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAPEADH@Z ENDP	; ATL::CSimpleStringT<char,0>::GetBuffer
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ??B?$CSimpleStringT@D$0A@@ATL@@QEBAPEBDXZ
_TEXT	SEGMENT
this$ = 80
??B?$CSimpleStringT@D$0A@@ATL@@QEBAPEBDXZ PROC		; ATL::CSimpleStringT<char,0>::operator char const *, COMDAT

; 376  : 	{

$LN3:
  00000	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00005	55		 push	 rbp
  00006	48 83 ec 40	 sub	 rsp, 64			; 00000040H
  0000a	48 8b ec	 mov	 rbp, rsp

; 377  : 		return( m_pszData );

  0000d	48 8b 45 50	 mov	 rax, QWORD PTR this$[rbp]
  00011	48 8b 00	 mov	 rax, QWORD PTR [rax]

; 378  : 	}

  00014	48 8d 65 40	 lea	 rsp, QWORD PTR [rbp+64]
  00018	5d		 pop	 rbp
  00019	c3		 ret	 0
??B?$CSimpleStringT@D$0A@@ATL@@QEBAPEBDXZ ENDP		; ATL::CSimpleStringT<char,0>::operator char const *
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\afxcoll.inl
;	COMDAT ?GetData@CByteArray@@QEBAPEBEXZ
_TEXT	SEGMENT
this$ = 80
?GetData@CByteArray@@QEBAPEBEXZ PROC			; CByteArray::GetData, COMDAT

; 46   : 	{ return (const BYTE*)m_pData; }

$LN3:
  00000	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00005	55		 push	 rbp
  00006	48 83 ec 40	 sub	 rsp, 64			; 00000040H
  0000a	48 8b ec	 mov	 rbp, rsp
  0000d	48 8b 45 50	 mov	 rax, QWORD PTR this$[rbp]
  00011	48 8b 40 08	 mov	 rax, QWORD PTR [rax+8]
  00015	48 8d 65 40	 lea	 rsp, QWORD PTR [rbp+64]
  00019	5d		 pop	 rbp
  0001a	c3		 ret	 0
?GetData@CByteArray@@QEBAPEBEXZ ENDP			; CByteArray::GetData
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\afxcoll.inl
;	COMDAT ?SetAt@CByteArray@@QEAAX_JE@Z
_TEXT	SEGMENT
this$ = 80
nIndex$ = 88
newElement$ = 96
?SetAt@CByteArray@@QEAAX_JE@Z PROC			; CByteArray::SetAt, COMDAT

; 35   : 	{ ASSERT(nIndex >= 0 && nIndex < m_nSize);

$LN5:
  00000	44 88 44 24 18	 mov	 BYTE PTR [rsp+24], r8b
  00005	48 89 54 24 10	 mov	 QWORD PTR [rsp+16], rdx
  0000a	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  0000f	55		 push	 rbp
  00010	48 83 ec 60	 sub	 rsp, 96			; 00000060H
  00014	48 8d 6c 24 20	 lea	 rbp, QWORD PTR [rsp+32]

; 36   : 		if( nIndex < 0 || nIndex >= m_nSize )

  00019	48 83 7d 58 00	 cmp	 QWORD PTR nIndex$[rbp], 0
  0001e	7c 0e		 jl	 SHORT $LN3@SetAt
  00020	48 8b 45 50	 mov	 rax, QWORD PTR this$[rbp]
  00024	48 8b 40 10	 mov	 rax, QWORD PTR [rax+16]
  00028	48 39 45 58	 cmp	 QWORD PTR nIndex$[rbp], rax
  0002c	7c 05		 jl	 SHORT $LN2@SetAt
$LN3@SetAt:

; 37   : 			AfxThrowInvalidArgException();

  0002e	e8 00 00 00 00	 call	 ?AfxThrowInvalidArgException@@YAXXZ ; AfxThrowInvalidArgException
$LN2@SetAt:

; 38   : 		m_pData[nIndex] = newElement; }

  00033	48 8b 45 50	 mov	 rax, QWORD PTR this$[rbp]
  00037	48 8b 40 08	 mov	 rax, QWORD PTR [rax+8]
  0003b	48 8b 4d 58	 mov	 rcx, QWORD PTR nIndex$[rbp]
  0003f	0f b6 55 60	 movzx	 edx, BYTE PTR newElement$[rbp]
  00043	88 14 08	 mov	 BYTE PTR [rax+rcx], dl
$LN4@SetAt:
  00046	48 8d 65 40	 lea	 rsp, QWORD PTR [rbp+64]
  0004a	5d		 pop	 rbp
  0004b	c3		 ret	 0
?SetAt@CByteArray@@QEAAX_JE@Z ENDP			; CByteArray::SetAt
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\afxcoll.inl
;	COMDAT ?RemoveAll@CByteArray@@QEAAXXZ
_TEXT	SEGMENT
this$ = 80
?RemoveAll@CByteArray@@QEAAXXZ PROC			; CByteArray::RemoveAll, COMDAT

; 28   : 	{ SetSize(0); }

$LN3:
  00000	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00005	55		 push	 rbp
  00006	48 83 ec 60	 sub	 rsp, 96			; 00000060H
  0000a	48 8d 6c 24 20	 lea	 rbp, QWORD PTR [rsp+32]
  0000f	49 c7 c0 ff ff
	ff ff		 mov	 r8, -1
  00016	33 d2		 xor	 edx, edx
  00018	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  0001c	e8 00 00 00 00	 call	 ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize
  00021	48 8d 65 40	 lea	 rsp, QWORD PTR [rbp+64]
  00025	5d		 pop	 rbp
  00026	c3		 ret	 0
?RemoveAll@CByteArray@@QEAAXXZ ENDP			; CByteArray::RemoveAll
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\afxcoll.inl
;	COMDAT ?GetSize@CByteArray@@QEBA_JXZ
_TEXT	SEGMENT
this$ = 80
?GetSize@CByteArray@@QEBA_JXZ PROC			; CByteArray::GetSize, COMDAT

; 20   : 	{ return m_nSize; }

$LN3:
  00000	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00005	55		 push	 rbp
  00006	48 83 ec 40	 sub	 rsp, 64			; 00000040H
  0000a	48 8b ec	 mov	 rbp, rsp
  0000d	48 8b 45 50	 mov	 rax, QWORD PTR this$[rbp]
  00011	48 8b 40 10	 mov	 rax, QWORD PTR [rax+16]
  00015	48 8d 65 40	 lea	 rsp, QWORD PTR [rbp+64]
  00019	5d		 pop	 rbp
  0001a	c3		 ret	 0
?GetSize@CByteArray@@QEBA_JXZ ENDP			; CByteArray::GetSize
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?SetLength@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z
_TEXT	SEGMENT
this$ = 80
nLength$ = 88
?SetLength@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z PROC	; ATL::CSimpleStringT<wchar_t,0>::SetLength, COMDAT

; 867  : 	{

$LN5:
  00000	89 54 24 10	 mov	 DWORD PTR [rsp+16], edx
  00004	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00009	55		 push	 rbp
  0000a	48 83 ec 60	 sub	 rsp, 96			; 00000060H
  0000e	48 8d 6c 24 20	 lea	 rbp, QWORD PTR [rsp+32]

; 868  : 		ATLASSERT( nLength >= 0 );
; 869  : 		ATLASSERT( nLength <= GetData()->nAllocLength );
; 870  : 
; 871  : 		if( nLength < 0 || nLength > GetData()->nAllocLength)

  00013	83 7d 58 00	 cmp	 DWORD PTR nLength$[rbp], 0
  00017	7c 11		 jl	 SHORT $LN3@SetLength
  00019	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  0001d	e8 00 00 00 00	 call	 ?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<wchar_t,0>::GetData
  00022	8b 40 0c	 mov	 eax, DWORD PTR [rax+12]
  00025	39 45 58	 cmp	 DWORD PTR nLength$[rbp], eax
  00028	7e 0a		 jle	 SHORT $LN2@SetLength
$LN3@SetLength:

; 872  : 			AtlThrow(E_INVALIDARG);

  0002a	b9 57 00 07 80	 mov	 ecx, -2147024809	; ffffffff80070057H
  0002f	e8 00 00 00 00	 call	 ?AtlThrowImpl@ATL@@YAXJ@Z ; ATL::AtlThrowImpl
$LN2@SetLength:

; 873  : 
; 874  : 		GetData()->nDataLength = nLength;

  00034	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  00038	e8 00 00 00 00	 call	 ?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<wchar_t,0>::GetData
  0003d	8b 4d 58	 mov	 ecx, DWORD PTR nLength$[rbp]
  00040	89 48 08	 mov	 DWORD PTR [rax+8], ecx

; 875  : 		m_pszData[nLength] = 0;

  00043	48 63 45 58	 movsxd	 rax, DWORD PTR nLength$[rbp]
  00047	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  0004b	48 8b 09	 mov	 rcx, QWORD PTR [rcx]
  0004e	33 d2		 xor	 edx, edx
  00050	66 89 14 41	 mov	 WORD PTR [rcx+rax*2], dx
$LN4@SetLength:

; 876  : 	}

  00054	48 8d 65 40	 lea	 rsp, QWORD PTR [rbp+64]
  00058	5d		 pop	 rbp
  00059	c3		 ret	 0
?SetLength@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ENDP	; ATL::CSimpleStringT<wchar_t,0>::SetLength
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?Reallocate@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z
_TEXT	SEGMENT
pOldData$ = 0
pStringMgr$ = 8
pNewData$ = 16
tv78 = 88
this$ = 112
nLength$ = 120
?Reallocate@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z PROC	; ATL::CSimpleStringT<wchar_t,0>::Reallocate, COMDAT

; 849  : 	{

$LN6:
  00000	89 54 24 10	 mov	 DWORD PTR [rsp+16], edx
  00004	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00009	55		 push	 rbp
  0000a	48 81 ec 80 00
	00 00		 sub	 rsp, 128		; 00000080H
  00011	48 8d 6c 24 20	 lea	 rbp, QWORD PTR [rsp+32]

; 850  : 		CStringData* pOldData = GetData();

  00016	48 8b 4d 70	 mov	 rcx, QWORD PTR this$[rbp]
  0001a	e8 00 00 00 00	 call	 ?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<wchar_t,0>::GetData
  0001f	48 89 45 00	 mov	 QWORD PTR pOldData$[rbp], rax

; 851  : 		ATLASSERT( pOldData->nAllocLength < nLength );
; 852  : 		IAtlStringMgr* pStringMgr = pOldData->pStringMgr;

  00023	48 8b 45 00	 mov	 rax, QWORD PTR pOldData$[rbp]
  00027	48 8b 00	 mov	 rax, QWORD PTR [rax]
  0002a	48 89 45 08	 mov	 QWORD PTR pStringMgr$[rbp], rax

; 853  : 		if ( pOldData->nAllocLength >= nLength || nLength <= 0)

  0002e	48 8b 45 00	 mov	 rax, QWORD PTR pOldData$[rbp]
  00032	8b 4d 78	 mov	 ecx, DWORD PTR nLength$[rbp]
  00035	39 48 0c	 cmp	 DWORD PTR [rax+12], ecx
  00038	7d 06		 jge	 SHORT $LN3@Reallocate
  0003a	83 7d 78 00	 cmp	 DWORD PTR nLength$[rbp], 0
  0003e	7f 07		 jg	 SHORT $LN2@Reallocate
$LN3@Reallocate:

; 854  : 		{
; 855  : 			ThrowMemoryException();

  00040	e8 00 00 00 00	 call	 ?ThrowMemoryException@?$CSimpleStringT@_W$0A@@ATL@@KAXXZ ; ATL::CSimpleStringT<wchar_t,0>::ThrowMemoryException

; 856  : 			return;

  00045	eb 41		 jmp	 SHORT $LN1@Reallocate
$LN2@Reallocate:

; 857  : 		}
; 858  : 		CStringData* pNewData = pStringMgr->Reallocate( pOldData, nLength, sizeof( XCHAR ) );

  00047	48 8b 45 08	 mov	 rax, QWORD PTR pStringMgr$[rbp]
  0004b	48 8b 00	 mov	 rax, QWORD PTR [rax]
  0004e	48 8b 40 10	 mov	 rax, QWORD PTR [rax+16]
  00052	48 89 45 58	 mov	 QWORD PTR tv78[rbp], rax
  00056	41 b9 02 00 00
	00		 mov	 r9d, 2
  0005c	44 8b 45 78	 mov	 r8d, DWORD PTR nLength$[rbp]
  00060	48 8b 55 00	 mov	 rdx, QWORD PTR pOldData$[rbp]
  00064	48 8b 4d 08	 mov	 rcx, QWORD PTR pStringMgr$[rbp]
  00068	ff 55 58	 call	 QWORD PTR tv78[rbp]
  0006b	48 89 45 10	 mov	 QWORD PTR pNewData$[rbp], rax

; 859  : 		if( pNewData == NULL )

  0006f	48 83 7d 10 00	 cmp	 QWORD PTR pNewData$[rbp], 0
  00074	75 05		 jne	 SHORT $LN4@Reallocate

; 860  : 		{
; 861  : 			ThrowMemoryException();

  00076	e8 00 00 00 00	 call	 ?ThrowMemoryException@?$CSimpleStringT@_W$0A@@ATL@@KAXXZ ; ATL::CSimpleStringT<wchar_t,0>::ThrowMemoryException
$LN4@Reallocate:

; 862  : 		}
; 863  : 		Attach( pNewData );

  0007b	48 8b 55 10	 mov	 rdx, QWORD PTR pNewData$[rbp]
  0007f	48 8b 4d 70	 mov	 rcx, QWORD PTR this$[rbp]
  00083	e8 00 00 00 00	 call	 ?Attach@?$CSimpleStringT@_W$0A@@ATL@@AEAAXPEAUCStringData@2@@Z ; ATL::CSimpleStringT<wchar_t,0>::Attach
$LN1@Reallocate:
$LN5@Reallocate:

; 864  : 	}

  00088	48 8d 65 60	 lea	 rsp, QWORD PTR [rbp+96]
  0008c	5d		 pop	 rbp
  0008d	c3		 ret	 0
?Reallocate@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ENDP	; ATL::CSimpleStringT<wchar_t,0>::Reallocate
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?PrepareWrite2@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z
_TEXT	SEGMENT
pOldData$ = 0
nNewLength$1 = 8
this$ = 96
nLength$ = 104
?PrepareWrite2@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z PROC ; ATL::CSimpleStringT<wchar_t,0>::PrepareWrite2, COMDAT

; 818  : 	{

$LN10:
  00000	89 54 24 10	 mov	 DWORD PTR [rsp+16], edx
  00004	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00009	55		 push	 rbp
  0000a	48 83 ec 70	 sub	 rsp, 112		; 00000070H
  0000e	48 8d 6c 24 20	 lea	 rbp, QWORD PTR [rsp+32]

; 819  : 		CStringData* pOldData = GetData();

  00013	48 8b 4d 60	 mov	 rcx, QWORD PTR this$[rbp]
  00017	e8 00 00 00 00	 call	 ?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<wchar_t,0>::GetData
  0001c	48 89 45 00	 mov	 QWORD PTR pOldData$[rbp], rax

; 820  : 		if( pOldData->nDataLength > nLength )

  00020	48 8b 45 00	 mov	 rax, QWORD PTR pOldData$[rbp]
  00024	8b 4d 68	 mov	 ecx, DWORD PTR nLength$[rbp]
  00027	39 48 08	 cmp	 DWORD PTR [rax+8], ecx
  0002a	7e 0a		 jle	 SHORT $LN2@PrepareWri

; 821  : 		{
; 822  : 			nLength = pOldData->nDataLength;

  0002c	48 8b 45 00	 mov	 rax, QWORD PTR pOldData$[rbp]
  00030	8b 40 08	 mov	 eax, DWORD PTR [rax+8]
  00033	89 45 68	 mov	 DWORD PTR nLength$[rbp], eax
$LN2@PrepareWri:

; 823  : 		}
; 824  : 		if( pOldData->IsShared() )

  00036	48 8b 4d 00	 mov	 rcx, QWORD PTR pOldData$[rbp]
  0003a	e8 00 00 00 00	 call	 ?IsShared@CStringData@ATL@@QEBA_NXZ ; ATL::CStringData::IsShared
  0003f	0f b6 c0	 movzx	 eax, al
  00042	85 c0		 test	 eax, eax
  00044	74 0e		 je	 SHORT $LN3@PrepareWri

; 825  : 		{
; 826  : 			Fork( nLength );

  00046	8b 55 68	 mov	 edx, DWORD PTR nLength$[rbp]
  00049	48 8b 4d 60	 mov	 rcx, QWORD PTR this$[rbp]
  0004d	e8 00 00 00 00	 call	 ?Fork@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::Fork

; 827  : 		}

  00052	eb 58		 jmp	 SHORT $LN4@PrepareWri
$LN3@PrepareWri:

; 828  : 		else if( pOldData->nAllocLength < nLength )

  00054	48 8b 45 00	 mov	 rax, QWORD PTR pOldData$[rbp]
  00058	8b 4d 68	 mov	 ecx, DWORD PTR nLength$[rbp]
  0005b	39 48 0c	 cmp	 DWORD PTR [rax+12], ecx
  0005e	7d 4c		 jge	 SHORT $LN5@PrepareWri

; 829  : 		{
; 830  : 			// Grow exponentially, until we hit 1G, then by 1M thereafter.
; 831  : 			int nNewLength = pOldData->nAllocLength;

  00060	48 8b 45 00	 mov	 rax, QWORD PTR pOldData$[rbp]
  00064	8b 40 0c	 mov	 eax, DWORD PTR [rax+12]
  00067	89 45 08	 mov	 DWORD PTR nNewLength$1[rbp], eax

; 832  : 			if( nNewLength > 1024 * 1024 * 1024 )

  0006a	81 7d 08 00 00
	00 40		 cmp	 DWORD PTR nNewLength$1[rbp], 1073741824 ; 40000000H
  00071	7e 0d		 jle	 SHORT $LN6@PrepareWri

; 833  : 			{
; 834  : 				nNewLength += 1024 * 1024;

  00073	8b 45 08	 mov	 eax, DWORD PTR nNewLength$1[rbp]
  00076	05 00 00 10 00	 add	 eax, 1048576		; 00100000H
  0007b	89 45 08	 mov	 DWORD PTR nNewLength$1[rbp], eax

; 835  : 			}

  0007e	eb 12		 jmp	 SHORT $LN7@PrepareWri
$LN6@PrepareWri:

; 836  : 			else
; 837  : 			{
; 838  : 				// Exponential growth factor is 1.5.
; 839  : 				nNewLength = nNewLength + nNewLength / 2;

  00080	8b 45 08	 mov	 eax, DWORD PTR nNewLength$1[rbp]
  00083	99		 cdq
  00084	2b c2		 sub	 eax, edx
  00086	d1 f8		 sar	 eax, 1
  00088	8b 4d 08	 mov	 ecx, DWORD PTR nNewLength$1[rbp]
  0008b	03 c8		 add	 ecx, eax
  0008d	8b c1		 mov	 eax, ecx
  0008f	89 45 08	 mov	 DWORD PTR nNewLength$1[rbp], eax
$LN7@PrepareWri:

; 840  : 			}
; 841  : 			if( nNewLength < nLength )

  00092	8b 45 68	 mov	 eax, DWORD PTR nLength$[rbp]
  00095	39 45 08	 cmp	 DWORD PTR nNewLength$1[rbp], eax
  00098	7d 06		 jge	 SHORT $LN8@PrepareWri

; 842  : 			{
; 843  : 				nNewLength = nLength;

  0009a	8b 45 68	 mov	 eax, DWORD PTR nLength$[rbp]
  0009d	89 45 08	 mov	 DWORD PTR nNewLength$1[rbp], eax
$LN8@PrepareWri:

; 844  : 			}
; 845  : 			Reallocate( nNewLength );

  000a0	8b 55 08	 mov	 edx, DWORD PTR nNewLength$1[rbp]
  000a3	48 8b 4d 60	 mov	 rcx, QWORD PTR this$[rbp]
  000a7	e8 00 00 00 00	 call	 ?Reallocate@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::Reallocate
$LN5@PrepareWri:
$LN4@PrepareWri:

; 846  : 		}
; 847  : 	}

  000ac	48 8d 65 50	 lea	 rsp, QWORD PTR [rbp+80]
  000b0	5d		 pop	 rbp
  000b1	c3		 ret	 0
?PrepareWrite2@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ENDP ; ATL::CSimpleStringT<wchar_t,0>::PrepareWrite2
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?PrepareWrite@?$CSimpleStringT@_W$0A@@ATL@@AEAAPEA_WH@Z
_TEXT	SEGMENT
pOldData$ = 0
nShared$ = 8
nTooShort$ = 12
this$ = 96
nLength$ = 104
?PrepareWrite@?$CSimpleStringT@_W$0A@@ATL@@AEAAPEA_WH@Z PROC ; ATL::CSimpleStringT<wchar_t,0>::PrepareWrite, COMDAT

; 803  : 	{

$LN5:
  00000	89 54 24 10	 mov	 DWORD PTR [rsp+16], edx
  00004	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00009	55		 push	 rbp
  0000a	48 83 ec 70	 sub	 rsp, 112		; 00000070H
  0000e	48 8d 6c 24 20	 lea	 rbp, QWORD PTR [rsp+32]

; 804  : 		if (nLength < 0)

  00013	83 7d 68 00	 cmp	 DWORD PTR nLength$[rbp], 0
  00017	7d 0a		 jge	 SHORT $LN2@PrepareWri

; 805  : 			AtlThrow(E_INVALIDARG);

  00019	b9 57 00 07 80	 mov	 ecx, -2147024809	; ffffffff80070057H
  0001e	e8 00 00 00 00	 call	 ?AtlThrowImpl@ATL@@YAXJ@Z ; ATL::AtlThrowImpl
$LN2@PrepareWri:

; 806  : 
; 807  : 		CStringData* pOldData = GetData();

  00023	48 8b 4d 60	 mov	 rcx, QWORD PTR this$[rbp]
  00027	e8 00 00 00 00	 call	 ?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<wchar_t,0>::GetData
  0002c	48 89 45 00	 mov	 QWORD PTR pOldData$[rbp], rax

; 808  : 		int nShared = 1-pOldData->nRefs;  // nShared < 0 means true, >= 0 means false

  00030	48 8b 45 00	 mov	 rax, QWORD PTR pOldData$[rbp]
  00034	b9 01 00 00 00	 mov	 ecx, 1
  00039	2b 48 10	 sub	 ecx, DWORD PTR [rax+16]
  0003c	8b c1		 mov	 eax, ecx
  0003e	89 45 08	 mov	 DWORD PTR nShared$[rbp], eax

; 809  : 		int nTooShort = pOldData->nAllocLength-nLength;  // nTooShort < 0 means true, >= 0 means false

  00041	48 8b 45 00	 mov	 rax, QWORD PTR pOldData$[rbp]
  00045	8b 4d 68	 mov	 ecx, DWORD PTR nLength$[rbp]
  00048	8b 40 0c	 mov	 eax, DWORD PTR [rax+12]
  0004b	2b c1		 sub	 eax, ecx
  0004d	89 45 0c	 mov	 DWORD PTR nTooShort$[rbp], eax

; 810  : 		if( (nShared|nTooShort) < 0 )  // If either sign bit is set (i.e. either is less than zero), we need to copy data

  00050	8b 45 0c	 mov	 eax, DWORD PTR nTooShort$[rbp]
  00053	8b 4d 08	 mov	 ecx, DWORD PTR nShared$[rbp]
  00056	0b c8		 or	 ecx, eax
  00058	8b c1		 mov	 eax, ecx
  0005a	85 c0		 test	 eax, eax
  0005c	7d 0c		 jge	 SHORT $LN3@PrepareWri

; 811  : 		{
; 812  : 			PrepareWrite2( nLength );

  0005e	8b 55 68	 mov	 edx, DWORD PTR nLength$[rbp]
  00061	48 8b 4d 60	 mov	 rcx, QWORD PTR this$[rbp]
  00065	e8 00 00 00 00	 call	 ?PrepareWrite2@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::PrepareWrite2
$LN3@PrepareWri:

; 813  : 		}
; 814  : 
; 815  : 		return( m_pszData );

  0006a	48 8b 45 60	 mov	 rax, QWORD PTR this$[rbp]
  0006e	48 8b 00	 mov	 rax, QWORD PTR [rax]
$LN4@PrepareWri:

; 816  : 	}

  00071	48 8d 65 50	 lea	 rsp, QWORD PTR [rbp+80]
  00075	5d		 pop	 rbp
  00076	c3		 ret	 0
?PrepareWrite@?$CSimpleStringT@_W$0A@@ATL@@AEAAPEA_WH@Z ENDP ; ATL::CSimpleStringT<wchar_t,0>::PrepareWrite
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ
_TEXT	SEGMENT
this$ = 80
?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ PROC ; ATL::CSimpleStringT<wchar_t,0>::GetData, COMDAT

; 799  : 	{

$LN3:
  00000	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00005	55		 push	 rbp
  00006	48 83 ec 40	 sub	 rsp, 64			; 00000040H
  0000a	48 8b ec	 mov	 rbp, rsp

; 800  : 		return( reinterpret_cast< CStringData* >( m_pszData )-1 );

  0000d	48 8b 45 50	 mov	 rax, QWORD PTR this$[rbp]
  00011	48 8b 00	 mov	 rax, QWORD PTR [rax]
  00014	48 83 e8 18	 sub	 rax, 24

; 801  : 	}

  00018	48 8d 65 40	 lea	 rsp, QWORD PTR [rbp+64]
  0001c	5d		 pop	 rbp
  0001d	c3		 ret	 0
?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ ENDP ; ATL::CSimpleStringT<wchar_t,0>::GetData
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?Fork@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z
_TEXT	SEGMENT
pOldData$ = 0
nOldLength$ = 8
pNewData$ = 16
nCharsToCopy$ = 24
tv86 = 92
tv136 = 96
tv76 = 96
tv134 = 104
tv83 = 104
this$ = 128
nLength$ = 136
?Fork@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z PROC	; ATL::CSimpleStringT<wchar_t,0>::Fork, COMDAT

; 783  : 	{

$LN6:
  00000	89 54 24 10	 mov	 DWORD PTR [rsp+16], edx
  00004	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00009	55		 push	 rbp
  0000a	48 81 ec 90 00
	00 00		 sub	 rsp, 144		; 00000090H
  00011	48 8d 6c 24 20	 lea	 rbp, QWORD PTR [rsp+32]

; 784  : 		CStringData* pOldData = GetData();

  00016	48 8b 8d 80 00
	00 00		 mov	 rcx, QWORD PTR this$[rbp]
  0001d	e8 00 00 00 00	 call	 ?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<wchar_t,0>::GetData
  00022	48 89 45 00	 mov	 QWORD PTR pOldData$[rbp], rax

; 785  : 		int nOldLength = pOldData->nDataLength;

  00026	48 8b 45 00	 mov	 rax, QWORD PTR pOldData$[rbp]
  0002a	8b 40 08	 mov	 eax, DWORD PTR [rax+8]
  0002d	89 45 08	 mov	 DWORD PTR nOldLength$[rbp], eax

; 786  : 		CStringData* pNewData = pOldData->pStringMgr->Clone()->Allocate( nLength, sizeof( XCHAR ) );

  00030	48 8b 45 00	 mov	 rax, QWORD PTR pOldData$[rbp]
  00034	48 8b 00	 mov	 rax, QWORD PTR [rax]
  00037	48 8b 4d 00	 mov	 rcx, QWORD PTR pOldData$[rbp]
  0003b	48 8b 09	 mov	 rcx, QWORD PTR [rcx]
  0003e	48 8b 00	 mov	 rax, QWORD PTR [rax]
  00041	ff 50 20	 call	 QWORD PTR [rax+32]
  00044	48 89 45 60	 mov	 QWORD PTR tv76[rbp], rax
  00048	48 8b 45 60	 mov	 rax, QWORD PTR tv76[rbp]
  0004c	48 8b 00	 mov	 rax, QWORD PTR [rax]
  0004f	48 8b 00	 mov	 rax, QWORD PTR [rax]
  00052	48 89 45 68	 mov	 QWORD PTR tv83[rbp], rax
  00056	41 b8 02 00 00
	00		 mov	 r8d, 2
  0005c	8b 95 88 00 00
	00		 mov	 edx, DWORD PTR nLength$[rbp]
  00062	48 8b 4d 60	 mov	 rcx, QWORD PTR tv76[rbp]
  00066	ff 55 68	 call	 QWORD PTR tv83[rbp]
  00069	48 89 45 10	 mov	 QWORD PTR pNewData$[rbp], rax

; 787  : 		if( pNewData == NULL )

  0006d	48 83 7d 10 00	 cmp	 QWORD PTR pNewData$[rbp], 0
  00072	75 05		 jne	 SHORT $LN2@Fork

; 788  : 		{
; 789  : 			ThrowMemoryException();

  00074	e8 00 00 00 00	 call	 ?ThrowMemoryException@?$CSimpleStringT@_W$0A@@ATL@@KAXXZ ; ATL::CSimpleStringT<wchar_t,0>::ThrowMemoryException
$LN2@Fork:

; 790  : 		}
; 791  : 		int nCharsToCopy = ((nOldLength < nLength) ? nOldLength : nLength)+1;  // Copy '\0'

  00079	8b 85 88 00 00
	00		 mov	 eax, DWORD PTR nLength$[rbp]
  0007f	39 45 08	 cmp	 DWORD PTR nOldLength$[rbp], eax
  00082	7d 08		 jge	 SHORT $LN4@Fork
  00084	8b 45 08	 mov	 eax, DWORD PTR nOldLength$[rbp]
  00087	89 45 5c	 mov	 DWORD PTR tv86[rbp], eax
  0008a	eb 09		 jmp	 SHORT $LN5@Fork
$LN4@Fork:
  0008c	8b 85 88 00 00
	00		 mov	 eax, DWORD PTR nLength$[rbp]
  00092	89 45 5c	 mov	 DWORD PTR tv86[rbp], eax
$LN5@Fork:
  00095	8b 45 5c	 mov	 eax, DWORD PTR tv86[rbp]
  00098	ff c0		 inc	 eax
  0009a	89 45 18	 mov	 DWORD PTR nCharsToCopy$[rbp], eax

; 792  : 		memcpy_s( PXSTR( pNewData->data() ), nCharsToCopy * sizeof( XCHAR ),

  0009d	48 8b 4d 00	 mov	 rcx, QWORD PTR pOldData$[rbp]
  000a1	e8 00 00 00 00	 call	 ?data@CStringData@ATL@@QEAAPEAXXZ ; ATL::CStringData::data
  000a6	48 89 45 60	 mov	 QWORD PTR tv136[rbp], rax
  000aa	48 8b 4d 10	 mov	 rcx, QWORD PTR pNewData$[rbp]
  000ae	e8 00 00 00 00	 call	 ?data@CStringData@ATL@@QEAAPEAXXZ ; ATL::CStringData::data
  000b3	48 89 45 68	 mov	 QWORD PTR tv134[rbp], rax
  000b7	48 63 45 18	 movsxd	 rax, DWORD PTR nCharsToCopy$[rbp]
  000bb	48 d1 e0	 shl	 rax, 1
  000be	48 63 4d 18	 movsxd	 rcx, DWORD PTR nCharsToCopy$[rbp]
  000c2	48 d1 e1	 shl	 rcx, 1
  000c5	4c 8b c8	 mov	 r9, rax
  000c8	4c 8b 45 60	 mov	 r8, QWORD PTR tv136[rbp]
  000cc	48 8b d1	 mov	 rdx, rcx
  000cf	48 8b 4d 68	 mov	 rcx, QWORD PTR tv134[rbp]
  000d3	e8 00 00 00 00	 call	 memcpy_s

; 793  : 			PCXSTR( pOldData->data() ), nCharsToCopy * sizeof( XCHAR ));
; 794  : 		pNewData->nDataLength = nOldLength;

  000d8	48 8b 45 10	 mov	 rax, QWORD PTR pNewData$[rbp]
  000dc	8b 4d 08	 mov	 ecx, DWORD PTR nOldLength$[rbp]
  000df	89 48 08	 mov	 DWORD PTR [rax+8], ecx

; 795  : 		pOldData->Release();

  000e2	48 8b 4d 00	 mov	 rcx, QWORD PTR pOldData$[rbp]
  000e6	e8 00 00 00 00	 call	 ?Release@CStringData@ATL@@QEAAXXZ ; ATL::CStringData::Release

; 796  : 		Attach( pNewData );

  000eb	48 8b 55 10	 mov	 rdx, QWORD PTR pNewData$[rbp]
  000ef	48 8b 8d 80 00
	00 00		 mov	 rcx, QWORD PTR this$[rbp]
  000f6	e8 00 00 00 00	 call	 ?Attach@?$CSimpleStringT@_W$0A@@ATL@@AEAAXPEAUCStringData@2@@Z ; ATL::CSimpleStringT<wchar_t,0>::Attach
$LN3@Fork:

; 797  : 	}

  000fb	48 8d 65 70	 lea	 rsp, QWORD PTR [rbp+112]
  000ff	5d		 pop	 rbp
  00100	c3		 ret	 0
?Fork@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ENDP	; ATL::CSimpleStringT<wchar_t,0>::Fork
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?Attach@?$CSimpleStringT@_W$0A@@ATL@@AEAAXPEAUCStringData@2@@Z
_TEXT	SEGMENT
this$ = 80
pData$ = 88
?Attach@?$CSimpleStringT@_W$0A@@ATL@@AEAAXPEAUCStringData@2@@Z PROC ; ATL::CSimpleStringT<wchar_t,0>::Attach, COMDAT

; 779  : 	{

$LN3:
  00000	48 89 54 24 10	 mov	 QWORD PTR [rsp+16], rdx
  00005	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  0000a	55		 push	 rbp
  0000b	48 83 ec 60	 sub	 rsp, 96			; 00000060H
  0000f	48 8d 6c 24 20	 lea	 rbp, QWORD PTR [rsp+32]

; 780  : 		m_pszData = static_cast< PXSTR >( pData->data() );

  00014	48 8b 4d 58	 mov	 rcx, QWORD PTR pData$[rbp]
  00018	e8 00 00 00 00	 call	 ?data@CStringData@ATL@@QEAAPEAXXZ ; ATL::CStringData::data
  0001d	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  00021	48 89 01	 mov	 QWORD PTR [rcx], rax

; 781  : 	}

  00024	48 8d 65 40	 lea	 rsp, QWORD PTR [rbp+64]
  00028	5d		 pop	 rbp
  00029	c3		 ret	 0
?Attach@?$CSimpleStringT@_W$0A@@ATL@@AEAAXPEAUCStringData@2@@Z ENDP ; ATL::CSimpleStringT<wchar_t,0>::Attach
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?ThrowMemoryException@?$CSimpleStringT@_W$0A@@ATL@@KAXXZ
_TEXT	SEGMENT
?ThrowMemoryException@?$CSimpleStringT@_W$0A@@ATL@@KAXXZ PROC ; ATL::CSimpleStringT<wchar_t,0>::ThrowMemoryException, COMDAT

; 772  : 	{

$LN3:
  00000	40 55		 push	 rbp
  00002	48 83 ec 60	 sub	 rsp, 96			; 00000060H
  00006	48 8d 6c 24 20	 lea	 rbp, QWORD PTR [rsp+32]

; 773  : 		AtlThrow( E_OUTOFMEMORY );

  0000b	b9 0e 00 07 80	 mov	 ecx, -2147024882	; ffffffff8007000eH
  00010	e8 00 00 00 00	 call	 ?AtlThrowImpl@ATL@@YAXJ@Z ; ATL::AtlThrowImpl
$LN2@ThrowMemor:

; 774  : 	}

  00015	48 8d 65 40	 lea	 rsp, QWORD PTR [rbp+64]
  00019	5d		 pop	 rbp
  0001a	c3		 ret	 0
?ThrowMemoryException@?$CSimpleStringT@_W$0A@@ATL@@KAXXZ ENDP ; ATL::CSimpleStringT<wchar_t,0>::ThrowMemoryException
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z
_TEXT	SEGMENT
psz$ = 80
sizeInXChar$ = 88
?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z PROC ; ATL::CSimpleStringT<wchar_t,0>::StringLengthN, COMDAT

; 749  : 	{

$LN4:
  00000	48 89 54 24 10	 mov	 QWORD PTR [rsp+16], rdx
  00005	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  0000a	55		 push	 rbp
  0000b	48 83 ec 60	 sub	 rsp, 96			; 00000060H
  0000f	48 8d 6c 24 20	 lea	 rbp, QWORD PTR [rsp+32]

; 750  : 		if( psz == NULL )

  00014	48 83 7d 50 00	 cmp	 QWORD PTR psz$[rbp], 0
  00019	75 04		 jne	 SHORT $LN2@StringLeng

; 751  : 		{
; 752  : 			return( 0 );

  0001b	33 c0		 xor	 eax, eax
  0001d	eb 0e		 jmp	 SHORT $LN1@StringLeng
$LN2@StringLeng:

; 753  : 		}
; 754  : 		return( int( wcsnlen( psz, sizeInXChar ) ) );

  0001f	48 8b 55 58	 mov	 rdx, QWORD PTR sizeInXChar$[rbp]
  00023	48 8b 4d 50	 mov	 rcx, QWORD PTR psz$[rbp]
  00027	e8 00 00 00 00	 call	 wcsnlen
  0002c	90		 npad	 1
$LN1@StringLeng:

; 755  : 	}

  0002d	48 8d 65 40	 lea	 rsp, QWORD PTR [rbp+64]
  00031	5d		 pop	 rbp
  00032	c3		 ret	 0
?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z ENDP ; ATL::CSimpleStringT<wchar_t,0>::StringLengthN
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z
_TEXT	SEGMENT
nAlloc$1 = 0
this$ = 96
nNewLength$ = 104
?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z PROC ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer, COMDAT

; 557  : 	{

$LN4:
  00000	89 54 24 10	 mov	 DWORD PTR [rsp+16], edx
  00004	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00009	55		 push	 rbp
  0000a	48 83 ec 70	 sub	 rsp, 112		; 00000070H
  0000e	48 8d 6c 24 20	 lea	 rbp, QWORD PTR [rsp+32]

; 558  : 		if( nNewLength == -1 )

  00013	83 7d 68 ff	 cmp	 DWORD PTR nNewLength$[rbp], -1
  00017	75 25		 jne	 SHORT $LN2@ReleaseBuf

; 559  : 		{
; 560  : 			int nAlloc = GetData()->nAllocLength;

  00019	48 8b 4d 60	 mov	 rcx, QWORD PTR this$[rbp]
  0001d	e8 00 00 00 00	 call	 ?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<wchar_t,0>::GetData
  00022	8b 40 0c	 mov	 eax, DWORD PTR [rax+12]
  00025	89 45 00	 mov	 DWORD PTR nAlloc$1[rbp], eax

; 561  : 			nNewLength = StringLengthN( m_pszData, nAlloc);

  00028	48 63 45 00	 movsxd	 rax, DWORD PTR nAlloc$1[rbp]
  0002c	48 8b d0	 mov	 rdx, rax
  0002f	48 8b 45 60	 mov	 rax, QWORD PTR this$[rbp]
  00033	48 8b 08	 mov	 rcx, QWORD PTR [rax]
  00036	e8 00 00 00 00	 call	 ?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z ; ATL::CSimpleStringT<wchar_t,0>::StringLengthN
  0003b	89 45 68	 mov	 DWORD PTR nNewLength$[rbp], eax
$LN2@ReleaseBuf:

; 562  : 		}
; 563  : 		SetLength( nNewLength );

  0003e	8b 55 68	 mov	 edx, DWORD PTR nNewLength$[rbp]
  00041	48 8b 4d 60	 mov	 rcx, QWORD PTR this$[rbp]
  00045	e8 00 00 00 00	 call	 ?SetLength@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::SetLength

; 564  : 	}

  0004a	48 8d 65 50	 lea	 rsp, QWORD PTR [rbp+80]
  0004e	5d		 pop	 rbp
  0004f	c3		 ret	 0
?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ENDP ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?GetBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAPEA_WH@Z
_TEXT	SEGMENT
this$ = 80
nMinBufferLength$ = 88
?GetBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAPEA_WH@Z PROC ; ATL::CSimpleStringT<wchar_t,0>::GetBuffer, COMDAT

; 507  : 	{

$LN3:
  00000	89 54 24 10	 mov	 DWORD PTR [rsp+16], edx
  00004	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00009	55		 push	 rbp
  0000a	48 83 ec 60	 sub	 rsp, 96			; 00000060H
  0000e	48 8d 6c 24 20	 lea	 rbp, QWORD PTR [rsp+32]

; 508  : 		return( PrepareWrite( nMinBufferLength ) );

  00013	8b 55 58	 mov	 edx, DWORD PTR nMinBufferLength$[rbp]
  00016	48 8b 4d 50	 mov	 rcx, QWORD PTR this$[rbp]
  0001a	e8 00 00 00 00	 call	 ?PrepareWrite@?$CSimpleStringT@_W$0A@@ATL@@AEAAPEA_WH@Z ; ATL::CSimpleStringT<wchar_t,0>::PrepareWrite

; 509  : 	}

  0001f	48 8d 65 40	 lea	 rsp, QWORD PTR [rbp+64]
  00023	5d		 pop	 rbp
  00024	c3		 ret	 0
?GetBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAPEA_WH@Z ENDP ; ATL::CSimpleStringT<wchar_t,0>::GetBuffer
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?Release@CStringData@ATL@@QEAAXXZ
_TEXT	SEGMENT
tv77 = 64
tv79 = 72
this$ = 96
?Release@CStringData@ATL@@QEAAXXZ PROC			; ATL::CStringData::Release, COMDAT

; 85   : 	{

$LN4:
  00000	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00005	55		 push	 rbp
  00006	48 83 ec 70	 sub	 rsp, 112		; 00000070H
  0000a	48 8d 6c 24 20	 lea	 rbp, QWORD PTR [rsp+32]

; 86   : 		ATLASSERT( nRefs != 0 );
; 87   : 
; 88   : 		if( _InterlockedDecrement( &nRefs ) <= 0 )

  0000f	48 8b 45 60	 mov	 rax, QWORD PTR this$[rbp]
  00013	48 83 c0 10	 add	 rax, 16
  00017	b9 ff ff ff ff	 mov	 ecx, -1
  0001c	f0 0f c1 08	 lock xadd DWORD PTR [rax], ecx
  00020	ff c9		 dec	 ecx
  00022	8b c1		 mov	 eax, ecx
  00024	85 c0		 test	 eax, eax
  00026	7f 28		 jg	 SHORT $LN2@Release

; 89   : 		{
; 90   : 			pStringMgr->Free( this );

  00028	48 8b 45 60	 mov	 rax, QWORD PTR this$[rbp]
  0002c	48 8b 00	 mov	 rax, QWORD PTR [rax]
  0002f	48 89 45 40	 mov	 QWORD PTR tv77[rbp], rax
  00033	48 8b 45 60	 mov	 rax, QWORD PTR this$[rbp]
  00037	48 8b 00	 mov	 rax, QWORD PTR [rax]
  0003a	48 8b 00	 mov	 rax, QWORD PTR [rax]
  0003d	48 8b 40 08	 mov	 rax, QWORD PTR [rax+8]
  00041	48 89 45 48	 mov	 QWORD PTR tv79[rbp], rax
  00045	48 8b 55 60	 mov	 rdx, QWORD PTR this$[rbp]
  00049	48 8b 4d 40	 mov	 rcx, QWORD PTR tv77[rbp]
  0004d	ff 55 48	 call	 QWORD PTR tv79[rbp]
$LN2@Release:

; 91   : 		}
; 92   : 	}

  00050	48 8d 65 50	 lea	 rsp, QWORD PTR [rbp+80]
  00054	5d		 pop	 rbp
  00055	c3		 ret	 0
?Release@CStringData@ATL@@QEAAXXZ ENDP			; ATL::CStringData::Release
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?IsShared@CStringData@ATL@@QEBA_NXZ
_TEXT	SEGMENT
tv66 = 64
this$ = 96
?IsShared@CStringData@ATL@@QEBA_NXZ PROC		; ATL::CStringData::IsShared, COMDAT

; 72   : 	{

$LN5:
  00000	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00005	55		 push	 rbp
  00006	48 83 ec 50	 sub	 rsp, 80			; 00000050H
  0000a	48 8b ec	 mov	 rbp, rsp

; 73   : 		return( nRefs > 1 );

  0000d	48 8b 45 60	 mov	 rax, QWORD PTR this$[rbp]
  00011	83 78 10 01	 cmp	 DWORD PTR [rax+16], 1
  00015	7e 09		 jle	 SHORT $LN3@IsShared
  00017	c7 45 40 01 00
	00 00		 mov	 DWORD PTR tv66[rbp], 1
  0001e	eb 07		 jmp	 SHORT $LN4@IsShared
$LN3@IsShared:
  00020	c7 45 40 00 00
	00 00		 mov	 DWORD PTR tv66[rbp], 0
$LN4@IsShared:
  00027	0f b6 45 40	 movzx	 eax, BYTE PTR tv66[rbp]

; 74   : 	}

  0002b	48 8d 65 50	 lea	 rsp, QWORD PTR [rbp+80]
  0002f	5d		 pop	 rbp
  00030	c3		 ret	 0
?IsShared@CStringData@ATL@@QEBA_NXZ ENDP		; ATL::CStringData::IsShared
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?data@CStringData@ATL@@QEAAPEAXXZ
_TEXT	SEGMENT
this$ = 80
?data@CStringData@ATL@@QEAAPEAXXZ PROC			; ATL::CStringData::data, COMDAT

; 58   : 	{

$LN3:
  00000	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00005	55		 push	 rbp
  00006	48 83 ec 40	 sub	 rsp, 64			; 00000040H
  0000a	48 8b ec	 mov	 rbp, rsp

; 59   : 		return (this+1);

  0000d	48 8b 45 50	 mov	 rax, QWORD PTR this$[rbp]
  00011	48 83 c0 18	 add	 rax, 24

; 60   : 	}

  00015	48 8d 65 40	 lea	 rsp, QWORD PTR [rbp+64]
  00019	5d		 pop	 rbp
  0001a	c3		 ret	 0
?data@CStringData@ATL@@QEAAPEAXXZ ENDP			; ATL::CStringData::data
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlexcept.h
;	COMDAT ?AtlThrowImpl@ATL@@YAXJ@Z
_TEXT	SEGMENT
hr$ = 80
?AtlThrowImpl@ATL@@YAXJ@Z PROC				; ATL::AtlThrowImpl, COMDAT

; 65   : {

$LN5:
  00000	89 4c 24 08	 mov	 DWORD PTR [rsp+8], ecx
  00004	55		 push	 rbp
  00005	48 83 ec 60	 sub	 rsp, 96			; 00000060H
  00009	48 8d 6c 24 20	 lea	 rbp, QWORD PTR [rsp+32]

; 66   : 	ATLTRACE(atlTraceException, 0, _T("AtlThrow: hr = 0x%x\n"), hr );
; 67   : #ifdef _AFX
; 68   : 	if( hr == E_OUTOFMEMORY )

  0000e	81 7d 50 0e 00
	07 80		 cmp	 DWORD PTR hr$[rbp], -2147024882 ; ffffffff8007000eH
  00015	75 07		 jne	 SHORT $LN2@AtlThrowIm

; 69   : 	{
; 70   : 		AfxThrowMemoryException();

  00017	e8 00 00 00 00	 call	 ?AfxThrowMemoryException@@YAXXZ ; AfxThrowMemoryException

; 71   : 	}

  0001c	eb 08		 jmp	 SHORT $LN3@AtlThrowIm
$LN2@AtlThrowIm:

; 72   : 	else
; 73   : 	{
; 74   : 		AfxThrowOleException( hr );

  0001e	8b 4d 50	 mov	 ecx, DWORD PTR hr$[rbp]
  00021	e8 00 00 00 00	 call	 ?AfxThrowOleException@@YAXJ@Z ; AfxThrowOleException
$LN3@AtlThrowIm:
$LN4@AtlThrowIm:

; 75   : 	}
; 76   : #else
; 77   : 	throw CAtlException( hr );
; 78   : #endif
; 79   : };

  00026	48 8d 65 40	 lea	 rsp, QWORD PTR [rbp+64]
  0002a	5d		 pop	 rbp
  0002b	c3		 ret	 0
?AtlThrowImpl@ATL@@YAXJ@Z ENDP				; ATL::AtlThrowImpl
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\ucrt\corecrt_memcpy_s.h
;	COMDAT memcpy_s
_TEXT	SEGMENT
_Expr_val$1 = 0
_Expr_val$2 = 4
_Expr_val$3 = 8
tv79 = 76
tv75 = 76
tv66 = 76
_Destination$ = 96
_DestinationSize$ = 104
_Source$ = 112
_SourceSize$ = 120
memcpy_s PROC						; COMDAT

; 45   :     {

  00000	4c 89 4c 24 20	 mov	 QWORD PTR [rsp+32], r9
  00005	4c 89 44 24 18	 mov	 QWORD PTR [rsp+24], r8
  0000a	48 89 54 24 10	 mov	 QWORD PTR [rsp+16], rdx
  0000f	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00014	55		 push	 rbp
  00015	48 83 ec 70	 sub	 rsp, 112		; 00000070H
  00019	48 8d 6c 24 20	 lea	 rbp, QWORD PTR [rsp+32]

; 46   :         if (_SourceSize == 0)

  0001e	48 83 7d 78 00	 cmp	 QWORD PTR _SourceSize$[rbp], 0
  00023	75 07		 jne	 SHORT $LN2@memcpy_s

; 47   :         {
; 48   :             return 0;

  00025	33 c0		 xor	 eax, eax
  00027	e9 f2 00 00 00	 jmp	 $LN1@memcpy_s
$LN2@memcpy_s:

; 49   :         }
; 50   : 
; 51   :         _CRT_MEMCPY_S_VALIDATE_RETURN_ERRCODE(_Destination != NULL, EINVAL);

  0002c	48 83 7d 60 00	 cmp	 QWORD PTR _Destination$[rbp], 0
  00031	74 09		 je	 SHORT $LN9@memcpy_s
  00033	c7 45 4c 01 00
	00 00		 mov	 DWORD PTR tv66[rbp], 1
  0003a	eb 07		 jmp	 SHORT $LN10@memcpy_s
$LN9@memcpy_s:
  0003c	c7 45 4c 00 00
	00 00		 mov	 DWORD PTR tv66[rbp], 0
$LN10@memcpy_s:
  00043	8b 45 4c	 mov	 eax, DWORD PTR tv66[rbp]
  00046	89 45 00	 mov	 DWORD PTR _Expr_val$1[rbp], eax
  00049	83 7d 00 00	 cmp	 DWORD PTR _Expr_val$1[rbp], 0
  0004d	75 1a		 jne	 SHORT $LN3@memcpy_s
  0004f	e8 00 00 00 00	 call	 _errno
  00054	c7 00 16 00 00
	00		 mov	 DWORD PTR [rax], 22
  0005a	e8 00 00 00 00	 call	 _invalid_parameter_noinfo
  0005f	b8 16 00 00 00	 mov	 eax, 22
  00064	e9 b5 00 00 00	 jmp	 $LN1@memcpy_s
$LN3@memcpy_s:

; 52   :         if (_Source == NULL || _DestinationSize < _SourceSize)

  00069	48 83 7d 70 00	 cmp	 QWORD PTR _Source$[rbp], 0
  0006e	74 0e		 je	 SHORT $LN5@memcpy_s
  00070	48 8b 45 78	 mov	 rax, QWORD PTR _SourceSize$[rbp]
  00074	48 39 45 68	 cmp	 QWORD PTR _DestinationSize$[rbp], rax
  00078	0f 83 8d 00 00
	00		 jae	 $LN4@memcpy_s
$LN5@memcpy_s:

; 53   :         {
; 54   :             memset(_Destination, 0, _DestinationSize);

  0007e	4c 8b 45 68	 mov	 r8, QWORD PTR _DestinationSize$[rbp]
  00082	33 d2		 xor	 edx, edx
  00084	48 8b 4d 60	 mov	 rcx, QWORD PTR _Destination$[rbp]
  00088	e8 00 00 00 00	 call	 memset

; 55   : 
; 56   :             _CRT_MEMCPY_S_VALIDATE_RETURN_ERRCODE(_Source != NULL,                 EINVAL);

  0008d	48 83 7d 70 00	 cmp	 QWORD PTR _Source$[rbp], 0
  00092	74 09		 je	 SHORT $LN11@memcpy_s
  00094	c7 45 4c 01 00
	00 00		 mov	 DWORD PTR tv75[rbp], 1
  0009b	eb 07		 jmp	 SHORT $LN12@memcpy_s
$LN11@memcpy_s:
  0009d	c7 45 4c 00 00
	00 00		 mov	 DWORD PTR tv75[rbp], 0
$LN12@memcpy_s:
  000a4	8b 45 4c	 mov	 eax, DWORD PTR tv75[rbp]
  000a7	89 45 04	 mov	 DWORD PTR _Expr_val$2[rbp], eax
  000aa	83 7d 04 00	 cmp	 DWORD PTR _Expr_val$2[rbp], 0
  000ae	75 17		 jne	 SHORT $LN6@memcpy_s
  000b0	e8 00 00 00 00	 call	 _errno
  000b5	c7 00 16 00 00
	00		 mov	 DWORD PTR [rax], 22
  000bb	e8 00 00 00 00	 call	 _invalid_parameter_noinfo
  000c0	b8 16 00 00 00	 mov	 eax, 22
  000c5	eb 57		 jmp	 SHORT $LN1@memcpy_s
$LN6@memcpy_s:

; 57   :             _CRT_MEMCPY_S_VALIDATE_RETURN_ERRCODE(_DestinationSize >= _SourceSize, ERANGE);

  000c7	48 8b 45 78	 mov	 rax, QWORD PTR _SourceSize$[rbp]
  000cb	48 39 45 68	 cmp	 QWORD PTR _DestinationSize$[rbp], rax
  000cf	72 09		 jb	 SHORT $LN13@memcpy_s
  000d1	c7 45 4c 01 00
	00 00		 mov	 DWORD PTR tv79[rbp], 1
  000d8	eb 07		 jmp	 SHORT $LN14@memcpy_s
$LN13@memcpy_s:
  000da	c7 45 4c 00 00
	00 00		 mov	 DWORD PTR tv79[rbp], 0
$LN14@memcpy_s:
  000e1	8b 45 4c	 mov	 eax, DWORD PTR tv79[rbp]
  000e4	89 45 08	 mov	 DWORD PTR _Expr_val$3[rbp], eax
  000e7	83 7d 08 00	 cmp	 DWORD PTR _Expr_val$3[rbp], 0
  000eb	75 17		 jne	 SHORT $LN7@memcpy_s
  000ed	e8 00 00 00 00	 call	 _errno
  000f2	c7 00 22 00 00
	00		 mov	 DWORD PTR [rax], 34	; 00000022H
  000f8	e8 00 00 00 00	 call	 _invalid_parameter_noinfo
  000fd	b8 22 00 00 00	 mov	 eax, 34			; 00000022H
  00102	eb 1a		 jmp	 SHORT $LN1@memcpy_s
$LN7@memcpy_s:

; 58   : 
; 59   :             // Unreachable, but required to suppress /analyze warnings:
; 60   :             return EINVAL;

  00104	b8 16 00 00 00	 mov	 eax, 22
  00109	eb 13		 jmp	 SHORT $LN1@memcpy_s
$LN4@memcpy_s:

; 61   :         }
; 62   :         memcpy(_Destination, _Source, _SourceSize);

  0010b	4c 8b 45 78	 mov	 r8, QWORD PTR _SourceSize$[rbp]
  0010f	48 8b 55 70	 mov	 rdx, QWORD PTR _Source$[rbp]
  00113	48 8b 4d 60	 mov	 rcx, QWORD PTR _Destination$[rbp]
  00117	e8 00 00 00 00	 call	 memcpy

; 63   :         return 0;

  0011c	33 c0		 xor	 eax, eax
$LN1@memcpy_s:

; 64   :     }

  0011e	48 8d 65 50	 lea	 rsp, QWORD PTR [rbp+80]
  00122	5d		 pop	 rbp
  00123	c3		 ret	 0
memcpy_s ENDP
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp
;	COMDAT ?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z
_TEXT	SEGMENT
__formal$ = 80
__formal$ = 88
__formal$ = 96
?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z PROC ; __empty_global_delete, COMDAT

$LN3:
  00000	4c 89 44 24 18	 mov	 QWORD PTR [rsp+24], r8
  00005	48 89 54 24 10	 mov	 QWORD PTR [rsp+16], rdx
  0000a	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  0000f	55		 push	 rbp
  00010	48 83 ec 40	 sub	 rsp, 64			; 00000040H
  00014	48 8b ec	 mov	 rbp, rsp
  00017	48 8d 65 40	 lea	 rsp, QWORD PTR [rbp+64]
  0001b	5d		 pop	 rbp
  0001c	c3		 ret	 0
?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z ENDP ; __empty_global_delete
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp
;	COMDAT ?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z
_TEXT	SEGMENT
__formal$ = 80
__formal$ = 88
?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z PROC ; __empty_global_delete, COMDAT

$LN3:
  00000	48 89 54 24 10	 mov	 QWORD PTR [rsp+16], rdx
  00005	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  0000a	55		 push	 rbp
  0000b	48 83 ec 40	 sub	 rsp, 64			; 00000040H
  0000f	48 8b ec	 mov	 rbp, rsp
  00012	48 8d 65 40	 lea	 rsp, QWORD PTR [rbp+64]
  00016	5d		 pop	 rbp
  00017	c3		 ret	 0
?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z ENDP ; __empty_global_delete
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp
;	COMDAT ?__empty_global_delete@@YAXPEAX_K@Z
_TEXT	SEGMENT
__formal$ = 80
__formal$ = 88
?__empty_global_delete@@YAXPEAX_K@Z PROC		; __empty_global_delete, COMDAT

$LN3:
  00000	48 89 54 24 10	 mov	 QWORD PTR [rsp+16], rdx
  00005	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  0000a	55		 push	 rbp
  0000b	48 83 ec 40	 sub	 rsp, 64			; 00000040H
  0000f	48 8b ec	 mov	 rbp, rsp
  00012	48 8d 65 40	 lea	 rsp, QWORD PTR [rbp+64]
  00016	5d		 pop	 rbp
  00017	c3		 ret	 0
?__empty_global_delete@@YAXPEAX_K@Z ENDP		; __empty_global_delete
_TEXT	ENDS
; Function compile flags: /Odtp /ZI
; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp
;	COMDAT ?__empty_global_delete@@YAXPEAX@Z
_TEXT	SEGMENT
__formal$ = 80
?__empty_global_delete@@YAXPEAX@Z PROC			; __empty_global_delete, COMDAT

$LN3:
  00000	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00005	55		 push	 rbp
  00006	48 83 ec 40	 sub	 rsp, 64			; 00000040H
  0000a	48 8b ec	 mov	 rbp, rsp
  0000d	48 8d 65 40	 lea	 rsp, QWORD PTR [rbp+64]
  00011	5d		 pop	 rbp
  00012	c3		 ret	 0
?__empty_global_delete@@YAXPEAX@Z ENDP			; __empty_global_delete
_TEXT	ENDS
END