-- -- Part of the ASN.1-Specification for MMS -- tries to include only those parts relevant for IEC 61850 -- source: http://www.nettedautomation.com/standardization/iso/tc184/sc5/wg2/mms_syntax/Version1999/mms_syntax.html ASN1 { iso standard 9506 part(2) mms-general-module-version(2) } DEFINITIONS ::= BEGIN MMSpdu ::= CHOICE { confirmed-RequestPDU [0] IMPLICIT Confirmed-RequestPDU, confirmed-ResponsePDU [1] IMPLICIT Confirmed-ResponsePDU, confirmed-ErrorPDU [2] IMPLICIT Confirmed-ErrorPDU, unconfirmed-PDU [3] IMPLICIT Unconfirmed-PDU, rejectPDU [4] IMPLICIT RejectPDU, initiate-RequestPDU [8] IMPLICIT Initiate-RequestPDU, initiate-ResponsePDU [9] IMPLICIT Initiate-ResponsePDU, initiate-ErrorPDU [10] IMPLICIT Initiate-ErrorPDU, conclude-RequestPDU [11] IMPLICIT Conclude-RequestPDU } Confirmed-RequestPDU ::= SEQUENCE { invokeID Unsigned32, service ConfirmedServiceRequest } ConfirmedServiceRequest ::= CHOICE { getNameList [1] IMPLICIT GetNameList-Request, read [4] IMPLICIT Read-Request, write [5] IMPLICIT Write-Request, getVariableAccessAttributes [6] GetVariableAccessAttributes-Request, defineNamedVariableList [11] IMPLICIT DefineNamedVariableList-Request, getNamedVariableListAttributes [12] GetNamedVariableListAttributes-Request, deleteNamedVariableList [13] IMPLICIT DeleteNamedVariableList-Request, fileOpen [72] IMPLICIT FileOpen-Request, fileRead [73] IMPLICIT FileRead-Request, fileClose [74] IMPLICIT FileClose-Request, fileDelete [76] IMPLICIT FileDelete-Request, fileDirectory [77] IMPLICIT FileDirectory-Request } Unconfirmed-PDU ::= SEQUENCE { service UnconfirmedService } UnconfirmedService ::= CHOICE { informationReport [0] IMPLICIT InformationReport } Confirmed-ResponsePDU ::= SEQUENCE { invokeID Unsigned32, service ConfirmedServiceResponse } ConfirmedServiceResponse ::= CHOICE { getNameList [1] IMPLICIT GetNameList-Response, read [4] IMPLICIT Read-Response, write [5] IMPLICIT Write-Response, getVariableAccessAttributes [6] IMPLICIT GetVariableAccessAttributes-Response, defineNamedVariableList [11] IMPLICIT DefineNamedVariableList-Response, getNamedVariableListAttributes [12] IMPLICIT GetNamedVariableListAttributes-Response, deleteNamedVariableList [13] IMPLICIT DeleteNamedVariableList-Response, fileOpen [72] IMPLICIT FileOpen-Response, fileRead [73] IMPLICIT FileRead-Response, fileClose [74] IMPLICIT FileClose-Response, fileDelete [76] IMPLICIT FileDelete-Response, fileDirectory [77] IMPLICIT FileDirectory-Response } Confirmed-ErrorPDU ::= SEQUENCE { invokeID [0] IMPLICIT Unsigned32, modifierPosition [1] IMPLICIT Unsigned32 OPTIONAL, serviceError [2] IMPLICIT ServiceError } ServiceError ::= SEQUENCE { errorClass [0] CHOICE { vmd_state [0] IMPLICIT INTEGER, -- { -- other (0), -- vmd-state-conflict (1), -- vmd-operational-problem (2), -- domain-transfer-problem (3), -- state-machine-id-invalid (4) -- }, application_reference [1] IMPLICIT INTEGER, -- { -- other (0), -- aplication-unreachable (1), -- connection-lost (2), -- application-reference-invalid (3), -- context-unsupported (4) -- }, definition [2] IMPLICIT INTEGER, -- { -- other (0), -- object-undefined (1), -- invalid-address (2), -- type-unsupported (3), -- type-inconsistent (4), -- object-exists (5), -- object-attribute-inconsistent (6) -- }, resource [3] IMPLICIT INTEGER, -- { -- other (0), -- memory-unavailable (1), -- processor-resource-unavailable (2), -- mass-storage-unavailable (3), -- capability-unavailable (4), -- capability-unknown (5) -- }, service [4] IMPLICIT INTEGER, -- { -- other (0), -- primitives-out-of-sequence (1), -- object-state-conflict (2), -- pdu-size (3), -- continuation-invalid (4), -- object-constraint-conflict (5) -- }, service_preempt [5] IMPLICIT INTEGER, -- { -- other (0), -- timeout (1), -- deadlock (2), -- cancel (3) -- }, time_resolution [6] IMPLICIT INTEGER, -- { -- other (0), -- unsupportable-time-resolution (1) -- }, access [7] IMPLICIT INTEGER, -- { -- other (0), -- object-access-unsupported (1), -- object-non-existent (2), -- object-access-denied (3), -- object-invalidated (4) -- }, initiate [8] IMPLICIT INTEGER, -- { -- other (0), -- version-incompatible (1), -- max-segment-insufficient (2), -- max-services-outstanding-calling-insufficient (3), -- max-services-outstanding-called-insufficient (4), -- service-CBB-insufficient (5), -- parameter-CBB-insufficient (6), -- nesting-level-insufficient (7) -- }, conclude [9] IMPLICIT INTEGER, -- { -- other (0), -- further-communication-required (1) -- }, cancel [10] IMPLICIT INTEGER, -- { -- other (0), -- invoke-id-unknown (1), -- cancel-not-possible (2) -- }, file [11] IMPLICIT INTEGER, -- { -- other (0), -- filename-ambiguous (1), -- file-busy (2), -- filename-syntax_Error (3), -- content-type-invalid (4), -- position-invalid (5), -- file-acces-denied (6), -- file-non-existent (7), -- duplicate-filename (8), -- insufficient-space-in-filestore (9) -- }, others [12] IMPLICIT INTEGER }, additionalCode [1] IMPLICIT INTEGER OPTIONAL, additionalDescription [2] IMPLICIT VisibleString OPTIONAL -- serviceSpecificInformation [3] CHOICE -- { -- obtainFile [0] IMPLICIT ObtainFile_Error, -- start [1] IMPLICIT Start_Error, -- stop [2] IMPLICIT Stop_Error, -- resume [3] IMPLICIT Resume_Error, -- reset [4] IMPLICIT Reset_Error, -- deleteVariableAccess [5] IMPLICIT DeleteVariableAccess_Error, -- deleteNamedVariableList [6] IMPLICIT DeleteNamedVariableList_Error, -- deleteNamedType [7] IMPLICIT DeleteNamedType_Error, -- defineEventEnrollment_Error [8] DefineEventEnrollment_Error, -- fileRename [9] IMPLICIT FileRename_Error -- this one is neither in this ASN nor in the IMPORTS -- additionalService [10] AdditionalServiceError -- } OPTIONAL } TimeOfDay ::= OCTET STRING (SIZE(4|6)) BasicIdentifier ::= VisibleString ( FROM ("A"|"a"|"B"|"b"|"C"|"c"|"D"|"d"|"E"|"e"|"F"|"f"| "G"|"g"|"H"|"h"|"I"|"i"|"J"|"j"|"K"|"k"|"L"|"l"| "M"|"m"|"N"|"n"|"O"|"o"|"P"|"p"|"Q"|"q"|"R"|"r"| "S"|"s"|"T"|"t"|"U"|"u"|"V"|"v"|"W"|"w"|"X"|"x"| "Y"|"y"|"Z"|"z"|"$"|"_"|"0"|"1"|"2"|"3"|"4"|"5"| "6"|"7"|"8"|"9") ) (SIZE(1..32)) Identifier ::= VisibleString Integer8 ::= INTEGER(-128..127) Integer16 ::= INTEGER(-32768..32767) Integer32 ::= INTEGER(-2147483648..2147483647) Unsigned8 ::= INTEGER(0..255) Unsigned16 ::= INTEGER(0..65535) Unsigned32 ::= INTEGER(0..4294967295) ObjectName ::= CHOICE { vmd-specific [0] IMPLICIT Identifier, domain-specific [1] IMPLICIT SEQUENCE { domainID Identifier, itemID Identifier }, aa-specific [2] IMPLICIT Identifier } ObjectClass ::= CHOICE { basicObjectClass [0] IMPLICIT INTEGER -- { -- namedVariable (0), -- scatteredAccess (1), -- namedVariableList (2), -- namedType (3), -- semaphore (4), -- eventCondition (5), -- eventAction (6), -- eventEnrollment (7), -- journal (8), -- domain (9), -- programInvocation (10), -- operatorStation (11), -- dataExchange (12), ---- Shall not appear in minor version 1 -- accessControlList (13) ---- Shall not appear in minor version 1 or 2 -- } } MMSString ::= VisibleString Initiate-RequestPDU ::= SEQUENCE { localDetailCalling [0] IMPLICIT Integer32 OPTIONAL, proposedMaxServOutstandingCalling [1] IMPLICIT Integer16, proposedMaxServOutstandingCalled [2] IMPLICIT Integer16, proposedDataStructureNestingLevel [3] IMPLICIT Integer8 OPTIONAL, initRequestDetail [4] IMPLICIT SEQUENCE { proposedVersionNumber [0] IMPLICIT Integer16, proposedParameterCBB [1] IMPLICIT ParameterSupportOptions, servicesSupportedCalling [2] IMPLICIT ServiceSupportOptions } } Initiate-ResponsePDU ::= SEQUENCE { localDetailCalled [0] IMPLICIT Integer32 OPTIONAL, negotiatedMaxServOutstandingCalling [1] IMPLICIT Integer16, negotiatedMaxServOutstandingCalled [2] IMPLICIT Integer16, negotiatedDataStructureNestingLevel [3] IMPLICIT Integer8 OPTIONAL, initResponseDetail [4] IMPLICIT SEQUENCE { negotiatedVersionNumber [0] IMPLICIT Integer16, negotiatedParameterCBB [1] IMPLICIT ParameterSupportOptions, servicesSupportedCalled [2] IMPLICIT ServiceSupportOptions } } Initiate-ErrorPDU ::= ServiceError Conclude-RequestPDU ::= NULL RejectPDU ::= SEQUENCE { originalInvokeID [0] IMPLICIT Unsigned32 OPTIONAL, rejectReason CHOICE { confirmed-requestPDU [1] IMPLICIT INTEGER, -- { -- other (0), -- unrecognized-service (1), -- unrecognized-modifier (2), -- invalid-invokeID (3), -- invalid-argument (4), -- invalid-modifier (5), -- max-serv-outstanding-exceeded (6), -- max-recursion-exceeded (8), -- value-out-of-range (9) -- }, confirmed-responsePDU [2] IMPLICIT INTEGER, -- { -- other (0), -- unrecognized-service (1), -- invalid-invokeID (2), -- invalid-result (3), -- max-recursion-exceeded (5), -- value-out-of-range (6) -- }, confirmed-errorPDU [3] IMPLICIT INTEGER, -- { -- other (0), -- unrecognized-service (1), -- invalid-invokeID (2), -- invalid-serviceError (3), -- value-out-of-range (4) -- } , unconfirmedPDU [4] IMPLICIT INTEGER, -- { -- other (0), -- unrecognized-service (1), -- invalid-argument (2), -- max-recursion-exceeded (3), -- value-out-of-range (4) -- }, pdu-error [5] IMPLICIT INTEGER, -- { -- unknown-pdu-type (0), -- invalid-pdu (1), -- illegal-acse-mapping (2) -- }, cancel-requestPDU [6] IMPLICIT INTEGER, -- { -- other (0), -- invalid-invokeID (1) -- }, cancel-responsePDU [7] IMPLICIT INTEGER, -- { -- other (0), -- invalid-invokeID (1) -- }, cancel-errorPDU [8] IMPLICIT INTEGER, -- { -- other (0), -- invalid-invokeID (1), -- invalid-serviceError (2), -- value-out-of-range (3) -- }, conclude-requestPDU [9] IMPLICIT INTEGER, -- { -- other (0), -- invalid-argument (1) -- }, conclude-responsePDU [10] IMPLICIT INTEGER, -- { -- other (0), -- invalid-result (1) -- }, conclude-errorPDU [11] IMPLICIT INTEGER -- { -- other (0), -- invalid-serviceError (1), -- value-out-of-range (2) -- } } } GetNameList-Request ::= SEQUENCE { objectClass [0] ObjectClass, objectScope [1] CHOICE { vmdSpecific [0] IMPLICIT NULL, domainSpecific [1] IMPLICIT Identifier, aaSpecific [2] IMPLICIT NULL }, continueAfter [2] IMPLICIT Identifier OPTIONAL } GetNameList-Response ::= SEQUENCE { listOfIdentifier [0] IMPLICIT SEQUENCE OF Identifier, moreFollows [1] IMPLICIT BOOLEAN DEFAULT TRUE } TypeSpecification ::= CHOICE { -- typeName [0] ObjectName, typeDescription TypeDescription } AlternateAccess ::= SEQUENCE OF CHOICE { unnamed AlternateAccessSelection -- named [5] IMPLICIT SEQUENCE { -- componentName [0] CHOICE { -- basic BasicIdentifier, -- extended ExtendedIdentifier -- }, -- access AlternateAccessSelection -- } } AlternateAccessSelection ::= CHOICE { selectAlternateAccess [0] IMPLICIT SEQUENCE { accessSelection CHOICE { component [0] CHOICE { basic BasicIdentifier --, --extended ExtendedIdentifier }, -- component index [1] IMPLICIT Unsigned32, -- 1 array element indexRange [2] IMPLICIT SEQUENCE { -- array elements lowIndex [0] IMPLICIT Unsigned32, numberOfElements [1] IMPLICIT Unsigned32 }, allElements [3] IMPLICIT NULL -- all array elements }, alternateAccess AlternateAccess }, selectAccess CHOICE { component [1] CHOICE { basic BasicIdentifier --, --extended ExtendedIdentifier }, -- component index [2] IMPLICIT Unsigned32, -- 1 array element indexRange [3] IMPLICIT SEQUENCE { -- array elements lowIndex [0] IMPLICIT Unsigned32, numberOfElements [1] IMPLICIT Unsigned32 }, allElements [4] IMPLICIT NULL -- all array elements } } AccessResult ::= CHOICE { failure [0] IMPLICIT DataAccessError, success Data } Data ::= CHOICE { -- context tag 0 is reserved for AccessResult array [1] IMPLICIT SEQUENCE OF Data, structure [2] IMPLICIT SEQUENCE OF Data, --boolean [3] IMPLICIT BOOLEAN, bool [3] IMPLICIT BOOLEAN, bit-string [4] IMPLICIT BIT STRING, integer [5] IMPLICIT INTEGER, unsigned [6] IMPLICIT INTEGER, -- shall not be negative floating-point [7] IMPLICIT FloatingPoint, -- [8] is reserved octet-string [9] IMPLICIT OCTET STRING, visible-string [10] IMPLICIT VisibleString, --generalized-time [11] IMPLICIT GeneralizedTime, binary-time [12] IMPLICIT TimeOfDay, --bcd [13] IMPLICIT INTEGER, ---- shall not be negative --booleanArray [14] IMPLICIT BIT STRING, --objId [15] IMPLICIT OBJECT IDENTIFIER, --..., mMSString [16] IMPLICIT MMSString, utc-time [17] IMPLICIT UtcTime -- added by IEC61850 8.1 G3 } FloatingPoint ::= OCTET STRING DataAccessError ::= INTEGER --{ -- object-invalidated (0), -- hardware-fault (1), -- temporarily-unavailable (2), -- object-access-denied (3), -- object-undefined (4), -- invalid-address (5), -- type-unsupported (6), -- type-inconsistent (7), -- object-attribute-inconsistent (8), -- object-access-unsupported (9), -- object-non-existent (10), -- object-value-invalid (11) --} VariableAccessSpecification ::= CHOICE { listOfVariable [0] IMPLICIT VariableDefs, variableListName [1] ObjectName } VariableDefs ::= SEQUENCE OF SEQUENCE { variableSpecification VariableSpecification, alternateAccess [5] IMPLICIT AlternateAccess OPTIONAL } VariableSpecification ::= CHOICE { name [0] ObjectName -- address [1] Address, -- variableDescription [2] IMPLICIT SEQUENCE { -- address Address, -- typeSpecificationTypeSpecification -- }, -- the following element is present only to support the services -- defined in annex E -- scatteredAccessDescription [3] IMPLICIT ScatteredAccessDescription, -- invalidated [4] IMPLICIT NULL } Read-Request ::= SEQUENCE { specificationWithResult [0] IMPLICIT BOOLEAN DEFAULT FALSE, variableAccessSpecification [1] VariableAccessSpecification } Read-Response ::= SEQUENCE { variableAccessSpecification [0] VariableAccessSpecification OPTIONAL, listOfAccessResult [1] IMPLICIT SEQUENCE OF AccessResult } Write-Request ::= SEQUENCE { variableAccessSpecification VariableAccessSpecification, listOfData [0] IMPLICIT SEQUENCE OF Data } Write-Response ::= SEQUENCE OF CHOICE { failure [0] IMPLICIT DataAccessError, success [1] IMPLICIT NULL } InformationReport ::= SEQUENCE { variableAccessSpecification VariableAccessSpecification, listOfAccessResult [0] IMPLICIT SEQUENCE OF AccessResult } GetVariableAccessAttributes-Request ::= CHOICE { name [0] ObjectName -- address [1] Address } GetVariableAccessAttributes-Response ::= SEQUENCE { mmsDeletable [0] IMPLICIT BOOLEAN, -- address [1] Address OPTIONAL, typeDescription [2] TypeDescription -- accessControlList [3] CHOICE { -- basic BasicIdentifier, -- extended ExtendedIdentifier -- } OPTIONAL, -- meaning [4] ObjectName OPTIONAL } DefineNamedVariableList-Request ::= SEQUENCE { variableListName ObjectName, listOfVariable [0] IMPLICIT VariableDefs } DefineNamedVariableList-Response ::= NULL GetNamedVariableListAttributes-Request ::= ObjectName -- VariableListName GetNamedVariableListAttributes-Response ::= SEQUENCE { mmsDeletable [0] IMPLICIT BOOLEAN, listOfVariable [1] IMPLICIT VariableDefs -- accessControlList [2] CHOICE { -- basic BasicIdentifier, -- extended ExtendedIdentifier -- } OPTIONAL } DeleteNamedVariableList-Request ::= SEQUENCE { scopeOfDelete [0] IMPLICIT INTEGER DEFAULT 0, -- { -- specific (0), -- aa-specific (1), -- domain (2), -- vmd (3) -- } DEFAULT specific, listOfVariableListName [1] IMPLICIT SEQUENCE OF ObjectName OPTIONAL, domainName [2] CHOICE { basic BasicIdentifier --, --extended ExtendedIdentifier } OPTIONAL } DeleteNamedVariableList-Response ::= SEQUENCE { numberMatched [0] IMPLICIT Unsigned32, numberDeleted [1] IMPLICIT Unsigned32 } FileOpen-Request ::= SEQUENCE { fileName [0] IMPLICIT FileName, initialPosition [1] IMPLICIT Unsigned32 } FileOpen-Response ::= SEQUENCE { frsmID [0] IMPLICIT Integer32, fileAttributes [1] IMPLICIT FileAttributes } FileRead-Request ::= Integer32 -- FRSM ID FileRead-Response ::= SEQUENCE { fileData [0] IMPLICIT OCTET STRING, moreFollows [1] IMPLICIT BOOLEAN DEFAULT TRUE } FileClose-Request ::= Integer32 -- FRSM ID FileClose-Response ::= NULL FileDelete-Request ::= FileName FileDelete-Response ::= NULL FileDirectory-Request ::= SEQUENCE { fileSpecification [0] IMPLICIT FileName OPTIONAL, continueAfter [1] IMPLICIT FileName OPTIONAL } FileDirectory-Response ::= SEQUENCE { listOfDirectoryEntry [0] SEQUENCE OF DirectoryEntry, moreFollows [1] IMPLICIT BOOLEAN DEFAULT FALSE } DirectoryEntry ::= SEQUENCE { fileName [0] IMPLICIT FileName, fileAttributes [1] IMPLICIT FileAttributes } FileAttributes ::= SEQUENCE { sizeOfFile [0] IMPLICIT Unsigned32, -- in octets lastModified [1] IMPLICIT GeneralizedTime OPTIONAL } FileName ::= SEQUENCE OF GraphicString TypeDescription ::= CHOICE { array [1] IMPLICIT SEQUENCE { packed [0] IMPLICIT BOOLEAN DEFAULT FALSE, numberOfElements [1] IMPLICIT Unsigned32, elementType [2] TypeSpecification }, structure [2] IMPLICIT SEQUENCE { packed [0] IMPLICIT BOOLEAN DEFAULT FALSE, components [1] IMPLICIT SEQUENCE OF SEQUENCE { componentName [0] IMPLICIT Identifier OPTIONAL, componentType [1] TypeSpecification } }, -- Simple Size Class --boolean [3] IMPLICIT NULL, bool [3] IMPLICIT NULL, bit-string [4] IMPLICIT Integer32, -- BIT-STRING integer [5] IMPLICIT Unsigned8, -- INTEGER unsigned [6] IMPLICIT Unsigned8, -- UNSIGNED floating-point [7] IMPLICIT SEQUENCE { format-width Unsigned8, -- number of bits of -- floating point value -- including sign, exponent, -- and fraction exponent-width Unsigned8 -- size of exponent in bits }, -- [8] is reserved octet-string [9] IMPLICIT Integer32, -- OCTET-STRING visible-string [10] IMPLICIT Integer32, -- VISIBLE-STRING -- generalized-time [11] IMPLICIT NULL, ---- GENERALIZED-TIME binary-time [12] IMPLICIT BOOLEAN, -- BINARY-TIME -- bcd [13] IMPLICIT Unsigned8, ---- BCD -- objId [15] IMPLICIT NULL, --..., mMSString [16] IMPLICIT Integer32, -- MMS String utc-time [17] IMPLICIT NULL -- from IEC61850 8.1 G.2 } UtcTime ::= OCTET STRING (SIZE (8)) ParameterSupportOptions ::= BIT STRING --{ -- str1 (0), str2 (1), vnam (2), valt (3), vadr (4), vsca (5), tpy (6), vlis (7), real (8), cei (10) --} ServiceSupportOptions ::= BIT STRING -- { -- status (0), -- getNameList (1), -- identify (2), -- rename (3), -- read (4), -- write (5), -- getVariableAccessAttributes (6), -- defineNamedVariable (7), -- defineScatteredAccess (8), -- getScatteredAccessAttributes (9), -- deleteVariableAccess (10), -- defineNamedVariableList (11), -- getNamedVariableListAttributes (12), -- deleteNamedVariableList (13), -- defineNamedType (14), -- getNamedTypeAttributes (15), -- deleteNamedType (16), -- input (17), -- output (18), -- takeControl (19), -- relinquishControl (20), -- defineSemaphore (21), -- deleteSemaphore (22), -- reportSemaphoreStatus (23), -- reportPoolSemaphoreStatus (24), -- reportSemaphoreEntryStatus (25), -- initiateDownloadSequence (26), -- downloadSegment (27), -- terminateDownloadSequence (28), -- initiateUploadSequence (29), -- uploadSegment (30), -- terminateUploadSequence (31), -- requestDomainDownload (32), -- requestDomainUpload (33), -- loadDomainContent (34), -- storeDomainContent (35), -- deleteDomain (36), -- getDomainAttributes (37), -- createProgramInvocation (38), -- deleteProgramInvocation (39), -- start (40), -- stop (41), -- resume (42), -- reset (43), -- kill (44), -- getProgramInvocationAttributes (45), -- obtainFile (46), -- defineEventCondition (47), -- deleteEventCondition (48), -- getEventConditionAttributes (49), -- reportEventConditionStatus (50), -- alterEventConditionMonitoring (51), -- triggerEvent (52), -- defineEventAction (53), -- deleteEventAction (54), -- getEventActionAttributes (55), -- reportEventActionStatus (56), -- defineEventEnrollment (57), -- deleteEventEnrollment (58), -- alterEventEnrollment (59), -- reportEventEnrollmentStatus (60), -- getEventEnrollmentAttributes (61), -- acknowledgeEventNotification (62), -- getAlarmSummary (63), -- getAlarmEnrollmentSummary (64), -- readJournal (65), -- writeJournal (66), -- initializeJournal (67), -- reportJournalStatus (68), -- createJournal (69), -- deleteJournal (70), -- getCapabilityList (71), -- fileOpen (72), -- fileRead (73), -- fileClose (74), -- fileRename (75), -- fileDelete (76), -- fileDirectory (77), -- unsolicitedStatus (78), -- informationReport (79), -- eventNotification (80), -- attachToEventCondition (81), -- attachToSemaphore (82), -- conclude (83), -- cancel (84) -- } END