/////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017  Ericsson AB
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// which accompanies this distribution, and is available at
// http://www.eclipse.org/legal/epl-v10.html
/////////////////////////////////////////////////////////////////////////////////////
// Contributors:
// Akos Makovics
//
//  File:         OpcUa_Types_JSON_Non_Reversible.ttcn
//  Rev:          R1A
//  Prodnr:       CNL
/////////////////////////////////////////////////////////////////////////////////////

module OpcUa_Types_JSON_Non_Reversible
{

  /////////////////////////////////////////////////////////////
  //                                                         //
  //                 Encoders and Decoders                   //
  //                                                         //
  /////////////////////////////////////////////////////////////

  external function enc_MessageTypes (in MessageTypes msg) return octetstring
    with { extension "prototype(convert) encode(JSON)" }

  external function dec_MessageTypes (in octetstring p_oct, out MessageTypes msg) return integer
    with {extension "prototype(backtrack) decode (JSON) errorbehavior(ALL:WARNING)"}

  /////////////////////////////////////////////////////////////
  //                                                         //
  //                     Constant Values                     //
  //                                                         //
  /////////////////////////////////////////////////////////////

  const integer Null_Value := -2147483647;

  const integer HelloHeaderMsgType := 4998472;
  const integer AckHeaderMsgType := 4932417;
  const integer ErrorHeaderMsgType := 5395013;
  const integer ReverseHelloHeaderMsgType := 4540498;

  const integer OpenSecureChannelMsgType := 5132367;
  const integer CloseSecureChannelMsgType := 5196867;
  const integer ServicesMsgType := 4674381;

  const integer FindServiceRequestNodeId := 0; //No data in XML
  const integer FindServiceResponseNodeId := 1; //No data in XML
  const integer CloseSecureChannelRequestNodeId := 450;
  const integer CloseSecureChannelResponseNodeId := 453;
  const integer OpenSecureChannelRequestNodeId := 444;
  const integer OpenSecureChannelResponseNodeId := 447;
  const integer FindServersOnNetworkRequestNodeId := 12208;
  const integer FindServersOnNetworkResponseNodeId := 12209;
  const integer GetEndpointsRequestNodeId := 426;
  const integer GetEndpointsResponseNodeId := 429;
  const integer RegisterServerRequestNodeId := 435;
  const integer RegisterServerResponseNodeId := 438;
  const integer RegisterServer2RequestNodeId := 12211;
  const integer RegisterServer2ResponseNodeId := 12212;
  const integer CreateSessionRequestNodeId := 459;
  const integer CreateSessionResponseNodeId := 462;
  const integer ActivateSessionRequestNodeId := 465;
  const integer ActivateSessionResponseNodeId := 468;
  const integer CloseSessionRequestNodeId := 471;
  const integer CloseSessionResponseNodeId := 474;
  const integer CancelRequestRequestNodeId := 477;
  const integer CancelRequestResponseNodeId := 480;
  const integer AddNodesRequestNodeId := 486;
  const integer AddNodesResponseNodeId := 489;
  const integer AddReferencesRequestNodeId := 492;
  const integer AddReferencesResponseNodeId := 495;
  const integer DeleteNodesRequestNodeId := 488;
  const integer DeleteNodesResponseNodeId := 501;
  const integer DeleteReferencesRequestNodeId := 504;
  const integer DeleteReferencesResponseNodeId := 507;
  const integer BrowseRequestNodeId := 525;
  const integer BrowseResponseNodeId := 528;
  const integer BrowseNextRequestNodeId := 531;
  const integer BrowseNextResponseNodeId := 534;
  const integer TranslateBrowsePathsToNodeIdsRequestNodeId := 552;
  const integer TranslateBrowsePathsToNodeIdsResponseNodeId := 555;
  const integer RegisterNodesRequestNodeId := 558;
  const integer RegisterNodesResponseNodeId := 561;
  const integer UnregisterNodesRequestNodeId := 564;
  const integer UnregisterNodesResponseNodeId := 567;
  const integer QueryFirstRequestNodeId := 613;
  const integer QueryFirstResponseNodeId := 616;
  const integer QueryNextRequestNodeId := 619;
  const integer QueryNextResponseNodeId := 622;
  const integer ReadRequestNodeId := 629;
  const integer ReadResponseNodeId := 632;
  const integer HistoryReadRequestNodeId := 662;
  const integer HistoryReadResponseNodeId := 665;
  const integer WriteRequestNodeId := 671;
  const integer WriteResponseNodeId := 675;
  const integer HistoryUpdateRequestNodeId := 698;
  const integer HistoryUpdateResponseNodeId := 701;
  const integer CallRequestNodeId := 710;
  const integer CallResponseNodeId := 713;
  const integer CreateMonitoredItemsRequestNodeId := 749;
  const integer CreateMonitoredItemsResponseNodeId := 752;
  const integer ModifyMonitoredItemsRequestNodeId := 761;
  const integer ModifyMonitoredItemsResponseNodeId := 764;
  const integer SetMonitoringModeRequestNodeId := 767;
  const integer SetMonitoringModeResponseNodeId := 770;
  const integer SetTriggeringRequestNodeId := 773;
  const integer SetTriggeringResponseNodeId := 776;
  const integer DeleteMonitoredItemsRequestNodeId := 779;
  const integer DeleteMonitoredItemsResponseNodeId := 782;
  const integer CreateSubscriptionRequestNodeId := 785;
  const integer CreateSubscriptionResponseNodeId := 789;
  const integer ModifySubscriptionRequestNodeId := 791;
  const integer ModifySubscriptionResponseNodeId := 794;
  const integer SetPublishingModeRequestNodeId := 797;
  const integer SetPublishingModeResponseNodeId := 800;
  const integer PublishRequestNodeId := 824;
  const integer PublishResponseNodeId := 827;
  const integer RepublishRequestNodeId := 830;
  const integer RepublishResponseNodeId := 833;
  const integer TransferSubscriptionsRequestNodeId := 839;
  const integer TransferSubscriptionsResponseNodeId := 842;
  const integer DeleteSubscriptionsRequestNodeId := 845;
  const integer DeleteSubscriptionsResponseNodeId := 848;

  const integer FinalChunk := 70;
  const integer IntermediateChunk := 67;
  const integer ErrorChunk := 65;

  /////////////////////////////////////////////////////////////
  //                                                         //
  //                     Enumerations                        //
  //                                                         //
  /////////////////////////////////////////////////////////////

  type enumerated MessageSecurityMode {
    INVALID_0,
    NONE_1,
    SIGN_2,
    SIGNANDENCRYPT_3
  }

  type enumerated SecurityTokenRequestType {
    ISSUE_0,
    RENEW_1
  }

  type enumerated NodeClass
  {
    UNSPECIFIED_0(0),
    OBJECT_1(1),
    VARIABLE_2(2),
    METHOD_4(4),
    OBJECT_TYPE_8(8),
    VARIABLE_TYPE_16(16),
    REFERENCE_TYPE_32(32),
    DATA_TYPE_64(64),
    VIEW_128(128)
  }

  type enumerated StructureType {
    STRUCTURE_0,
    STRUCTURE_WITH_OPTIONAL_FIELDS_1,
    UNION_2
  }

  type enumerated ApplicationType {
    SERVER_0,
    CLIENT_1,
    CLIENTANDSERVER_2,
    DISCOVERYSERVER_3
  }

  type enumerated DataChangeTrigger {
    STATUS_0,
    STATUS_VALUE_1,
    STATUS_VALUE_TIMESTAMP_2
  }

  type enumerated MonitoringMode {
    DISABLED_0,
    SAMPLING_1,
    REPORTING_2
  }

  type enumerated BrowseDirection {
    FORWARD_0,
    INVERSE_1,
    BOTH_2
  }

  type enumerated TimestampsToReturn {
    SOURCE_0,
    SERVER_1,
    BOTH_2,
    NEITHER_3
  }

  type enumerated UserIdentityTokenType {
    ANONYMOUS_0,
    USERNAME_1,
    CERTIFICATE_2,
    ISSUEDTOKEN_3
  }

  type enumerated PerformUpdateType {
    INSERT_1(1),
    REPLACE_2(2),
    UPDATE_3(3)
  }

