func (c CombinedID) DeconstructCombinedID() (uint16, uint16, uint32) {
	return uint16((uint64(c) & sessionIDMask) >> 48), uint16((uint64(c) & ackMgrIDMask) >> 32), uint32(uint64(c) & indexMask)
}
DeconstructCombinedID deconstructs the combinedID
package common
import (
	"bytes"
	"encoding/base64"
	"fmt"
	"sync/atomic"
)
type CombinedID uint64
type AckID struct {
	MutatedID CombinedID
	Address   int64
}
const (
	sessionIDNumBits = 16  
	ackMgrIDNumBits  = 16  
	indexNumBits     = 32  
	maxBits          = 64
	sessionIDMask uint64 = 18446462598732840960  
	ackMgrIDMask  uint64 = 281470681743360       
	indexMask     uint64 = 4294967295            
)
func (a AckID) ToString() string {
	var b bytes.Buffer
	fmt.Fprintln(&b, a.MutatedID, a.Address)
	return base64.StdEncoding.EncodeToString(b.Bytes())
}
func (a AckID) ConstructCombinedID(sessionID uint64, ackMgrID uint64, index uint64) CombinedID {
	return CombinedID(((sessionID << 48) & sessionIDMask) | ((ackMgrID << 32) & ackMgrIDMask) | (index & indexMask))
}