using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace UnifiedPOS.MSR.V1_4
{
    [ServiceContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/")]
    public interface MSR
    {
        #region Version 1.1

        //
        // Common Properties
        //

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetAutoDisable", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetAutoDisableResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        bool GetAutoDisable(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/SetAutoDisable", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/SetAutoDisableResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        void SetAutoDisable(string ConsumerID, bool AutoDisable);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCapCompareFirmwareVersion", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCapCompareFirmwareVersionResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        bool GetCapCompareFirmwareVersion(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCapPowerReporting", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCapPowerReportingResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        PowerReporting GetCapPowerReporting(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCapStatisticsReporting", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCapStatisticsReportingResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        bool GetCapStatisticsReporting(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCapUpdateFirmware", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCapUpdateFirmwareResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        bool GetCapUpdateFirmware(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCapUpdateStatistics", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCapUpdateStatisticsResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        bool GetCapUpdateStatistics(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCheckHealthText", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCheckHealthTextResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        string GetCheckHealthText(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetClaimed", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetClaimedResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        bool GetClaimed(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetDataCount", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetDataCountResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        int GetDataCount(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetDataEventEnabled", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetDataEventEnabledResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        bool GetDataEventEnabled(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/SetDataEventEnabled", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/SetDataEventEnabledResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        void SetDataEventEnabled(string ConsumerID, bool DataEventEnabled);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetDeviceEnabled", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetDeviceEnabledResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        bool GetDeviceEnabled(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/SetDeviceEnabled", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/SetDeviceEnabledResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        void SetDeviceEnabled(string ConsumerID, bool DeviceEnabled);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetFreezeEvents", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetFreezeEventsResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        bool GetFreezeEvents(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/SetFreezeEvents", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/SetFreezeEventsResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        void SetFreezeEvents(string ConsumerID, bool FreezeEvents);

        // [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetOutputID", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetOutputIDResponse")]
        // [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        // int GetOutputID(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetPowerNotify", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetPowerNotifyResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        PowerNotification GetPowerNotify(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/SetPowerNotify", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/SetPowerNotifyResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        void SetPowerNotify(string ConsumerID, PowerNotification PowerNotify);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetPowerState", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetPowerStateResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        PowerState GetPowerState(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetState", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetStateResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        ControlState GetState(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetDeviceControlDescription", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetDeviceControlDescriptionResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        string GetDeviceControlDescription(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetDeviceControlVersion", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetDeviceControlVersionResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        UposVersion GetDeviceControlVersion(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetDeviceServiceDescription", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetDeviceServiceDescriptionResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        string GetDeviceServiceDescription(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetDeviceServiceVersion", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetDeviceServiceVersionResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        UposVersion GetDeviceServiceVersion(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetPhysicalDeviceDescription", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetPhysicalDeviceDescriptionResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        string GetPhysicalDeviceDescription(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetPhysicalDeviceName", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetPhysicalDeviceNameResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        string GetPhysicalDeviceName(string ConsumerID);

        //
        // Specific Properties
        //

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCapCardAuthentication", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCapCardAuthenticationResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        string GetCapCardAuthentication(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCapDataEncryption", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCapDataEncryptionResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        int GetCapDataEncryption(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCapDeviceAuthentication", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCapDeviceAuthenticationResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        DeviceAuthenticationLevel GetCapDeviceAuthentication(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCapISO", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCapISOResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        bool GetCapISO(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCapJISOne", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCapJISOneResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        bool GetCapJISOne(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCapJISTwo", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCapJISTwoResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        bool GetCapJISTwo(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCapTrackDataMasking", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCapTrackDataMaskingResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        bool GetCapTrackDataMasking(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCapTransmitSentinels", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCapTransmitSentinelsResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        bool GetCapTransmitSentinels(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCapWritableTracks", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCapWritableTracksResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        MSRTracks GetCapWritableTracks(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetAccountNumber", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetAccountNumberResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        string GetAccountNumber(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetAdditionalSecurityInformation", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetAdditionalSecurityInformationResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        byte[] GetAdditionalSecurityInformation(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCardAuthenticationData", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCardAuthenticationDataResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        byte[] GetCardAuthenticationData(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCardAuthenticationDataLength", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCardAuthenticationDataLengthResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        int GetCardAuthenticationDataLength(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCardPropertyList", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCardPropertyListResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        CardPropertyList GetCardPropertyList(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCardType", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCardTypeResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        string GetCardType(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCardTypeList", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetCardTypeListResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        CardTypeList GetCardTypeList(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetDataEncryptionAlgorithm", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetDataEncryptionAlgorithmResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        int GetDataEncryptionAlgorithm(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/SetDataEncryptionAlgorithm", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/SetDataEncryptionAlgorithmResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        void SetDataEncryptionAlgorithm(string ConsumerID, int DataEncryptionAlgorithm);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetDecodeData", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetDecodeDataResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        bool GetDecodeData(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/SetDecodeData", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/SetDecodeDataResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        void SetDecodeData(string ConsumerID, bool DecodeData);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetDeviceAuthenticated", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetDeviceAuthenticatedResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        bool GetDeviceAuthenticated(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetDeviceAuthenticationProtocol", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetDeviceAuthenticationProtocolResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        DeviceAuthenticationProtocol GetDeviceAuthenticationProtocol(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetEncodingMaxLength", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetEncodingMaxLengthResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        int GetEncodingMaxLength(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetErrorReportingType", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetErrorReportingTypeResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        MSRErrorReporting GetErrorReportingType(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/SetErrorReportingType", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/SetErrorReportingTypeResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        void SetErrorReportingType(string ConsumerID, MSRErrorReporting ErrorReportingType);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetExpirationDate", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetExpirationDateResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        string GetExpirationDate(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetFirstName", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetFirstNameResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        string GetFirstName(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetMiddleInitial", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetMiddleInitialResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        string GetMiddleInitial(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetParseDecodeData", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetParseDecodeDataResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        bool GetParseDecodeData(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/SetParseDecodeData", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/SetParseDecodeDataResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        void SetParseDecodeData(string ConsumerID, bool ParseDecodeData);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetServiceCode", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetServiceCodeResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        string GetServiceCode(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetSuffix", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetSuffixResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        string GetSuffix(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetSurname", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetSurnameResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        string GetSurname(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetTitle", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetTitleResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        string GetTitle(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetTrack1Data", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetTrack1DataResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        byte[] GetTrack1Data(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetTrack1DiscretionaryData", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetTrack1DiscretionaryDataResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        byte[] GetTrack1DiscretionaryData(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetTrack1EncryptedData", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetTrack1EncryptedDataResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        byte[] GetTrack1EncryptedData(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetTrack1EncryptedDataLength", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetTrack1EncryptedDataLengthResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        int GetTrack1EncryptedDataLength(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetTrack2Data", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetTrack2DataResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        byte[] GetTrack2Data(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetTrack2DiscretionaryData", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetTrack2DiscretionaryDataResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        byte[] GetTrack2DiscretionaryData(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetTrack2EncryptedData", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetTrack2EncryptedDataResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        byte[] GetTrack2EncryptedData(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetTrack2EncryptedDataLength", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetTrack2EncryptedDataLengthResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        int GetTrack2EncryptedDataLength(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetTrack3Data", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetTrack3DataResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        byte[] GetTrack3Data(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetTrack3EncryptedData", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetTrack3EncryptedDataResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        byte[] GetTrack3EncryptedData(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetTrack3EncryptedDataLength", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetTrack3EncryptedDataLengthResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        int GetTrack3EncryptedDataLength(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetTrack4Data", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetTrack4DataResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        byte[] GetTrack4Data(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetTrack4EncryptedData", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetTrack4EncryptedDataResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        byte[] GetTrack4EncryptedData(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetTrack4EncryptedDataLength", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetTrack4EncryptedDataLengthResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        int GetTrack4EncryptedDataLength(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetTracksToRead", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetTracksToReadResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        MSRTracks GetTracksToRead(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/SetTracksToRead", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/SetTracksToReadResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        void SetTracksToRead(string ConsumerID, MSRTracks TracksToRead);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetTracksToWrite", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetTracksToWriteResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        MSRTracks GetTracksToWrite(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/SetTracksToWrite", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/SetTracksToWriteResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        void SetTracksToWrite(string ConsumerID, MSRTracks TracksToWrite);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetTransmitSentinels", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetTransmitSentinelsResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        bool GetTransmitSentinels(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/SetTransmitSentinels", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/SetTransmitSentinelsResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        void SetTransmitSentinels(string ConsumerID, bool TransmitSentinels);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetWriteCardType", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetWriteCardTypeResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        string GetWriteCardType(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/SetWriteCardType", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/SetWriteCardTypeResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        void SetWriteCardType(string ConsumerID, string WriteCardType);

        //
        // Common Methods
        //

        //[OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/Open", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/OpenResponse")]
        //[FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        //void Open(string ConsumerID, string EndpointAddress);

        //[OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/Close", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/CloseResponse")]
        //[FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        //void Close(string ConsumerID, string EndpointAddress);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/Claim", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/ClaimResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        void Claim(string ConsumerID, int Timeout);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/Release", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/ReleaseResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        void Release(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/CheckHealth", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/CheckHealthResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        void CheckHealth(string ConsumerID, HealthCheckLevel Level);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/ClearInput", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/ClearInputResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        void ClearInput(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/ClearInputProperties", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/ClearInputPropertiesResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        void ClearInputProperties(string ConsumerID);

        // [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/ClearOutput", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/ClearOutputResponse")]
        // [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        // void ClearOutput(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/DirectIO", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/DirectIOResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        DirectIOData DirectIO(string ConsumerID, int Command, int Data, object Obj);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/CompareFirmwareVersion", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/CompareFirmwareVersionResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        CompareFirmwareResult CompareFirmwareVersion(string ConsumerID, string FirmwareFileName);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/ResetStatistics", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/ResetStatisticsResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        void ResetStatistics(string ConsumerID, StatisticList StatisticsBuffer);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/RetrieveStatistics", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/RetrieveStatisticsResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        string RetrieveStatistics(string ConsumerID, StatisticList StatisticsBuffer);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UpdateFirmware", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/UpdateFirmwareResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        void UpdateFirmware(string ConsumerID, string FirmwareFileName);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UpdateStatistics", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/UpdateStatisticsResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        void UpdateStatistics(string ConsumerID, StatisticList StatisticsBuffer);

        //
        // Specific Methods
        //

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/AuthenticateDevice", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/AuthenticateDeviceResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        void AuthenticateDevice(string ConsumerID, byte[] Response);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/DeauthenticateDevice", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/DeauthenticateDeviceResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        void DeauthenticateDevice(string ConsumerID, byte[] Response);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/RetrieveCardProperty", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/RetrieveCardPropertyResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        string RetrieveCardProperty(string ConsumerID, string Name);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/RetrieveDeviceAuthenticationData", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/RetrieveDeviceAuthenticationDataResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        byte[] RetrieveDeviceAuthenticationData(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UpdateKey", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/UpdateKeyResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        void UpdateKey(string ConsumerID, string Key, string KeyName);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/WriteTracks", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/WriteTracksResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        void WriteTracks(string ConsumerID, byte[] Track1Data, byte[] Track2Data, byte[] Track3Data, byte[] Track4Data, int Timeout);

        #endregion

        #region Version 1.2

        //
        // Session Management
        //

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetWSPOSVersion", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetWSPOSVersionResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        UposVersion GetWSPOSVersion();

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GenerateConsumerID", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GenerateConsumerIDResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        string GenerateConsumerID();

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/OpenSession", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/OpenSessionResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        void OpenSession(string ConsumerID, string EndpointAddress);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/CloseSession", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/CloseSessionResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        void CloseSession(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetProviderSessionTimeout", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetProviderSessionTimeoutResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        int GetProviderSessionTimeout(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/KeepAlive", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/KeepAliveResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        void KeepAlive(string ConsumerID);

        //
        // Device Control
        // 

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/OpenDevice", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/OpenDeviceResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        void OpenDevice(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/CloseDevice", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/CloseDeviceResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        void CloseDevice(string ConsumerID);

        //
        // Event Polling
        //

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/PollForUPOSEvent", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/PollForUPOSEventResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        MSREvent PollForUPOSEvent(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/SetEventResponse", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/SetEventResponseResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        void SetEventResponse(string ConsumerID, MSREventResponse EventResponse);

        #endregion

        #region Version 1.3

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetEncryptedClaimedConsumerID", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/GetEncryptedClaimedConsumerIDResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        string GetEncryptedClaimedConsumerID();

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/SetEventRequestProperties", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/MSR/SetEventRequestPropertiesResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/MSR/UposException", Name = "UposException")]
        void SetEventRequestProperties(string ConsumerID, PropertyNameList list);

        #endregion

    }

    #region Version 1.1

    //
    // Common Data Types
    //

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/")]
    public class DirectIOData
    {
        [DataMember]
        public int Data { get; set; }
        [DataMember]
        public object Obj { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/")]
    public class UposException
    {
        [DataMember]
        public ErrorCode ErrorCode { get; set; }
        [DataMember]
        public int ErrorCodeExtended { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/")]
    public class UposVersion
    {
        [DataMember]
        public int Major { get; set; }
        [DataMember]
        public int Minor { get; set; }
        [DataMember]
        public int Build { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/")]
    public class Statistic
    {
        [DataMember]
        public string Name { get; set; }
        [DataMember]
        public string Value { get; set; }
    }

    [CollectionDataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/", ItemName = "Statistic")]
    public class StatisticList : List<Statistic>
    {
    }

    //
    // Common Enumerations
    //

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/")]
    public enum CompareFirmwareResult
    {
        [EnumMember]
        CFV_FIRMWARE_OLDER,
        [EnumMember]
        CFV_FIRMWARE_SAME,
        [EnumMember]
        CFV_FIRMWARE_NEWER,
        [EnumMember]
        CFV_FIRMWARE_DIFFERENT,
        [EnumMember]
        CFV_FIRMWARE_UNKNOWN,
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/")]
    public enum ControlState
    {
        [EnumMember]
        S_CLOSED,
        [EnumMember]
        S_IDLE,
        [EnumMember]
        S_BUSY,
        [EnumMember]
        S_ERROR,
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/")]
    public enum ErrorCode
    {
        [EnumMember]
        E_CLOSED,
        [EnumMember]
        E_CLAIMED,
        [EnumMember]
        E_NOTCLAIMED,
        [EnumMember]
        E_NOSERVICE,
        [EnumMember]
        E_DISABLED,
        [EnumMember]
        E_ILLEGAL,
        [EnumMember]
        E_NOHARDWARE,
        [EnumMember]
        E_OFFLINE,
        [EnumMember]
        E_NOEXIST,
        [EnumMember]
        E_EXISTS,
        [EnumMember]
        E_FAILURE,
        [EnumMember]
        E_TIMEOUT,
        [EnumMember]
        E_BUSY,
        [EnumMember]
        E_EXTENDED,
        [EnumMember]
        E_DEPRECATED,
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/")]
    public enum HealthCheckLevel
    {
        [EnumMember]
        CH_INTERNAL,
        [EnumMember]
        CH_EXTERNAL,
        [EnumMember]
        CH_INTERACTIVE,
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/")]
    public enum PowerNotification
    {
        [EnumMember]
        PN_DISABLED,
        [EnumMember]
        PN_ENABLED,
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/")]
    public enum PowerReporting
    {
        [EnumMember]
        PR_NONE,
        [EnumMember]
        PR_STANDARD,
        [EnumMember]
        PR_ADVANCED,
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/")]
    public enum PowerState
    {
        [EnumMember]
        PS_UNKNOWN,
        [EnumMember]
        PS_ONLINE,
        [EnumMember]
        PS_OFF,
        [EnumMember]
        PS_OFFLINE,
        [EnumMember]
        PS_OFF_OFFLINE,
    }

    /*
    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/")]
    public enum StatisticCategories
    {
        [EnumMember]
        All,
        [EnumMember]
        Manufacturer,
        [EnumMember]
        Upos,
    }
    */
    public class StatisticCategories
    {
        public const string All = "";
        public const string Manufacturer = "M_";
        public const string Upos = "U_";
    }

    //
    // Specific Data Types
    //

    [CollectionDataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/", ItemName = "CardProperty")]
    public class CardPropertyList : List<string>
    {
    }

    [CollectionDataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/", ItemName = "CardType")]
    public class CardTypeList : List<string>
    {
    }

    //
    // Specific Enumerations
    //

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/")]
    public enum DeviceAuthenticationLevel
    {
        [EnumMember]
        MSR_DA_NOT_SUPPORTED,
        [EnumMember]
        MSR_DA_OPTIONAL,
        [EnumMember]
        MSR_DA_REQUIRED,
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/")]
    public enum DeviceAuthenticationProtocol
    {
        [EnumMember]
        MSR_AP_NONE,
        [EnumMember]
        MRS_AP_CHALLENGERESPONSE,
    }

    /*
    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/")]
    public enum EncryptionAlgorithm
    {
        [EnumMember]
        None,
        [EnumMember]
        TripleDeaDukpt,
    }
    */
    public class EncryptionAlgorithm
    {
        public const int MSR_DE_NONE = 1;
        public const int MSR_DE_3DEA_DUKPT = 2;
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/")]
    public enum MSRErrorReporting
    {
        [EnumMember]
        MSR_ERT_CARD,
        [EnumMember]
        MSR_ERT_TRACK,
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/")]
    public enum MSRTracks
    {
        [EnumMember]
        MSR_TR_NONE,
        [EnumMember]
        MSR_TR_1,
        [EnumMember]
        MSR_TR_2,
        [EnumMember]
        MSR_TR_3,
        [EnumMember]
        MSR_TR_1_2,
        [EnumMember]
        MSR_TR_1_3,
        [EnumMember]
        MSR_TR_2_3,
        [EnumMember]
        MSR_TR_1_2_3,
        [EnumMember]
        MSR_TR_4,
        [EnumMember]
        MSR_TR_1_4,
        [EnumMember]
        MSR_TR_2_4,
        [EnumMember]
        MSR_TR_3_4,
        [EnumMember]
        MSR_TR_1_2_4,
        [EnumMember]
        MSR_TR_1_4_4,
        [EnumMember]
        MSR_TR_2_3_4,
        [EnumMember]
        MSR_TR_1_2_3_4,
    }

    //
    // Constants
    //

    /*
    public class Constants
    {
        public const string CardTypeAamva = "AAMVA";
        public const string CardTypeBank = "BANK";
        public const int ExtendedErrorDeviceAuthenticationFailed = 205;
        public const int ExtendedErrorDeviceDeauthenticationFailed = 206;
        public const int ExtendedErrorEnd = 202;
        public const int ExtendedErrorFailure = 111;
        public const int ExtendedErrorFirmwareBadFile = 281;
        public const int ExtendedErrorLrc = 204;
        public const int ExtendedErrorParity = 203;
        public const int ExtendedErrorStart = 201;
        public const int ExtendedErrorStatistics = 280;
        public const int ExtendedErrorStatisticsDependency = 282;
        public const int ExtendedErrorSuccess = 0;
        public const string StatisticChallengeRequestCount = "ChallengeRequestCount";
        public const string StatisticCommunicationErrorCount = "CommunicationErrorCount";
        public const string StatisticDeviceCategory = "DeviceCategory";
        public const string StatisticFailedCardAuthenticationDataCount = "FailedCardAuthenticationDataCount";
        public const string StatisticFailedDeviceAuthenticationCount = "FailedDeviceAuthenticationCount";
        public const string StatisticFailedReadCount = "FailedReadCount";
        public const string StatisticFailedWriteCount = "FailedWriteCount";
        public const string StatisticFirmwareRevision = "FirmwareRevision";
        public const string StatisticGoodCardAuthenticationDataCount = "GoodCardAuthenticationDataCount";
        public const string StatisticGoodDeviceAuthenticationCount = "GoodDeviceAuthenticationCount";
        public const string StatisticGoodReadCount = "GoodReadCount";
        public const string StatisticGoodWriteCount = "GoodWriteCount";
        public const string StatisticHoursPoweredCount = "HoursPoweredCount";
        public const string StatisticInstallationDate = "InstallationDate";
        public const string StatisticInterface = "Interface";
        public const string StatisticManufactureDate = "ManufactureDate";
        public const string StatisticManufacturerName = "ManufacturerName";
        public const string StatisticMechanicalRevision = "MechanicalRevision";
        public const string StatisticMissingStartSentinelTrack1Count = "MissingStartSentinelTrack1Count";
        public const string StatisticMissingStartSentinelTrack2Count = "MissingStartSentinelTrack2Count";
        public const string StatisticMissingStartSentinelTrack3Count = "MissingStartSentinelTrack3Count";
        public const string StatisticMissingStartSentinelTrack4Count = "MissingStartSentinelTrack4Count";
        public const string StatisticModelName = "ModelName";
        public const string StatisticParityLrcErrorTrack1Count = "ParityLrcErrorTrack1Count";
        public const string StatisticParityLrcErrorTrack2Count = "ParityLrcErrorTrack2Count";
        public const string StatisticParityLrcErrorTrack3Count = "ParityLrcErrorTrack3Count";
        public const string StatisticParityLrcErrorTrack4Count = "ParityLrcErrorTrack4Count";
        public const string StatisticSerialNumber = "SerialNumber";
        public const string StatisticUnifiedPOSVersion = "UnifiedPOSVersion";
        public const string StatisticUnreadableCardCount = "UnreadableCardCount";
        public const int WaitForever = -1;
    }
    */

    public class AamvaCardProperties
    {
        public const string Address = "Address";
        public const string BirthDate = "BirthDate";
        public const string City = "City";
        public const string Class = "Class";
        public const string Endorsements = "Endorsements";
        public const string ExpirationDate = "ExpirationDate";
        public const string EyeColor = "EyeColor";
        public const string FirstName = "FirstName";
        public const string Gender = "Gender";
        public const string HairColor = "HairColor";
        public const string Height = "Height";
        public const string LicenseNumber = "LicenseNumber";
        public const string PostalCode = "PostalCode";
        public const string Restrictions = "Restrictions";
        public const string State = "State";
        public const string Suffix = "Suffix";
        public const string Surname = "Surname";
        public const string Weight = "Weight";
    }

    public class BankCardProperties
    {
        public const string AccountNumber = "AccountNumber";
        public const string ExpirationDate = "ExpirationDate";
        public const string FirstName = "FirstName";
        public const string MiddleInitial = "MiddleInitial";
        public const string ServiceCode = "ServiceCode";
        public const string Suffix = "Suffix";
        public const string Surname = "Surname";
        public const string Title = "Title";
    }

    public class CardType
    {
        public const string MSR_CT_AAMVA = "AAMVA";
        public const string MSR_CT_BANK = "BANK";
    }

    public class ExtendedError
    {
        public const int SUCCESS = 0;
        public const int E_FAILURE = 111;
        public const int EMSR_START = 201;
        public const int EMSR_END = 202;
        public const int EMSR_PARITY = 203;
        public const int EMSR_LRC = 204;
        public const int EMSR_DEVICE_AUTHENTICATION_FAILED = 205;
        public const int EMSR_DEVICE_DEAUTHENTICATION_FAILED = 206;
        public const int ESTATS_ERROR = 280;
        public const int EFIRMWARE_BAD_FILE = 281;
        public const int ESTATS_DEPENDENCY = 282;
    }

    public class StatisticProperties
    {
        public const string ChallengeRequestCount = "ChallengeRequestCount";
        public const string CommunicationErrorCount = "CommunicationErrorCount";
        public const string DeviceCategory = "DeviceCategory";
        public const string FailedCardAuthenticationDataCount = "FailedCardAuthenticationDataCount";
        public const string FailedDeviceAuthenticationCount = "FailedDeviceAuthenticationCount";
        public const string FailedReadCount = "FailedReadCount";
        public const string FailedWriteCount = "FailedWriteCount";
        public const string FirmwareRevision = "FirmwareRevision";
        public const string GoodCardAuthenticationDataCount = "GoodCardAuthenticationDataCount";
        public const string GoodDeviceAuthenticationCount = "GoodDeviceAuthenticationCount";
        public const string GoodReadCount = "GoodReadCount";
        public const string GoodWriteCount = "GoodWriteCount";
        public const string HoursPoweredCount = "HoursPoweredCount";
        public const string InstallationDate = "InstallationDate";
        public const string Interface = "Interface";
        public const string ManufactureDate = "ManufactureDate";
        public const string ManufacturerName = "ManufacturerName";
        public const string MechanicalRevision = "MechanicalRevision";
        public const string MissingStartSentinelTrack1Count = "MissingStartSentinelTrack1Count";
        public const string MissingStartSentinelTrack2Count = "MissingStartSentinelTrack2Count";
        public const string MissingStartSentinelTrack3Count = "MissingStartSentinelTrack3Count";
        public const string MissingStartSentinelTrack4Count = "MissingStartSentinelTrack4Count";
        public const string ModelName = "ModelName";
        public const string ParityLrcErrorTrack1Count = "ParityLrcErrorTrack1Count";
        public const string ParityLrcErrorTrack2Count = "ParityLrcErrorTrack2Count";
        public const string ParityLrcErrorTrack3Count = "ParityLrcErrorTrack3Count";
        public const string ParityLrcErrorTrack4Count = "ParityLrcErrorTrack4Count";
        public const string SerialNumber = "SerialNumber";
        public const string UnifiedPOSVersion = "UnifiedPOSVersion";
        public const string UnreadableCardCount = "UnreadableCardCount";
    }

    public class Wait
    {
        public const int FOREVER = -1;
    }

    #endregion

    #region Version 1.2

    //
    // Event Polling
    //

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/")]
    public class MSREvent
    {
        [DataMember]
        public DataEvent DataEvent { get; set; }
        [DataMember]
        public DirectIOEvent DirectIOEvent { get; set; }
        [DataMember]
        public ErrorEvent ErrorEvent { get; set; }
        //[DataMember]
        //public OutputCompleteEvent OutputCompleteEvent { get; set; }
        [DataMember]
        public StatusUpdateEvent StatusUpdateEvent { get; set; }
        [DataMember]
        public DataContainedEvent DataContainedEvent { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/")]
    public class MSREventResponse
    {
        [DataMember]
        public DataEventResponse DataEventResponse { get; set; }
        [DataMember]
        public DataContainedEventResponse DataContainedEventResponse { get; set; }
        [DataMember]
        public DirectIOEventResponse DirectIOEventResponse { get; set; }
        [DataMember]
        public ErrorEventResponse ErrorEventResponse { get; set; }
        //[DataMember]
        //public OutputCompleteEventResponse OutputCompleteEventResponse { get; set; }
        [DataMember]
        public StatusUpdateEventResponse StatusUpdateEventResponse { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/")]
    public class DataEvent
    {
        [DataMember]
        public string Source { get; set; }
        [DataMember]
        public int EventID { get; set; }
        [DataMember]
        public DateTime TimeStamp { get; set; }
        [DataMember]
        public int Status { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/")]
    public class DataEventResponse
    {
        [DataMember]
        public int EventID { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/")]
    public class DirectIOEvent
    {
        [DataMember]
        public string Source { get; set; }
        [DataMember]
        public int EventID { get; set; }
        [DataMember]
        public DateTime TimeStamp { get; set; }
        [DataMember]
        public int EventNumber { get; set; }
        [DataMember]
        public int Data { get; set; }
        [DataMember]
        public object Obj { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/")]
    public class DirectIOEventResponse
    {
        [DataMember]
        public int EventID { get; set; }
        [DataMember]
        public DirectIOData DirectIOData { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/")]
    public class ErrorEvent
    {
        [DataMember]
        public string Source { get; set; }
        [DataMember]
        public int EventID { get; set; }
        [DataMember]
        public DateTime TimeStamp { get; set; }
        [DataMember]
        public ErrorCode ErrorCode { get; set; }
        [DataMember]
        public int ErrorCodeExtended { get; set; }
        [DataMember]
        public ErrorLocus ErrorLocus { get; set; }
        [DataMember]
        public ErrorResponse ErrorResponse { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/")]
    public class ErrorEventResponse
    {
        [DataMember]
        public int EventID { get; set; }
        [DataMember]
        public ErrorResponse ErrorResponse { get; set; }
    }
    /*
    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/")]
    public class OutputCompleteEvent
    {
        [DataMember]
        public string Source { get; set; }
        [DataMember]
        public int EventID { get; set; }
        [DataMember]
        public DateTime TimeStamp { get; set; }
        [DataMember]
        int OutputID { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/")]
    public class OutputCompleteEventResponse
    {
        [DataMember]
        public int EventID { get; set; }
    }
    */
    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/")]
    public class StatusUpdateEvent
    {
        [DataMember]
        public string Source { get; set; }
        [DataMember]
        public int EventID { get; set; }
        [DataMember]
        public DateTime TimeStamp { get; set; }
        [DataMember]
        public int Status { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/")]
    public class StatusUpdateEventResponse
    {
        [DataMember]
        public int EventID { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/")]
    public enum ErrorLocus
    {
        [EnumMember]
        EL_INPUT,
        [EnumMember]
        EL_INPUT_DATA,
        [EnumMember]
        EL_OUTPUT,
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/")]
    public enum ErrorResponse
    {
        [EnumMember]
        ER_CLEAR,
        [EnumMember]
        ER_CONTINUEINPUT,
        [EnumMember]
        ER_RETRY,
    }

    #endregion

    #region Version 1.3

    [CollectionDataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/", ItemName = "PropertyName")]
    public class PropertyNameList : List<string>
    {
    }



    [CollectionDataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/", ItemName = "Parameter")]
    public class ParameterList : Dictionary<string, object>
    {
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/")]
    public class DataContainedEvent
    {
        [DataMember]
        public string Source { get; set; }
        [DataMember]
        public int EventID { get; set; }
        [DataMember]
        public DateTime TimeStamp { get; set; }
        [DataMember]
        public int Status { get; set; }
        [DataMember]
        public ParameterList Parameters { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/")]
    public class DataContainedEventData
    {
        [DataMember]
        public int EventID { get; set; }
        [DataMember]
        public bool SetDataEventEnabled { get; set; }
        [DataMember]
        public bool CallClearInputProperties { get; set; }
    }


    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/MSR/")]
    public class DataContainedEventResponse
    {
        [DataMember]
        public int EventID { get; set; }
        [DataMember]
        public bool SetDataEventEnabled { get; set; }
        [DataMember]
        public bool CallClearInputProperties { get; set; }
    }
    #endregion
}