  type enumerated PerformUpdateTypeExtended {
    INSERT_1(1),
    REPLACE_2(2),
    UPDATE_3(3),
    REMOVE_4(4)
  }

  type enumerated IdType
  {
    NUMERIC_0,
    STRING_1,
    GUID_2,
    OPAQUE_3
  }

  type enumerated FilterOperator {
    Equals_0,
    IsNull_1,
    GreaterThan_2,
    LessThan_3,
    GreaterThanOrEqual_4,
    LessThanOrEqual_5,
    Like_6,
    Not_7,
    Between_8,
    InList_9,
    And_10,
    Or_11,
    Cast_12,
    InView_13,
    OfType_14,
    RelatedTo_15,
    BitwiseAnd_16,
    BitwiseOr_17
  }

  type enumerated OpenFileMode
  {
    READ_1(1),
    WRITE_2(2),
    ERASE_EXISTING_4(4),
    APPEND_8(8)
  }

  type enumerated TrustListMasks
  {
    none_0(0),
    trustedCertificates_1(1),
    trustedCrls_2(2),
    issuerCertificates_4(4),
    issuerCrls_8(8),
    all_15(15)
  }

  /////////////////////////////////////////////////////////////
  //                                                         //
  //                      Base Types                         //
  //                                                         //
  /////////////////////////////////////////////////////////////

  //Encoded as the JSON literal ‘true’ or ‘false’.
  type boolean Boolean;

  //An integer value between -128 and 127 inclusive.
  type integer SByte with { variant "FIELDLENGTH(8), COMP(signbit), FIELDORDER(lsb)" };

  //An integer value between 0 and 255 inclusive.
  type integer Byte with { variant "FIELDLENGTH(8), COMP(nosign), FIELDORDER(lsb)" };

  //An integer value between -32 768 and 32 767 inclusive.
  type integer Int16 with { variant "FIELDLENGTH(16), COMP(signbit), FIELDORDER(lsb)" };

  //An integer value between 0 and 65 535 inclusive.
  type integer UInt16 with { variant "FIELDLENGTH(16), COMP(nosign), FIELDORDER(lsb)" };

  //An integer value between 0 and 16 777 215
  type integer UInt24 with { variant "FIELDLENGTH(24), COMP(nosign), FIELDORDER(lsb)" }

  //An integer value between -2 147 483 648 and 2 147 483 647 inclusive.
  type integer Int32 with { variant "FIELDLENGTH(32), COMP(signbit), FIELDORDER(lsb)" };

  //An integer value between 0 and 4 294 967 295 inclusive.
  type integer UInt32 with { variant "FIELDLENGTH(32), COMP(nosign), FIELDORDER(lsb)" };

  //An integer value between -9 223 372 036 854 775 808 and 9 223 372 036 854 775 807 inclusive.
  type charstring Int64 with { variant "FIELDLENGTH(64), COMP(signbit), FIELDORDER(lsb)" };

  //An integer value between 0 and 18 446 744 073 709 551 615 inclusive.
  type charstring UInt64 with { variant "FIELDLENGTH(64), COMP(nosign), FIELDORDER(lsb)" };

  //An IEEE single precision (32 bit) floating point value.
  type float Float with { variant "FORMAT(IEEE754 float), FIELDLENGTH(32), FIELDORDER(lsb)"};

  //An IEEE double precision (64 bit) floating point value.
  type float Double with { variant "FORMAT(IEEE754 double), FIELDLENGTH(64), FIELDORDER(lsb)"};

  //Defines an interval of time in milliseconds
  type Double Duration;

  //Number of 100 nanosecond intervals since January 1, 1601
  type charstring DateTime with { variant "FIELDLENGTH(64), COMP(signbit), BYTEORDER(first)"};

  //Define Coordinated Universal Time (UTC) values.
  type DateTime UtcTime;

  //Represents the time in seconds since the year 2000. It is used as version number based on the last change time.
  type UInt32 VersionTime;

  //Represents the value of a counter
  type UInt32 Counter;

  //Identifies an element of an array
  type UInt32 Index;

  //Used as an identifier, such as a handle. All values, except for 0, are valid.
  type UInt32 IntegerId;

  //Representing an image.
  type octetstring Image;

  //Representing an image in BMP format.
  type octetstring ImageBMP;

  //Representing an image in GIF format.
  type octetstring ImageGIF;

  //Representing an image in JPG format.
  type octetstring ImageJPG;

  //Representing an image in PNG format.
  type octetstring ImagePNG;

  //Representing audio data. It can be any number of audio formats.
  type ByteString AudioData;

  //A string that is composed of a language component and a country/region component
  type String LocaleId;

  //Used to pause a Browse or QueryFirst operation
  type ByteString ContinuationPoint;

  //Used for indexing a range within an array
  type String NumericRange;

  //An opaque identifier that is used to identify requests associated with a particular Session.
  type NodeId SessionAuthenticationToken;

  //Sequence of UTF-8 characters without a null terminator and preceded by the length in bytes.
  type charstring String;

  //A 16-byte value that can be used as a globally unique identifier.
  type charstring Guid;

  //Sequence of bytes preceded by its length in bytes
  type charstring ByteString

  //An XML element, as an XML fragment serialized as UTF-8 string
  type charstring XmlElement;

  type Int32 DataType;
  type Variant BaseDataType;

  /////////////////////////////////////////////////////////////
  //                                                         //
  //                   Complex Types                         //
  //                                                         //
  /////////////////////////////////////////////////////////////

  //A StatusCode of Good (0) is treated like a NULL and not encoded. If it is an element of an JSON array it is encoded as the JSON literal ‘null’.
  type record StatusCode {
    integer Code,
    String Symbol
  }

  //An identifier for a node in the address space of an OPC UA Server.
  type record NodeId {
    Byte IdType optional,
    NodeIdType Id,
    NodeIdNamsespace Namespace optional
  } with {
    variant (Id) "chosen (StringNodeId, IdType = 1;
                          GuidNodeId, IdType = 2;
                          ByteStringNodeId, IdType = 3;
                          UInt32NodeId, otherwise;)"

    variant(IdType) "JSON : default (0)"
  }

  type union NodeIdNamsespace {
    integer IntNamespace,
    String StringNamespace
  } with {
    variant "JSON: as value"
  }

  //Helper type, contains the possible body types for NodeId
  type union NodeIdType {
    UInt32 UInt32NodeId,
    String StringNodeId,
    Guid GuidNodeId,
    ByteString ByteStringNodeId
  } with {
    variant "JSON: as value"
  }

  type record ExpandedNodeId {
    Byte IdType optional,
    NodeIdType Id,
    NodeIdNamsespace Namespace optional,
    String ServerURI optional
  } with {
    variant (Id) "chosen (StringNodeId, IdType = 1;
                          GuidNodeId, IdType = 2;
                          ByteStringNodeId, IdType = 3;
                          UInt32NodeId, otherwise;)"

    variant(IdType) "JSON : default (0)"
  }

  type record DiagnosticInfo {
    Int32 SymbolicId,
    Int32 NamespaceUri,
    Int32 Locale,
    Int32 LocalizedText,
    String AdditionalInfo,
    StatusCode InnerStatusCode optional,
    DiagnosticInfo InnerDiagnosticInfo optional
  }

  //A name qualified by a namespace.
  type record QualifiedName {
    UInt16 namespaceIndex,
    String name
  }

  //Human readable text with an optional locale identifier.
  type record LocalizedText {
    String locale,
    String text
  }

  //A structure that contains an application specific data type that may not be recognized by the receiver
  type record ExtensionObject {
    ExtensionObjectBody body
  }

  type union ExtensionObjectBody {
    octetstring structure,
    String byteString,
    String xmlElement
  }

  type record Variant {
    VariantBody Body
  }

  type union VariantBody {
    Boolean bool,
    SByte sbyte,
    Byte byte,
    Int16 int16,
    UInt16 uint16,
    Int32 int32,
    UInt32 uint32,
    Int64 int64,
    UInt64 uint64,
    Float Float,
    Double double,
    String string,
    DateTime datetime,
    Guid guid,
    ByteString bytestring,
    XmlElement xmlelement,
    NodeId nodeid,
    ExpandedNodeId expandednodeid,
    StatusCode statuscode,
    QualifiedName qualifiedname,
    LocalizedText localizedtext,
    ExtensionObject extensionobject,
    DataValue datavalue,
    ListOfVariant listofvariant,
    DiagnosticInfo diagnosticinfo,
    ListOfBoolean listOfBool,
    ListOfSByte listOfSbyte,
    ListOfByte listOfByte,
    ListOfInt16 listOfInt16,
    ListOfUInt16 listOfUint16,
    ListOfInt32 listOfInt32,
    ListOfUInt32 listOfUint32,
    ListOfInt64 listOfInt64,
    ListOfUInt64 listOfUint64,
    ListOfFloat listOfFloatValue,
    ListOfDouble listOfDouble,
    ListOfString listOfString,
    ListOfDateTime listOfDatetime,
    ListOfGuid listOfGuid,
    ListOfByteString listOfBytestring,
    ListOfXmlElement listOfXmlelement,
    ListOfNodeId listOfNodeid,
    ListOfExpandedNodeId listOfExpandednodeid,
    ListOfStatusCode listOfStatuscode,
    ListOfQualifiedName listOfQualifiedname,
    ListOfLocalizedText listOfLocalizedtext,
    ListOfExtensionObject listOfExtensionobject,
    ListOfDataValue listOfDatavalue,
    ListOfVariant listOfListofvariant,
    ListOfDiagnosticInfo listOfDiagnosticinfo
  }

  type record DataValue {
    integer EncodingMask,
    Variant Value optional,
    StatusCode Status optional,
    DateTime SourceTimeStamp optional,
    UInt16 SourcePicoSecond optional,
    DateTime ServerTimestamp optional,
    UInt16 ServerPicoSeconds optional
  }

  type record Decimal {
    integer Scale,
    String Value
  }

  //Represent a human-readable representation of an Enumeration.
  type record EnumValueType {
    Int64 Value,
    LocalizedText displayName,
    LocalizedText description
  }

  //Base DataType for all DataTypes representing a bit mask.
  type record OptionSet {
    ByteString Value,
    ByteString validBits
  }

  //Provides the meta data for a custom Structure DataType.
  type record StructureDefinition {
    NodeId defaultEncodingId,
    NodeId baseDataType,
    StructureType structureType,
    ListOfStructureField fields
  }

  //Provides the metadata for a custom Enumeration or OptionSet DataType.
  type record EnumDefinition {
    ListOfEnumField fields
  }

  //Provides the metadata for a field of a custom Enumeration or OptionSet DataType.
  type record EnumField {
    String name
  }

  //Provides the metadata for a field of a custom Structure DataType.
  type record StructureField {
    String name,
    LocalizedText description,
    NodeId dataType,
    Int32 valueRank,
    Boolean isOptional
  }

  //Implementation of the Extension Object for the Extensible Parameter types
  type record ExtensibleParameter {
    NodeId parameterTypeId,
    ExtensibleParameterBody extensibleParameterBody optional
  }

  //Possible extension types
  type union ExtensibleParameterBody {
    ElementOperand elementOperand,
    LiteralOperand literalOperand,
    AttributeOperand attributeOperand,
    SimpleAttributeOperand simpleAttributeOperand,
    DataChangeFilter dataChangeFilter,
    EventFilter eventFilter,
    AggregateFilter aggregateFilter,
    EventFilterResult eventFilterResult,
    AggregateFilterResult aggregateFilterResult,
    ObjectAttributes objectAttributes,
    VariableAttributes variableAttributes,
    MethodAttributes methodAttributes,
    ObjectTypeAttributes objectTypeAttributes,
    VariableTypeAttributes variableTypeAttributes,
    ReferenceTypeAttributes referenceTypeAttributes,
    DataTypeAttributes dataTypeAttributes,
    ViewAttributes viewAttributes,
    GenericAttributes genericAttributes,
    UserNameIdentityToken userNameIdentityToken,
    X509IdentityToken x509IdentityToken,
    IssuedIdentityToken issuedIdentityToken,
    AnonymousIdentityToken anonymousIdentityToken,
    MdnsDiscoveryConfiguration mdnsDiscoveryConfiguration,
    ReadEventDetails readEventDetails,
    ReadRawModifiedDetails readRawModifiedDetails,
    ReadProcessedDetails readProcessedDetails,
    ReadAtTimeDetails readAtTimeDetails,
    ListOfDataValue dataValues,
    UpdateDataDetails updateDataDetails,
    UpdateStructureDataDetails updateStructureDataDetails,
    UpdateEventDetails updateEventDetails,
    DeleteRawModifiedDetails deleteRawModifiedDetails,
    DeleteAtTimeDetails deleteAtTimeDetails,
    DeleteEventDetails deleteEventDetails,
    DataChangeNotification dataChangeNotification,
    EventNotificationList eventNotificationList,
    StatusChangeNotification statusChangeNotification
  } with {
    variant "";
  }

  /////////////////////////////////////////////////////////////
  //                                                         //
  //                 Lists and Arrays                        //
  //                                                         //
  /////////////////////////////////////////////////////////////

  //Arrays of types. Used in lists, and in templates for lists
  type record of Boolean ListOfBoolean;
  type record of integer ListOfInteger;
  type record of SByte ListOfSByte;
  type record of Byte ListOfByte;
  type record of Int16 ListOfInt16;
  type record of UInt16 ListOfUInt16;
  type record of Int32 ListOfInt32;
  type record of UInt32 ListOfUInt32;
  type record of Int64 ListOfInt64;
  type record of UInt64 ListOfUInt64;
  type record of Float ListOfFloat;
  type record of Double ListOfDouble;
  type record of DateTime ListOfDateTime;
  type record of UtcTime ListOfUtcTime;
  type record of Counter ListOfCounter;
  type record of IntegerId ListOfIntegerId;
  type record of LocaleId ListOfLocaleId;
  type record of ContinuationPoint ListOfContinuationPoint;
  type record of String ListOfString;
  type record of Guid ListOfGuid;
  type record of ByteString ListOfByteString;
  type record of XmlElement ListOfXmlElement;
  type record of NodeId ListOfNodeId;
  type record of ExpandedNodeId ListOfExpandedNodeId;
  type record of StatusCode ListOfStatusCode;
  type record of DiagnosticInfo ListOfDiagnosticInfo;
  type record of QualifiedName ListOfQualifiedName;
  type record of LocalizedText ListOfLocalizedText;
  type record of ExtensionObject ListOfExtensionObject;
  type record of Variant ListOfVariant;
  type record of DataValue ListOfDataValue;
  type record of Decimal ListOfDecimal;
  type record of EnumValueType ListOfEnumValueType;
  type record of EnumField ListOfEnumField;
  type record of StructureField ListOfStructureField;
  type record of ExtensibleParameter ListOfExtensibleParameter;
  type record of ApplicationDescription ListOfApplicationDescription;
  type record of BrowseResult ListOfBrowseResult;
  type record of ContentFilterElement ListOfContentFilterElement;
  type record of ContentFilterElementResult ListOfContentFilterElementResult;
  type record of SimpleAttributeOperand ListOfSimpleAttributeOperand;
  type record of EndpointDescription ListOfEndpointDescription;
  type record of MonitoringParameters ListOfMonitoringParameters;
  type record of GenericAttributeValue ListOfGenericAttributeValue;
  type record of MonitoredItemNotification ListOfMonitoredItemNotification;
  type record of EventFieldList ListOfEventFieldList;
  type record of QueryDataSet ListOfQueryDataSet;
  type record of ReadValueId ListOfReadValueId;
  type record of ReferenceDescription ListOfReferenceDescription;
  type record of RelativePathElement ListOfRelativePathElement;
  type record of ApplicationInstanceCertificate ListOfApplicationInstanceCertificate;
  type record of ChannelSecurityToken ListOfChannelSecurityToken;
  type record of UserTokenPolicy ListOfUserTokenPolicy;
  type record of ServerOnNetwork ListOfServerOnNetwork;
  type record of AddNodesItem ListOfAddNodesItem;
  type record of AddNodesResult ListOfAddNodesResult;
  type record of AddReferencesItem ListOfAddReferencesItem;
  type record of DeleteNodesItem ListOfDeleteNodesItem;
  type record of DeleteReferencesItem ListOfDeleteReferencesItem;
  type record of SignedSoftwareCertificate ListOfSignedSoftwareCertificate;
  type record of BrowseDescription ListOfBrowseDescription;
  type record of BrowsePath ListOfBrowsePath;
  type record of BrowsePathResult ListOfBrowsePathResult;
  type record of BrowsePathTarget ListOfBrowsePathTarget;
  type record of NodeTypeDescription ListOfNodeTypeDescription;
  type record of QueryDataDescription ListOfQueryDataDescription;
  type record of ParsingResult ListOfParsingResult;
  type record of HistoryReadValueId ListOfHistoryReadValueId;
  type record of HistoryReadResult ListOfHistoryReadResult;
  type record of WriteValue ListOfWriteValue;
  type record of HistoryUpdateResult ListOfHistoryUpdateResult;
  type record of CallMethodRequest ListOfCallMethodRequest;
  type record of CallMethodResult ListOfCallMethodResult;
  type record of MonitoredItemCreateRequest ListOfMonitoredItemCreateRequest;
  type record of MonitoredItemCreateResult ListOfMonitoredItemCreateResult;
  type record of MonitoredItemModifyRequest ListOfMonitoredItemModifyRequest;
  type record of MonitoredItemModifyResult ListOfMonitoredItemModifyResult;
  type record of SubscriptionAcknowledgement ListOfSubscriptionAcknowledgement;
  type record of TransferResult ListOfTransferResult;
  type record of BaseDataType ListOfBaseDataType;

  /////////////////////////////////////////////////////////////
  //                                                         //
  //                    Common Parameters                    //
  //                                                         //
  /////////////////////////////////////////////////////////////

  //Information that describes an application.
  type record ApplicationDescription {
    String applicationUri,
    String productUri,
    LocalizedText applicationName,
    ApplicationType applicationType,
    String gatewayServerUri,
    String discoveryProfileUri,
    ListOfString discoveryUrls
  }

  //Information that identified an application instance
  type record ApplicationInstanceSubjectIdentifier {
    String name
  }

  //Information that identified the issuer of an application instance
  type record ApplicationInstanceIssuerIdentifier {
    String productName ,
    String organisation
  }

  type record BrowseResult {
    StatusCode statusCode optional,
    ContinuationPoint continuationPoint,
    ListOfReferenceDescription References
  }

  type record ContentFilter {
    ListOfContentFilterElement elements
  }

  type record ContentFilterElement {
    FilterOperator filterOperator,
    ListOfExtensibleParameter filterOperands
  }

  type record ContentFilterResult {
    ListOfContentFilterElementResult elementResults,
    ListOfDiagnosticInfo elementDiagnosticInfos
  }

  type record ContentFilterElementResult {
    StatusCode statusCode optional,
    ListOfStatusCode operandStatusCodes,
    ListOfDiagnosticInfo operandDiagnosticInfos
  }

  type record ElementOperand {
    UInt32 index
  }

  type record LiteralOperand {
    BaseDataType Value
  }

  type record AttributeOperand {
    NodeId nodeId,
    String alias,
    RelativePath browsePath,
    IntegerId attributeId,
    NumericRange indexRange
  }

  type record SimpleAttributeOperand {
    NodeId typeId,
    ListOfQualifiedName browsePath,
    IntegerId attributeId,
    NumericRange indexRange
  }

  type record MdnsDiscoveryConfiguration {
    String mdnsServerName,
    ListOfString serverCapabilities
  }

  type record EndpointDescription {
    String endpointUrl,
    ApplicationDescription server,
    ByteString  serverCertificate,
    MessageSecurityMode securityMode,
    String securityPolicyUri,
    ListOfUserTokenPolicy userIdentityTokens,
    String transportProfileUri,
    Byte securityLevel
  }

  type record MonitoringParameters {
    IntegerId clientHandle,
    Duration samplingInterval,
    ExtensibleParameter filter,
    Counter queueSize,
    Boolean discardOldest
  }

  type record DataChangeFilter {
    DataChangeTrigger Trigger,
    UInt32 deadbandType,
    Double deadbandValue
  }

  type record EventFilter {
    ListOfSimpleAttributeOperand selectClauses,
    ContentFilter whereClause
  }

  type record EventFilterResult {
    ListOfStatusCode selectClauseResults,
    ListOfDiagnosticInfo selectClauseDiagnosticInfos,
    ContentFilterResult whereClauseResult
  }

  type record AggregateFilter {
    UtcTime startTime,
    NodeId aggregateType,
    Duration processingInterval,
    AggregateConfiguration aggregateConfiguration,
    Boolean useServerCapabilitiesDefaults,
    Boolean treatUncertainAsBad,
    Byte percentDataBad,
    Byte percentDataGood,
    Boolean useSlopedExtrapolation
  }

  type record AggregateConfiguration {
    Boolean TreatUncertainAsBad,
    Boolean useSeverCapabilitiesDefaults,
    Byte PercentDataBad,
    Byte PercentDataGood,
    Boolean UseSlopedExtrapolation
  }

  type record AggregateFilterResult {
    UtcTime revisedStartTime,
    Duration revisedProcessingInterval
  }

  type record ObjectAttributes {
    integer EncodingMask,
    LocalizedText displayName optional,
    LocalizedText description optional,
    Byte eventNotifier optional,
    UInt32 writeMask optional,
    UInt32 userWriteMask optional
  }

  type record VariableAttributes {
    integer EncodingMask,
    LocalizedText displayName optional,
    LocalizedText description optional,
    DataType Value optional,
    NodeId dataType optional,
    Int32 valueRank optional,
    ListOfUInt32 arrayDimensions optional,
    Byte accessLevel optional,
    Byte userAccessLevel optional,
    Duration minimumSamplingInterval optional,
    Boolean historizing optional,
    UInt32 writeMask optional,
    UInt32 userWriteMask optional
  }

  type record MethodAttributes {
    integer EncodingMask,
    LocalizedText displayName optional,
    LocalizedText description optional,
    Boolean executable optional,
    Boolean userExecutable optional,
    UInt32 writeMask optional,
    UInt32 userWriteMask optional
  }

  type record ObjectTypeAttributes {
    integer EncodingMask,
    LocalizedText displayName optional,
    LocalizedText description optional,
    Boolean isAbstract optional,
    UInt32 writeMask optional,
    UInt32 userWriteMask optional
  }

  type record VariableTypeAttributes {
    integer EncodingMask,
    LocalizedText displayName optional,
    LocalizedText description optional,
    DataType Value optional,
    NodeId dataType optional,
    Int32 valueRank optional,
    ListOfUInt32 arrayDimensions optional,
    Boolean isAbstract optional,
    UInt32 writeMask optional,
    UInt32 userWriteMask optional
  }

  type record ReferenceTypeAttributes {
    integer EncodingMask,
    LocalizedText displayName optional,
    LocalizedText description optional,
    Boolean isAbstract optional,
    Boolean symmetric optional,
    LocalizedText inverseName optional,
    UInt32 writeMask optional,
    UInt32 userWriteMask optional
  }

  type record DataTypeAttributes {
    integer EncodingMask,
    LocalizedText displayName optional,
    LocalizedText description optional,
    Boolean isAbstract optional,
    UInt32 writeMask optional,
    UInt32 userWriteMask optional
  }

  type record ViewAttributes {
    integer EncodingMask,
    LocalizedText displayName optional,
    LocalizedText description optional,
    Boolean containsNoLoops optional,
    Byte eventNotifier optional,
    UInt32 writeMask optional,
    UInt32 userWriteMask optional
  }

  type record GenericAttributes {
    ListOfGenericAttributeValue attributeValues
  }

  type record GenericAttributeValue {
    IntegerId attributeId,
    BaseDataType Value
  }

  type record DataChangeNotification {
    ListOfMonitoredItemNotification monitoredItems,
    ListOfDiagnosticInfo diagnosticInfos
  }

  type record MonitoredItemNotification {
    IntegerId clientHandle,
    DataValue Value
  }

  type record EventNotificationList {
    ListOfEventFieldList events
  }

  type record EventFieldList {
    IntegerId clientHandle,
    ListOfBaseDataType eventFields
  }

  type record StatusChangeNotification {
    StatusCode status optional,
    DiagnosticInfo diagnosticInfo
  }

  type record NotificationMessage {
    Counter sequenceNumber,
    UtcTime publishTime,
    ListOfExtensibleParameter notificationData
  }

  type record QueryDataSet {
    ExpandedNodeId nodeId,
    ExpandedNodeId typeDefinitionNode,
    ListOfBaseDataType values
  }

  type record ReadValueId {
    NodeId nodeId,
    IntegerId attributeId,
    NumericRange indexRange,
    QualifiedName dataEncoding
  }

  type record ReferenceDescription {
    NodeId referenceTypeId,
    Boolean isForward,
    ExpandedNodeId nodeId,
    QualifiedName browseName,
    LocalizedText displayName,
    NodeClass nodeClass,
    ExpandedNodeId typeDefinition
  }

  type record RelativePath {
    ListOfRelativePathElement elements
  }

  type record RelativePathElement {
    NodeId referenceTypeId,
    Boolean isInverse,
    Boolean includeSubtypes,
    QualifiedName targetName
  }

  type record RegisteredServer {
    String serverUri,
    String productUri,
    ListOfLocalizedText serverNames,
    ApplicationType serverType,
    String gatewayServerUri,
    ListOfString discoveryUrls,
    String semaphoreFilePath,
    Boolean isOnline
  }

  /////////////////////////////////////////////////////////////
  //                                                         //
  //         Structures for Security (Incomplete)            //
  //                                                         //
  /////////////////////////////////////////////////////////////

  type record ApplicationInstanceCertificate {
    String version,
    ByteString serialNumber,
    String signatureAlgorithm,
    ByteString Signature,
    ApplicationInstanceIssuerIdentifier issuer,
    UtcTime validFrom,
    UtcTime validTo,
    ApplicationInstanceSubjectIdentifier subject,
    String applicationUri,
    ListOfString hostnames,
    ByteString publicKey,
    ListOfString keyUsage
  }

  type record ChannelSecurityToken {
    UInt32 channelId,
    UInt32 tokenId,
    UtcTime createdAt,
    UInt32 revisedLifetime
  }

  type record EncryptedSecret {
    NodeId TypeId,
    Byte EncodingMask,
    UInt32 Length,
    String SecurityPolicyUri,
    ByteString EncryptingCertificate,
    DateTime SigningTime,
    UInt16 PolicyHeaderLength,
    ByteString SigningKey,
    ByteString EncryptingKey,
    ByteString InitializationVector,
    ByteString Nonce,
    Byte PolicyHeaderPadding optional,
    UInt16 PolicyHeaderPaddingSize,
    ByteString Secret,
    Byte PayloadPadding optional,
    UInt16 PayloadPaddingSize,
    Byte Signature optional
  }

  type record RsaEncryptedSecret {
    NodeId TypeId,
    Byte EncodingMask,
    UInt32 Length,
    String SecurityPolicyUri,
    ByteString EncryptingCertificate,
    DateTime SigningTime,
    UInt16 PolicyHeaderLength,
    ByteString SigningKey,
    ByteString EncryptingKey,
    ByteString InitializationVector,
    ByteString Nonce,
    Byte PolicyHeaderPadding optional,
    UInt16 PolicyHeaderPaddingSize,
    ByteString Secret,
    Byte PayloadPadding optional,
    UInt16 PayloadPaddingSize,
    Byte Signature optional
  }

  type record AnonymousIdentityToken {
    String policyId
  }

  type record UserNameIdentityToken {
    String policyId,
    String userName,
    ByteString password,
    String encryptionAlgorithm
  }

  type record X509IdentityToken {
    String policyId,
    ByteString certificateData
  }

  type record IssuedIdentityToken {
    String policyId,
    ByteString tokenData,
    String encryptionAlgorithm
  }

  type record UserTokenPolicy {
    String policyId,
    UserIdentityTokenType tokenType,
    String issuedTokenType,
    String issuerEndpointUrl,
    String securityPolicyUri
  }

  /////////////////////////////////////////////////////////////
  //                                                         //
  //                 Structures for  Services                //
  //                                                         //
  /////////////////////////////////////////////////////////////

  type record ViewDescription {
    NodeId viewId,
    UtcTime timestamp,
    UInt32 viewVersion
  }

  type record TrustListDataType {
    TrustListMasks specifiedLists,
    ListOfByteString trustedCertificates,
    ListOfByteString trustedCrls,
    ListOfByteString issuerCertificates,
    ListOfByteString issuerCrls
  }

  type record ServerOnNetwork {
    UInt32 recordId,
    String serverName,
    String discoveryUrl,
    ListOfString serverCapabilities
  }

  type record AddNodesItem {
    ExpandedNodeId parentNodeId,
    NodeId referenceTypeId,
    QualifiedName browseName,
    NodeClass nodeClass,
    ExtensibleParameter nodeAttributes,
    ExpandedNodeId typeDefinition
  }

  type record AddNodesResult {
    StatusCode statusCode optional,
    NodeId addedNodeId,
    ListOfDiagnosticInfo diagnosticInfos
  }

  type record AddReferencesItem {
    NodeId sourceNodeId,
    NodeId referenceTypeId,
    Boolean isForward,
    String targetServerUri,
    ExpandedNodeId targetNodeId,
    NodeClass targetNodeClass
  }

  type record DeleteNodesItem {
    NodeId nodeId,
    Boolean deleteTargetReferences
  }

  type record DeleteReferencesItem {
    NodeId sourceNodeId,
    NodeId referenceTypeId,
    Boolean isForward,
    ExpandedNodeId targetNodeId,
    Boolean deleteBidirectional
  }

    type record BrowseDescription {
    NodeId nodeId,
    BrowseDirection browseDirection,
    NodeId referenceTypeId,
    Boolean includeSubtypes,
    UInt32 nodeClassMask,
    UInt32 resultMask
  }

  type record SignatureData {
    String algorithm,
    ByteString Signature
  }

  type record SignedSoftwareCertificate {
    ByteString certificateData,
    ByteString Signature
  }

  type record BrowsePath {
    NodeId startingNode,
    RelativePath relativePath
  }

  type record BrowsePathResult {
    StatusCode statusCode optional,
    ListOfBrowsePathTarget targets
  }

  type record BrowsePathTarget {
    ExpandedNodeId targetId,
    Index remainingPathIndex
  }

  type record NodeTypeDescription {
    ExpandedNodeId typeDefinitionNode,
    Boolean includeSubtypes,
    ListOfQueryDataDescription dataToReturn
  }

  type record QueryDataDescription {
    RelativePath relativePath,
    IntegerId attributeId,
    NumericRange indexRange
  }

  type record ParsingResult {
    StatusCode statusCode optional,
    ListOfStatusCode dataStatusCodes,
    ListOfDiagnosticInfo dataDiagnosticInfos
  }

  type record ReadEventDetails {
    Counter numValuesPerNode,
    UtcTime startTime,
    UtcTime endTime,
    EventFilter Filter
  }

  type record ReadRawModifiedDetails {
    Boolean isReadModified ,
    UtcTime startTime,
    UtcTime endTime,
    Counter numValuesPerNode,
    Boolean returnBounds
  }

  type record ReadProcessedDetails {
    UtcTime startTime,
    UtcTime endTime,
    Duration ProcessingInterval,
    ListOfNodeId aggregateType,
    AggregateConfiguration aggregateConfiguration
  }

  type record ReadAtTimeDetails {
    ListOfUtcTime reqTimes,
    Boolean useSimpleBounds
  }

  type record HistoryReadValueId {
    NodeId nodeId,
    NumericRange indexRange,
    QualifiedName dataEncoding,
    ByteString continuationPoint
  }

  type record HistoryReadResult {
    StatusCode statusCode optional,
    ByteString continuationPoint,
    ExtensibleParameter historyData
  }

  type record WriteValue {
    NodeId nodeId,
    IntegerId attributeId,
    NumericRange indexRange,
    DataValue datavalue
  }

  type record UpdateDataDetails {
    NodeId nodeId,
    PerformUpdateType performInsertReplace,
    ListOfDataValue updateValues
  }

  type record UpdateStructureDataDetails {
    NodeId nodeId,
    PerformUpdateTypeExtended performInsertReplace,
    ListOfDataValue updateValues
  }

  type record UpdateEventDetails {
    NodeId nodeId,
    PerformUpdateType performInsertReplace,
    EventFilter filter,
    ListOfDataValue updateValues
  }

  type record DeleteRawModifiedDetails {
    NodeId nodeId,
    Boolean isDeleteModified,
    UtcTime startTime,
    UtcTime endTime
  }

  type record DeleteAtTimeDetails {
    NodeId nodeId,
    ListOfUtcTime reqTimes
  }

  type record DeleteEventDetails {
    NodeId nodeId,
    ListOfByteString eventId
  }

  type record HistoryUpdateResult {
    StatusCode statusCode optional,
    ListOfStatusCode operationResults,
    ListOfDiagnosticInfo diagnosticInfos
  }

  type record CallMethodRequest {
    NodeId objectId,
    NodeId methodId,
    ListOfVariant inputArguments
  }

  type record CallMethodResult {
    StatusCode statusCode optional,
    ListOfStatusCode inputArgumentResults,
    ListOfDiagnosticInfo inputArgumentDiagnosticInfos,
    ListOfVariant outputArguments
  }

  type record MonitoredItemCreateRequest {
    ReadValueId itemToMonitor,
    MonitoringMode monitoringMode,
    MonitoringParameters requestedParameters
  }

  type record MonitoredItemCreateResult {
    StatusCode statusCode optional,
    IntegerId monitoredItemId,
    Duration revisedSamplingInterval,
    Counter revisedQueueSize,
    ExtensibleParameter filterResult
  }

  type record MonitoredItemModifyRequest {
    IntegerId monitoredItemId,
    MonitoringParameters requestedParameters
  }

  type record MonitoredItemModifyResult {
    StatusCode statusCode optional,
    Duration revisedSamplingInterval,
    Counter revisedQueueSize,
    ExtensibleParameter filterResult
  }

  type record SubscriptionAcknowledgement {
    IntegerId subscriptionId,
    Counter sequenceNumber
  }

  type record TransferResult {
    StatusCode statusCode optional,
    ListOfCounter availableSequenceNumbers
  }

  /////////////////////////////////////////////////////////////
  //                                                         //
  //                         Headers                         //
  //                                                         //
  /////////////////////////////////////////////////////////////


  type record MessageHeader {
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize
  }

  type union SecurityHeader {
    AsymmetricSecurityHeader asymmetricSecurityHeader,
    SymmetricSecurityHeader symmetricSecurityHeader
  }

  type record SequenceHeader {
    UInt32 SequenceNumber,
    UInt32 RequestId
  }

  type record AsymmetricSecurityHeader {
    Int32 SecurityPolicyUriLength,
    ListOfByte SecurityPolicyUri,
    Int32 SenderCertificateLength,
    ListOfByte SenderCertificate,
    Int32 ReceiverCertificateThumbprintLength,
    ListOfByte ReceiverCertificateThumbprint
  }

  type record SymmetricSecurityHeader {
    UInt32 TokenId
  }

  type record MessageFooter {
    integer EncodingMask,
    Byte PaddingSize optional,
    ListOfByte Padding optional,
    Byte ExtraPaddingSize optional,
    ListOfByte Signature optional
  }

  type record AdditionalHeader {
    ExpandedNodeId typeId,
    Byte Value
  }

  type record RequestHeader {
    SessionAuthenticationToken authenticationToken,
    UtcTime timestamp,
    IntegerId requestHandle,
    UInt32 returnDiagnostics,
    String auditEntryId,
    UInt32 timeoutHint,
    AdditionalHeader additionalHeader
  }

  type record ResponseHeader {
    UtcTime timestamp,
    IntegerId requestHandle,
    StatusCode serviceResult optional,
    DiagnosticInfo serviceDiagnostics,
    ListOfString stringTable,
    AdditionalHeader additionalHeader
  }

  type record ServiceFault {
    ResponseHeader responseHeader
  }

  /////////////////////////////////////////////////////////////
  //                                                         //
  //                     Basic Messages                      //
  //                                                         //
  /////////////////////////////////////////////////////////////

  type record HelloMessage {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 version,
    UInt32 receiveBufferSize,
    UInt32 sendBufferSize,
    UInt32 maxMessageSize,
    UInt32 maxChunkCount,
    String endPointUrl
  }

  type record AckMessage {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 version,
    UInt32 receiveBufferSize,
    UInt32 sendBufferSize,
    UInt32 maxMessageSize,
    UInt32 maxChunkCount
  }

  type record ErrorMessage {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 errorCode,
    String reason
  }

  type record ReverseHelloMessage {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    String serverUri,
    String endPointUrl
  }

  /////////////////////////////////////////////////////////////
  //                                                         //
  //                 Discovery Service Sets                  //
  //                                                         //
  /////////////////////////////////////////////////////////////

  type record FindServiceRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    String endpointUrl,
    ListOfLocaleId localeIds,
    ListOfString serverUris
  }

  type record FindServiceResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader,
    ListOfApplicationDescription servers
  }

  type record FindServersOnNetworkRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    Counter startingRecordId,
    UInt32 maxRecordsToReturn,
    ListOfString serverCapabilityFilter
  }

  type record FindServersOnNetworkResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader,
    UtcTime lastCounterResetTime,
    ListOfServerOnNetwork servers
  }

  type record GetEndpointsRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    String endpointUrl,
    ListOfLocaleId localeIds,
    ListOfString profileUris
  }

  type record GetEndpointsResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader,
    ListOfEndpointDescription Endpoints
  }

  type record RegisterServerRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    RegisteredServer server
  }

  type record RegisterServerResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader
  }

  type record RegisterServer2Request {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    RegisteredServer server,
    ListOfExtensibleParameter discoveryConfiguration
  }

  type record RegisterServer2Response {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader,
    ListOfStatusCode configurationResults,
    ListOfDiagnosticInfo diagnosticInfos
  }

  /////////////////////////////////////////////////////////////
  //                                                         //
  //               SecureChannel Service Sets                //
  //                                                         //
  /////////////////////////////////////////////////////////////

  type record OpenSecureChannelRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    ListOfByte securePolicyUri,
    ListOfByte senderCertificate,
    ListOfByte receiverCertificateThumbprint,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    UInt32 clientProtocolVersion,
    SecurityTokenRequestType requestType,
    MessageSecurityMode securityMode,
    ByteString clientNonce,
    UInt32 requestedLifetime
  }

  type record OpenSecureChannelResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    ListOfByte securePolicyUri,
    ListOfByte senderCertificate,
    ListOfByte receiverCertificateThumbprint,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader,
    UInt32 serverProtocolVersion,
    ChannelSecurityToken securityToken,
    ByteString serverNonce
  }

  type record CloseSecureChannelRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader
  }

  type record CloseSecureChannelResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader
  }

  /////////////////////////////////////////////////////////////
  //                                                         //
  //                Session Service Sets                     //
  //                                                         //
  /////////////////////////////////////////////////////////////

  type record CreateSessionRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    ApplicationDescription clientDescription,
    String serverUri,
    String endpointUrl,
    String sessionName,
    ByteString clientNonce,
    ByteString clientCertificate,
    Duration requestedSessionTimeout,
    UInt32 maxResponseMessageSize
  }

  type record CreateSessionResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader,
    NodeId sessionId,
    SessionAuthenticationToken authenticationToken,
    Duration revisedSessionTimeout,
    ByteString serverNonce,
    ByteString serverCertificate,
    ListOfEndpointDescription serverEndpoints,
    ListOfSignedSoftwareCertificate serverSoftwareCertificates,
    SignatureData serverSignature,
    UInt32 maxRequestMessageSize
  }

  type record ActivateSessionRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    SignatureData clientSignature,
    ListOfSignedSoftwareCertificate clientSoftwareCertificates,
    ListOfLocaleId localeIds,
    ExtensibleParameter userIdentityToken,
    SignatureData userTokenSignature
  }

  type record ActivateSessionResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader,
    ByteString serverNonce,
    ListOfStatusCode results,
    ListOfDiagnosticInfo diagnosticInfos
  }

  type record CloseSessionRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    Boolean deleteSubscriptions
  }

  type record CloseSessionResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader
  }

  type record CancelRequestRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    IntegerId requestHandle
  }

  type record CancelRequestResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader,
    UInt32 cancelCount
  }

  /////////////////////////////////////////////////////////////
  //                                                         //
  //              NodeManagement Service Sets                //
  //                                                         //
  /////////////////////////////////////////////////////////////

  type record AddNodesRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    ListOfAddNodesItem nodesToAdd
  }

  type record AddNodesResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader,
    ListOfAddNodesResult results
  }

  type record AddReferencesRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    ListOfAddReferencesItem referencesToAdd
  }

  type record AddReferencesResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader,
    ListOfStatusCode results,
    ListOfDiagnosticInfo diagnosticInfos
  }

  type record DeleteNodesRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    ListOfDeleteNodesItem nodesToDelete
  }

  type record DeleteNodesResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader,
    ListOfStatusCode results,
    ListOfDiagnosticInfo diagnosticInfos
  }

  type record DeleteReferencesRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    ListOfDeleteReferencesItem referencesToDelete
  }

  type record DeleteReferencesResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader,
    ListOfStatusCode results,
    ListOfDiagnosticInfo diagnosticInfos
  }

  /////////////////////////////////////////////////////////////
  //                                                         //
  //                 Browse Service Sets                     //
  //                                                         //
  /////////////////////////////////////////////////////////////

  type record BrowseRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    ViewDescription view,
    Counter requestedMaxReferencesPerNode,
    ListOfBrowseDescription nodesToBrowse
  }

  type record BrowseResponse {
    ResponseHeader responseHeader,
    ListOfBrowseResult results,
    ListOfDiagnosticInfo diagnosticInfos
  }

  type record BrowseNextRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    Boolean releaseContinuationPoints,
    ListOfContinuationPoint continuationPoints
  }

  type record BrowseNextResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader,
    ListOfBrowseResult results,
    ListOfDiagnosticInfo diagnosticInfos
  }

  type record TranslateBrowsePathsToNodeIdsRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    ListOfBrowsePath browsePaths
  }

  type record TranslateBrowsePathsToNodeIdsResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader,
    ListOfBrowsePathResult results,
    ListOfDiagnosticInfo diagnosticInfos
  }

  type record RegisterNodesRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    ListOfNodeId nodesToRegister
  }

  type record RegisterNodesResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader,
    ListOfNodeId registeredNodeIds
  }

  type record UnregisterNodesRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    ListOfNodeId nodesToUnregister
  }

  type record UnregisterNodesResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader
  }

  /////////////////////////////////////////////////////////////
  //                                                         //
  //                 Query Service Set                       //
  //                                                         //
  /////////////////////////////////////////////////////////////

  type record QueryFirstRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    ListOfNodeTypeDescription nodeTypes,
    ContentFilter filter,
    Counter maxDataSetsToReturn,
    Counter maxReferencesToReturn
  }

  type record QueryFirstResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader,
    ListOfQueryDataSet queryDataSets,
    ContinuationPoint continuationPoint,
    ListOfParsingResult parsingResults,
    ListOfDiagnosticInfo diagnosticInfos,
    ContentFilterResult filterResult
  }

  type record QueryNextRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    Boolean releaseContinuationPoint,
    ContinuationPoint continuationPoint
  }

  type record QueryNextResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader,
    ListOfQueryDataSet queryDataSets,
    ContinuationPoint revisedContinuationPoint
  }

  /////////////////////////////////////////////////////////////
  //                                                         //
  //                Attribute Service Set                    //
  //                                                         //
  /////////////////////////////////////////////////////////////

  type record ReadRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    Duration maxAge,
    TimestampsToReturn timestampsToReturn,
    ListOfReadValueId nodesToRead
  }

  type record ReadResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader,
    ListOfDataValue results,
    ListOfDiagnosticInfo diagnosticInfos
  }

  type record HistoryReadRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    ExtensibleParameter historyReadDetails,
    TimestampsToReturn timestampsToReturn,
    Boolean releaseContinuationPoints,
    ListOfHistoryReadValueId nodesToRead
  }

  type record HistoryReadResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader,
    ListOfHistoryReadResult results,
    ListOfDiagnosticInfo diagnosticInfos
  }

  type record WriteRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    ListOfWriteValue nodesToWrite
  }

  type record WriteResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader,
    ListOfDiagnosticInfo diagnosticInfos
  }

  type record HistoryUpdateRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    ListOfExtensibleParameter historyUpdateDetails
  }

  type record HistoryUpdateResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader,
    ListOfHistoryUpdateResult results,
    ListOfDiagnosticInfo diagnosticInfos
  }

  /////////////////////////////////////////////////////////////
  //                                                         //
  //                   Method Service Set                    //
  //                                                         //
  /////////////////////////////////////////////////////////////

  type record CallRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    ListOfCallMethodRequest methodsToCall
  }

  type record CallResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader,
    ListOfCallMethodResult results,
    ListOfDiagnosticInfo diagnosticInfos
  }

  /////////////////////////////////////////////////////////////
  //                                                         //
  //                MonitoredItem Service Set                //
  //                                                         //
  /////////////////////////////////////////////////////////////

  type record CreateMonitoredItemsRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    IntegerId subscriptionId,
    TimestampsToReturn timestampsToReturn,
    ListOfMonitoredItemCreateRequest itemsToCreate
  }

  type record CreateMonitoredItemsResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader,
    ListOfMonitoredItemCreateResult results,
    ListOfDiagnosticInfo diagnosticInfos
  }

  type record ModifyMonitoredItemsRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    IntegerId subscriptionId,
    TimestampsToReturn timestampsToReturn,
    ListOfMonitoredItemModifyRequest itemsToModify
  }

  type record ModifyMonitoredItemsResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader,
    ListOfMonitoredItemModifyResult results,
    ListOfDiagnosticInfo diagnosticInfos
  }

  type record SetMonitoringModeRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    IntegerId subscriptionId,
    MonitoringMode monitoringMode,
    ListOfIntegerId monitoredItemIds
  }

  type record SetMonitoringModeResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader,
    ListOfStatusCode results,
    ListOfDiagnosticInfo diagnosticInfos
  }

  type record SetTriggeringRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    IntegerId subscriptionId,
    IntegerId triggeringItemId,
    ListOfIntegerId linksToAdd,
    IntegerId linksToRemove
  }

  type record SetTriggeringResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader,
    ListOfStatusCode addResults,
    ListOfDiagnosticInfo addDiagnosticInfos,
    ListOfStatusCode removeResults,
    ListOfDiagnosticInfo removeDiagnosticInfos
  }

  type record DeleteMonitoredItemsRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    IntegerId subscriptionId,
    ListOfIntegerId monitoredItemIds
  }

  type record DeleteMonitoredItemsResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader,
    ListOfStatusCode results,
    ListOfDiagnosticInfo diagnosticInfos
  }

  /////////////////////////////////////////////////////////////
  //                                                         //
  //                Subscription  Service Set                //
  //                                                         //
  /////////////////////////////////////////////////////////////

  type record CreateSubscriptionRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    Duration requestedPublishingInterval,
    Counter requestedLifetimeCount,
    Counter requestedMaxKeepAliveCount,
    Counter maxNotificationsPerPublish,
    Boolean publishingEnabled,
    Byte priorityInt32
  }

  type record CreateSubscriptionResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader,
    IntegerId subscriptionId,
    Duration revisedPublishingInterval,
    Counter revisedLifetimeCount,
    Counter revisedMaxKeepAliveCount
  }

  type record ModifySubscriptionRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    IntegerId subscriptionId,
    Duration requestedPublishingInterval,
    Counter requestedLifetimeCount,
    Counter requestedMaxKeepAliveCount,
    Counter maxNotificationsPerPublish,
    Byte priority
  }

  type record ModifySubscriptionResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader,
    Duration revisedPublishingInterval,
    Counter revisedLifetimeCount,
    Counter revisedMaxKeepAliveCount
  }

  type record SetPublishingModeRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    Boolean publishingEnabled,
    ListOfIntegerId subscriptionIds
  }

  type record SetPublishingModeResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader,
    ListOfStatusCode results,
    ListOfDiagnosticInfo diagnosticInfos
  }

  type record PublishRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    ListOfSubscriptionAcknowledgement subscriptionAcknowledgements
  }

  type record PublishResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader,
    IntegerId subscriptionId,
    ListOfCounter availableSequenceNumbers,
    Boolean moreNotifications,
    NotificationMessage notificationMessage,
    record of StatusCode results,
    record of DiagnosticInfo diagnosticInfos
  }

  type record RepublishRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    IntegerId subscriptionId,
    Counter retransmitSequenceNumber
  }

  type record RepublishResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader,
    NotificationMessage notificationMessage
  }

  type record TransferSubscriptionsRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    ListOfIntegerId subscriptionIds,
    Boolean sendInitialValues
  }

  type record TransferSubscriptionsResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader,
    ListOfTransferResult results,
    ListOfDiagnosticInfo diagnosticInfos
  }

  type record DeleteSubscriptionsRequest {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    RequestHeader requestHeader,
    ListOfIntegerId subscriptionIds
  }

  type record DeleteSubscriptionsResponse {
    //Message header
    UInt24 messageType,
    Byte chunkType,
    UInt32 messageSize,

    //Message Body
    UInt32 securityChannelId,
    UInt32 securityTokenId,
    SequenceHeader sequenceHeader,

    //Service Header
    Byte encodingByte,
    Byte namespaceIndex,
    UInt16 nodeValue,

    //Service Body
    ResponseHeader responseHeader,
    ListOfStatusCode results,
    ListOfDiagnosticInfo diagnosticInfos
  }

  /////////////////////////////////////////////////////////////
  //                                                         //
  //                Session-less Service                     //
  //                                                         //
  /////////////////////////////////////////////////////////////

  /*type record SessionlessInvokeRequest {
    VersionTime urisVersion,
    ListOfString namespaceUris,
    ListOfString serverUris,
    ListOfLocaleId localeIds,
    UInt32 serviceId,
    SessionlessServices body
  }

  type record SessionlessInvokeResponse {
    ListOfString namespaceUris,
    ListOfString serverUris,
    UInt32 serviceId,
    SessionlessServices body
  }*/

  /////////////////////////////////////////////////////////////
  //                                                         //
  //                    Encoded Types                        //
  //                                                         //
  /////////////////////////////////////////////////////////////

  type union MessageTypes {
    //BasicMessages
    HelloMessage HelloMessage,
    AckMessage AckMessage,
    ErrorMessage ErrorMessage,
    ReverseHelloMessage ReverseHelloMessage,

    //DiscoveryServices
    FindServiceRequest FindServiceRequest,
    FindServiceResponse FindServiceResponse,
    FindServersOnNetworkRequest FindServersOnNetworkRequest,
    FindServersOnNetworkResponse FindServersOnNetworkResponse,
    GetEndpointsRequest GetEndpointsRequest,
    GetEndpointsResponse GetEndpointsResponse,
    RegisterServerRequest RegisterServerRequest,
    RegisterServerResponse RegisterServerResponse,
    RegisterServer2Request RegisterServer2Request,
    RegisterServer2Response RegisterServer2Response,

    //Secure Channel services
    OpenSecureChannelRequest OpenSecureChannelRequest,
    OpenSecureChannelResponse OpenSecureChannelResponse,
    CloseSecureChannelRequest CloseSecureChannelRequest,
    CloseSecureChannelResponse CloseSecureChannelResponse,

    //Session Services
    CreateSessionRequest CreateSessionRequest,
    CreateSessionResponse CreateSessionResponse,
    ActivateSessionRequest ActivateSessionRequest,
    ActivateSessionResponse ActivateSessionResponse,
    CloseSessionRequest CloseSessionRequest,
    CloseSessionResponse CloseSessionResponse,
    CancelRequestRequest CancelRequestRequest,
    CancelRequestResponse CancelRequestResponse,

    //Node Management Services
    AddNodesRequest AddNodesRequest,
    AddNodesResponse AddNodesResponse,
    AddReferencesRequest AddReferencesRequest,
    AddReferencesResponse AddReferencesResponse,
    DeleteNodesRequest DeleteNodesRequest,
    DeleteNodesResponse DeleteNodesResponse,
    DeleteReferencesRequest DeleteReferencesRequest,
    DeleteReferencesResponse DeleteReferencesResponse,

    //View Services
    BrowseRequest BrowseRequest,
    BrowseResponse BrowseResponse,
    BrowseNextRequest BrowseNextRequest,
    BrowseNextResponse BrowseNextResponse,
    TranslateBrowsePathsToNodeIdsRequest TranslateBrowsePathsToNodeIdsRequest,
    TranslateBrowsePathsToNodeIdsResponse TranslateBrowsePathsToNodeIdsResponse,
    RegisterNodesRequest RegisterNodesRequest,
    RegisterNodesResponse RegisterNodesResponse,
    UnregisterNodesRequest UnregisterNodesRequest,
    UnregisterNodesResponse UnregisterNodesResponse,

    //Query Services
    QueryFirstRequest QueryFirstRequest,
    QueryFirstResponse QueryFirstResponse,
    QueryNextRequest QueryNextRequest,
    QueryNextResponse QueryNextResponse,

    //Attribute Services
    ReadRequest ReadRequest,
    ReadResponse ReadResponse,
    HistoryReadRequest HistoryReadRequest,
    HistoryReadResponse HistoryReadResponse,
    WriteRequest WriteRequest,
    WriteResponse WriteResponse,

    //Method Services
    HistoryUpdateRequest HistoryUpdateRequest,
    HistoryUpdateResponse HistoryUpdateResponse,
    CallRequest CallRequest,
    CallResponse CallResponse,

    //Monitored Item Services
    CreateMonitoredItemsRequest CreateMonitoredItemsRequest,
    CreateMonitoredItemsResponse CreateMonitoredItemsResponse,
    ModifyMonitoredItemsRequest ModifyMonitoredItemsRequest,
    ModifyMonitoredItemsResponse ModifyMonitoredItemsResponse,
    SetMonitoringModeRequest SetMonitoringModeRequest,
    SetMonitoringModeResponse SetMonitoringModeResponse,
    SetTriggeringRequest SetTriggeringRequest,
    SetTriggeringResponse SetTriggeringResponse,
    DeleteMonitoredItemsRequest DeleteMonitoredItemsRequest,
    DeleteMonitoredItemsResponse DeleteMonitoredItemsResponse,

    //Subscription Services
    CreateSubscriptionRequest CreateSubscriptionRequest,
    CreateSubscriptionResponse CreateSubscriptionResponse,
    ModifySubscriptionRequest ModifySubscriptionRequest,
    ModifySubscriptionResponse ModifySubscriptionResponse,
    SetPublishingModeRequest SetPublishingModeRequest,
    SetPublishingModeResponse SetPublishingModeResponse,
    PublishRequest PublishRequest,
    PublishResponse PublishResponse,
    RepublishRequest RepublishRequest,
    RepublishResponse RepublishResponse,
    TransferSubscriptionsRequest TransferSubscriptionsRequest,
    TransferSubscriptionsResponse TransferSubscriptionsResponse,
    DeleteSubscriptionsRequest DeleteSubscriptionsRequest,
    DeleteSubscriptionsResponse DeleteSubscriptionsResponse,

    //Sessionless Invoke Services
    //SessionlessInvokeRequest SessionlessInvokeRequest,
    //SessionlessInvokeResponse  SessionlessInvokeResponse,

    ReadRequest readRequest,
    ReadResponse readResponse,
    WriteRequest writeRequest,
    WriteResponse writeResponse,
    CallRequest callRequest,
    CallResponse callResponse
  } with {
    variant "JSON: as value"
  }

} with { encode "JSON" }